RegExp

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • RGB
    Medlem
    • 1999-12-07
    • 362

    #1

    RegExp

    Kort och gott:
    1. Jag har en text fil som ska laddas upp på en unix-server.
    2. Med hjälp av ett perlscript ska innehållet i filen läsas in och ändras för att slutligen sparas i en html-fil som ska visas för användaren som laddae upp textfilen i steg 1.

    Innehållet i text ser ut så här med den skillnad att att antalet rader i filen inte nödvändigtvis är det samma:
    [kod]
    ;;1;;Namn (P) E_Namn / ;Gävle GK;70;;SCR
    ;;1;;Namn (P) E_Namn / ;Grönlund GK;70;;SCR
    ;;3;;Namn (P) E_Namn / ;Orust GK;71;;SCR
    ;;3;;Namn (P) E_Namn / ;Rättviks GK;71;;SCR
    ;;3;;Namn (P) E_Namn / ;Falsterbo GK;71;;SCR
    ;;3;;Namn (P) E_Namn / ;Gävle GK;71;;SCR
    ;;3;;Namn / ;Härnösands GK;71;;SCR
    ;;3;;Namn (P) E_Namn / ;Högbo GK;71;;SCR
    ;;9;;Namn / ;Falun-Borlänge GK;72;;SCR
    ;;9;;Namn (P) E_Namn / ;Högbo GK;72;;SCR
    ;;11;;Namn (P) E_Namn / ;Rättviks GK;73;;SCR
    ;;11;;Namn (P) E_Namn / ;Tortuna GK;73;;SCR
    [/kod]

    Outputen som ska sparas i HTML-filen ska seut så här:
    [kod]

    <tr><td bgcolor=green>1</td><td bgcolor=green>Namn (P)E_Namn </td><td bgcolor=green>Gävle GK</td><td bgcolor=green>70</td><td bgcolor=green>SCR</td></tr>
    <tr><td bgcolor=green>1</td><td bgcolor=green>Namn (P) E_Namn </td><td bgcolor=green>Grönlund GK</td><td bgcolor=green>70</td><td bgcolor=green>SCR</td></tr>
    <tr><td bgcolor=green>3</td><td bgcolor=green>Namn (P) E_Namn </td><td bgcolor=green>Orust GK</td><td bgcolor=green>71</td><td bgcolor=green>SCR</td></tr>
    <tr><td bgcolor=green>3</td><td bgcolor=green>Namn (P) E_Namn </td><td bgcolor=green>Rättviks GK</td><td bgcolor=green>71</td><td bgcolor=green>SCR</td></tr>
    <tr><td bgcolor=green>3</td><td bgcolor=green>Namn (P) E_Namn </td><td bgcolor=green>Falsterbo GK</td><td bgcolor=green>71</td><td bgcolor=green>SCR</td></tr>
    <tr><td bgcolor=green>3</td><td bgcolor=green>Namn (P) E_Namn </td><td bgcolor=green>Gävle GK</td><td bgcolor=green>71</td><td bgcolor=green>SCR</td></tr>
    <tr><td bgcolor=green>3</td><td bgcolor=green>Namn </td><td bgcolor=green>Härnösands GK</td><td bgcolor=green>71</td><td bgcolor=green>SCR</td></tr>
    <tr><td bgcolor=green>3</td><td bgcolor=green>Namn (P) E_Namn </td><td bgcolor=green>Högbo GK</td><td bgcolor=green>71</td><td bgcolor=green>SCR</td></tr>
    <tr><td bgcolor=green>9</td><td bgcolor=green>Namn E_Namn </td><td bgcolor=green>Falun-Borlänge GK</td><td bgcolor=green>72</td><td bgcolor=green>SCR</td></tr>
    <tr><td bgcolor=green>9</td><td bgcolor=green>Namn (P) E_Namn </td><td bgcolor=green>Högbo GK</td><td bgcolor=green>72</td><td bgcolor=green>SCR</td></tr>
    <tr><td bgcolor=green>11</td><td bgcolor=green>Namn (P) E_Namn </td><td bgcolor=green>Rättviks GK</td><td bgcolor=green>73</td><td bgcolor=green>SCR</td></tr>
    <tr><td bgcolor=green>11</td><td bgcolor=green>Namn (P) E_Namn </td><td bgcolor=green>Tortuna GK</td><td bgcolor=green>73</td><td bgcolor=green>SCR</td></tr>
    [/kod]

    Om jag kunde använt mig av ASP så hade det inte varit ngt större problem att lösa det hela men nu så måste jag använda mig av Perl som jag är minst sagt värdelös på kan inte ens grunderna i språket men som jag har förstått så ska det iaf vara överlägset det mesta när det gäller att bearbeta textfiler.
    Så jag hoppas att det inte är ngt större problem för något som kan språket att hjälpa mig med mitt lilla problem

    Bör väl tilläggas att jag inte är världens höjdare på reguljära uttryck heller

    //R.G.B

    [Redigerat av RGB den 24 mar 2000]
    -----------------------------------------------
    To be frank and concise, Macromedia Flash defies all known physical models by both simultaneously sucking and blowing.
  • Robban
    Medlem
    • 1999-12-04
    • 2272

    #2
    Funktionen split() är ju ett utmärkt val i sådana här fall.

    <BLOCKQUOTE><font size="1" face="Verdana, Arial, Helvetica, sans-serif">Perl-kod:[/kod]<pre>
    # Läser in textfilen
    open INFILE, "<data.txt" or die "Error: $!";
    my @rows = <INFILE>;
    close INFILE;

    # Skriver ut resultatet
    open OUTFILE, ">result.html" or die "Error: $!";
    # Här skrivs inledande HTML in
    map {
    my @items = split /;/;
    chop $items[4];
    chop $items[4];
    chomp $items[8];
    print <<_EOF_;
    <tr><td bgcolor=green>$items[2]</td><td bgcolor=green>$items[4]</td>
    <td bgcolor=green>$items[5]</td><td bgcolor=green>$items[6]</td>
    <td bgcolor=green>$items[8]</td></tr>
    _EOF_
    } @rows;
    # Här skrivs avslutande HTML in
    close OUTFILE;
    [/kod]

    ------------------
    Robban < [email protected] >

    [Redigerat av Robban den 24 mar 2000]

    [Redigerat av Robban den 24 mar 2000]
    Robban [email protected]

    Comment

    • RGB
      Medlem
      • 1999-12-07
      • 362

      #3
      Tackar

      //R.G.B
      -----------------------------------------------
      To be frank and concise, Macromedia Flash defies all known physical models by both simultaneously sucking and blowing.

      Comment

      • woodi
        Medlem
        • 2000-02-06
        • 670

        #4
        Ovanstående kod fungerar inte för mig..
        Får följande fel när jag kör koden i konsolen:

        syntax error at ./golf.pl line 20, near "@rows
        # Här skrivs avslutande HTML in
        close"
        Execution of ./golf.pl aborted due to compilation errors.

        Hela koden:
        [kod]
        #!/usr/bin/perl
        # Läser in textfilen
        open INFILE, "<data.txt" or die "Error: $!";
        my @rows = <INFILE>;
        close INFILE;
        # Skriver ut resultatet
        open OUTFILE, ">golf.htm" or die "Error: $!";
        # Här skrivs inledande HTML in
        map {
        my @items = split /;/;
        chop $items[4];
        chop $items[4];
        chomp $items[8];
        print <<_EOF_;
        <tr bgcolor=green><td>$items[2]</td><td>$items[4]</td>
        <td>$items[5]</td><td>$items[6]</td><td>$items[8]</td></tr>
        _EOF_
        } @rows
        # Här skrivs avslutande HTML in
        close OUTFILE;
        [/kod]

        ------------------
        Svenska FF1
        www.johan-skog.nu
        /W*
        woodi

        Comment

        • Robban
          Medlem
          • 1999-12-04
          • 2272

          #5
          Du saknar ett semikolon efter @rows.

          ------------------
          Robban < [email protected] >
          Robban [email protected]

          Comment

          • woodi
            Medlem
            • 2000-02-06
            • 670

            #6
            Aha.. Så dumt..
            Men det är något lurt iaf.. Filen golf.htm skapas men den är och förblir tom..
            HTML koden skrivs ut i konsolen men lagras alltså inte i golf.htm..

            Någon som vet vad som är fel!?

            ------------------
            Svenska FF1
            www.johan-skog.nu
            /W*
            woodi

            Comment

            • Robban
              Medlem
              • 1999-12-04
              • 2272

              #7
              Japp, en typo av mig.

              print <<_EOF_;

              ... skall vara ...

              print OUTFILE <<_EOF_;

              ------------------
              Robban < [email protected] >
              Robban [email protected]

              Comment

              • woodi
                Medlem
                • 2000-02-06
                • 670

                #8
                Är inte riktigt haj på Perl ännu..

                Om jag vid ett senare tillfälle vill fylla på filen golf.htm med fler rader hur gör jag då!?
                Med andra ord, om jag får en ny data.txt med nya data som ska läggas till och jag vill använda mig av samma script..

                Robban
                Tack, det funkar!

                ------------------
                Svenska FF1
                www.johan-skog.nu
                /W*
                woodi

                Comment

                • Robban
                  Medlem
                  • 1999-12-04
                  • 2272

                  #9
                  Det bestäms när du öppnar filen. Om du använder vad jag har skrivit:

                  open OUTFILE, ">result.html" or die "Error: $!";

                  ... så kommer innehållet i filen att raderas i samband med öppnandet. Om du i stället skriver:

                  open OUTFILE, ">>result.html" or die "Error: $!";

                  ... så kommer det du skriver till den läggas efter det som redan fanns där. Ingen radering sker alltså.

                  ------------------
                  Robban < [email protected] >

                  [Redigerat av Robban den 31 mar 2000]
                  Robban [email protected]

                  Comment

                  • woodi
                    Medlem
                    • 2000-02-06
                    • 670

                    #10
                    Vad dum jag är!

                    ------------------
                    Svenska FF1
                    www.johan-skog.nu
                    /W*
                    woodi

                    Comment

                    Working...