Avatar billede leinir Nybegynder
05. april 2004 - 21:40 Der er 7 kommentarer og
1 løsning

HTML tabel lavet med pregexp_replace ud fra simpel text?

Jeg har denne tekst formateret som for eksempel herunder (tabeller starter og slutter med // på en tom linje, rækker starter med / på en tom linje, celler er enkelte linjer, som gerne må indeholde html):

//
/
række 1, celle 1
række 1, celle 2
/
række 2, celle 1
række 2, celle 2
række 2, celle 3
//

og vil gerne have dette oversat til følgende:

<table>
<tr>
<td>række 1, celle 1</td>
<td>række 2, celle 2</td>
</tr>
<tr>
<td>række 2, celle 1</td>
<td>række 2, celle 2</td>
<td>række 2, celle 3</td>
</tr>
</table>

Jeg vil gerne lave dette med pregexp_replace, men jeg kan ikke få det til at virke... Ja, jeg kan ikke engang få en regular expression til at acceptere teksten (jeg har prøvet med en QT expression //[\n](/[\n](.*[\n])*)*//[\n] som ikke virker), og jeg tænkte derfor, om folk på dette, det største IT forum i norden måske kunne hjælpe mig. Hvem end der kan det kommer på min liste over meget seje personer :)
Avatar billede dennismp Nybegynder
06. april 2004 - 10:53 #1
<?php
    $lines = array();
    $lines[] = '//';
    $lines[] = '/';
    $lines[] = 'række1, cell 1';
    $lines[] = 'række1, cell 2';
    $lines[] = '/';
    $lines[] = 'række2, cell 1';
    $lines[] = 'række2, cell 2';
    $lines[] = 'række2, cell 3';
    $lines[] = '/';
    $lines[] = 'række3, cell 1';
    $lines[] = '//';

    $inTable = false;
    $firstRow = true;
    foreach($lines as $line) {
        switch($line) {
            case '//':
                if( $inTable )
                    print " </tr>\n</table>\n";
                else
                    print "<table>\n";
                $inTable = $inTable ? false : true;
                break;

            case '/':
                if( $firstRow ) {
                    $firstRow = false;
                    print " <tr>\n";
                }
                else {
                    print " </tr>\n <tr>\n";
                }
                break;

            default:
                print "  <td>$line</td>\n";
        }
    }
?>
Avatar billede dennismp Nybegynder
06. april 2004 - 10:53 #2
Det er dog ikke regulær udtryk, nogen speciel grund til at du gerne vil have det, til at være det?
Avatar billede leinir Nybegynder
06. april 2004 - 11:43 #3
Det skal bruges til layout af en side (et CMS system med en wiki-agtig syntax), og pregexp_replace er langt hurtigere end en foreach+switch som ovenfor... Selv om det dog er noget hurtigere end den nok lidt for indviklede foreach+foreach+foreach jeg havde gang i :)
Avatar billede dennismp Nybegynder
06. april 2004 - 11:57 #4
Jeg tror du har misforstået noget. Regulære udtryk er meget langsommere end almindelig statements, da de (kan være) temmelig komplekse. De er nemmere at skrive, men ikke at udføre.
Avatar billede leinir Nybegynder
06. april 2004 - 13:17 #5
Vi sidder her nede i Boxen ( www.boxen.dk ) og får os en lille snak om det, og bliver enige om at du nu nok i det her tilfælde har ret. Du får hermed de 150 point, og mange tak for hjælpe :)
Avatar billede leinir Nybegynder
06. april 2004 - 13:18 #6
Oops, det hedder www.boxen.org selvfølgeligt ;)
Avatar billede dennismp Nybegynder
06. april 2004 - 13:19 #7
Hvad er boxen? (url'en virker ikke herfra).
Avatar billede leinir Nybegynder
06. april 2004 - 13:23 #8
En ny side er undervejs, men den er ikke færdig endnu... www.boxen.org/beta/
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester