Auslesen einer Textdatei

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Auslesen einer Textdatei

    Hallo,

    ich habe eine Textdatei die folgende Struktur besitzt:

    Code:
    ##ID:08.12.23.20.16.15
    ##SP1:strolch;-7
    ##SP2:gentzy;-5
    ##SP3:gorby;-9
    ##SP4:Winni;21
    Dies soll dann in eine Tabelle, in einer MySQL-Datenbank eingetragen werden.

    ##ID:08.12.23.20.16.15 soll zu datum 2008-12-23 und serie 216015 werden, wobei datum den Spaltentyp date und serie den Spaltentyp int(10) hat.

    Die Zeilen ##SP1:strolch;-7, ##SP2:gentzy;-5, ##SP3:gorby;-9, ##SP4:Winni;21 sollen zu spieler_id, ergebnis und platzierung werden,
    wobei die Platzierung von 1 bis 4, je nach Punkten sein soll.

    Der Spaltentyp für spieler_id ist varchar(100) und der Spaltentyp für ergebnis und platzierung ist int(10).

    Wie kann man das am besten realisieren?


    LG Sven

  • #2
    Wie sehen denn deine Ansätze aus? Du hast die Lösung des Problems ja schon sehr schön in Textform beschrieben. Gieße das in Code und du bist fertig. Wenn es an einer Stelle klemmt, frag konkret nach, z.B. wie man eine Datei zu diesem Zweck am besten einliest (mit file()) oder so.

    Kommentar


    • #3
      Hmm, fopen() und fclose() sind dir bekannt?

      Dann benötigtst du sicher noch fgets(), um Dateien zeilenweise einzulesen.

      Und preg_match() hilft dir dabei jede Zeile in ihre Bestandteile zu zerlegen:

      PHP-Code:
      ...

      // erste Zeile einlesen
      if (!$line fgets($file_handle)) {
        die(
      'Lesen gescheitert!');
      }
      //##ID:08.12.23.20.16.15
      $pcre '/\A##ID:[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}\s*\z/';
      if (!
      preg_match($pcre$line$hits)) {
        die(
      'Zeile hat falsches Format!');
      }
      // $hits enthält jetzt:
      // $hits[1]: jahr (zweistellig)
      // $hits[2]: monat
      // $hits[3]: tag
      // $hits[4]--[6]: deine id
      ... 
      Wichtig: Wenn du diese Zahlen-Strings in richtige (Integer-)Zahlen umwandeln willst, musst du intval($hits[x], 10) benutzen, weil sonst bei führenden Nullen PHP das als Oktalzahl interpretiert.
      PHP-Code:
      ...
      // weitere Zeilen einlesen
      //##SP1:strolch;-7
      $pcre '/\A##SP([0-9]+):([a-z]+);([+-]?[0-9]+)\s*\z/';

      while (
      $line fgets($file_handle)) {
        if (!
      preg_match($pcre$line$hits)) {
          break; 
      // Fehler
        
      }
        
      // $hits enthält jetzt:
        // $hits[1] spieler_id (numerisch)
        // $hits[2] spieler_id (name)
        // $hits[3] punkte
        // var_dump($hits);

      }
      ... 
      Das Einfügen in eine Datenbanktabelle überlasse ich dir als Übungsaufgabe ;-) -- weil ich aus deinen Erklärungen nicht wirklich schlau werde.
      Klingon function calls do not have “parameters”‒they have “arguments”‒and they always win them!

      Kommentar


      • #4
        Hallo,

        ich bin jetzt schon etwas weiter und es werden auch Variablen angezeigt,
        die ich dann weiterverarbeiten kann.

        Hier mal das was ich jetzt habe:

        PHP-Code:
        $datei fopen("text.txt""r");
           
          
        $pattern '(\d\d)';
          
        preg_match_all($patternfile_get_contents('text.txt'),$matches,PREG_SET_ORDER);

          
        $jahr;
          
        $monat;
          
        $tag;
          
        $serie;
          
        $spieler1;
          
        $ergebnis1;
          
        $spieler2;
          
        $ergebnis2;
          
        $spieler3;
          
        $ergebnis3;
          
        $spieler4;
          
        $ergebnis4;

          for(
        $i 0$i <= 0$i++)
          {
              
        $jahr .= $matches[$i][0];
          }
          
          for(
        $i 1$i <= 1$i++)
          {
              
        $monat .= $matches[$i][0];
          }
          
          for(
        $i 2$i <= 2$i++)
          {
              
        $tag .= $matches[$i][0];
          }

          for(
        $i 3$i <= 5$i++)
          {
              
        $serie .= $matches[$i][0];
          }
          
          echo 
        $jahr;
          echo 
        "<br>";
          echo 
        $monat;
          echo 
        "<br>";
          echo 
        $tag;
          echo 
        "<br>";
          echo 
        $serie;
          echo 
        "<br>";
          echo 
        $spieler1;
          echo 
        "<br>";
          echo 
        $ergebnis1;
          echo 
        "<br>";
          echo 
        $spieler2;
          echo 
        "<br>";
          echo 
        $ergebnis2;
          echo 
        "<br>";
          echo 
        $spieler3;
          echo 
        "<br>";
          echo 
        $ergebnis3;
          echo 
        "<br>";
          echo 
        $spieler4;
          echo 
        "<br>";
          echo 
        $ergebnis4;
          
          
        fclose($datei); 
        Jetzt komme ich aber nicht weiter, wie ich die anderen Zeilen,
        auch Variablen zuordnen kann.

        Wie kann man das denn schaffen, das die anderen Zeilen auch Variablen zugeteilt werden?


        LG Sven

        Kommentar


        • #5
          Hallo,

          ich bin jetzt wieder ein stück weiter gekommen:

          PHP-Code:
          $datei fopen("text.txt""r");
             
          $pattern '(\d\d)';
          preg_match_all($patternfile_get_contents('text.txt'),$matches,PREG_SET_ORDER);

          for(
          $i 0$i <= 0$i++)
            {
                
          $jahr .= $matches[$i][0];
            }
            
          for(
          $i 1$i <= 1$i++)
            {
                
          $monat .= $matches[$i][0];
            }
            
          for(
          $i 2$i <= 2$i++)
            {
                
          $tag .= $matches[$i][0];
            }

          for(
          $i 3$i <= 5$i++)
            {
                
          $serie .= $matches[$i][0];
            }
            
          $array explode("\n",file_get_contents('text.txt'));
          $sp1_array explode(":",$array[2]);
          $sp1_player_data explode(";",$sp1_array[1]);

          $spieler1 $sp1_player_data[0];
          $ergebnis1 $sp1_player_data[1];

            echo 
          $jahr;
            echo 
          "<br>";
            echo 
          $monat;
            echo 
          "<br>";
            echo 
          $tag;
            echo 
          "<br>";
            echo 
          $serie;
            echo 
          "<br>";
            echo 
          $spieler1;
            echo 
          "<br>";
            echo 
          $ergebnis1;
            echo 
          "<br>";
            echo 
          $spieler2;
            echo 
          "<br>";
            echo 
          $ergebnis2;
            echo 
          "<br>";
            echo 
          $spieler3;
            echo 
          "<br>";
            echo 
          $ergebnis3;
            echo 
          "<br>";
            echo 
          $spieler4;
            echo 
          "<br>";
            echo 
          $ergebnis4;
            echo 
          "<br>";
            
            
          fclose($datei); 
          Die Zeile ##SP1:strolch;-7 wird ausgelesen und die Variablen auch ausgegeben.

          Nur wie muss die Schleife aussehen, so das ich die anderen Zeilen auch auslesen kann
          und auch Variablen zuweisen kann?


          LG Sven

          Kommentar

          Lädt...
          X