Suchen und ersetzen in Textdatei

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

  • Suchen und ersetzen in Textdatei

    Hallo, ich bin realtiv unerfahren mit php, versuche aber grade eine Datenbank mit Basketballerstatistiken anzulegen. Klappt auch sehr gut, aber jetzt habe ich ein Problem. Um mir ein bischen Arbeit zu ersparen suche ich eine Möglichkeit in einer Textdatei bestimmte Elemente zu ersetzen.

    Der rohe Datensatz sieht so aus:

    Al Harrington, FC 36 4-12 0-3 5-6 3 5 8 2 2 1 3 4 13

    (Es wird hier nicht angezeigt, aber zwischen den Zahlen sind jeweils 8 leerzeichen)

    Der fertige Datensatz muss so aus sehen:

    Tim;Thomas;F;30;2;8;1;2;4;4;0;8;8;1;0;0;1;5;9;2006-11-01;;

    Das heisst ich muss diese 8 Leerzeichem mit ';' ersetzen
    dann ', (KOMMA LEER)' mit ';' ersetzen
    dann das übrige Leerzeichen nach dem Vornamen mit ';' ersetzen,
    und am Ende jeder Zeile dann das Datum in Form von ';2006-11-01;;' einfügen.

    Mein Ansatz:

    <?
    $Datei = '2007-01-30.txt';
    $handle = fopen ($Datei, "r+");

    $Datei = ereg_replace(" ",";",$Datei);
    $Datei = ereg_replace(", ",";",$Datei);
    $Datei = ereg_replace(" ",";",$Datei);

    readfile($Datei);

    fclose($handle);
    ?>

    Das funktionert überhauptnicht

    Und wie ich das mit dem Datum machen soll weiss ich auch nich ...
    Irgendwo fehlt doch da auch der Befehl ... speicher die Änderungen ...

    Kann mir jemand helfen?
    Zuletzt geändert von DDogg; 31.01.2007, 10:43.

  • #2
    Sorry für den doppelpost, aber jetzt hab ich schon selber was neues gefunden:

    <?php
    $Datei = '2007-01-30.txt';
    $fp=fopen($Datei,"r+");

    $var = array(',' => ';','-' => ';');

    $text = $Datei;

    $berichtigter_text = str_replace(array_keys($var), array_values($var),$text);
    echo $berichtigter_text;

    fclose($fp);
    ?>


    Wenn ich als $text manuell etwas eingebe, funktioniert es.

    Ich schaffe es nur nicht die TXT Datei in die variable $text zu verpacken, denn in dem obigen beispiel gibt er mir dann folgendes aus:

    2007;01;30.txt

    er ersetzt einfach die '-' im Dateinamen anstatt in der Datei ...

    Kann mir jemand helfen?

    Kommentar


    • #3
      Original geschrieben von DDogg
      er ersetzt einfach die '-' im Dateinamen anstatt in der Datei ...
      Natürlich, weil du mit $text = $Datei; ja auch nur den Dateinamen reinschreibst ...

      Schau dir im Manual bei den Dateisystem-Funktionen an, wie man Dateiinhalte einliest.
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Okay, danke, hab das mal umgesetzt:

        <?php
        $Datei = '2007-01-30.txt';
        $fp=fopen($Datei,"r+");

        $var = array(' ' => ';',', ' => ';','Abdur-Rahim' => 'AbdurRahim','-' => ';',' ' => ';','TOTALS;;FGM;A;;3PM;A;;FTM;A;;OREB;;DREB;;REB;;AST;;STL;;BLK;;TO;;PF;;PTS' => '','STARTERS;;MIN;;FGM;A;;3PM;A;;FTM;A;;OREB;;DREB;;REB;;AST;;STL;;BLK;;TO;;PF;;PTS' => '','BENCH;;MIN;;FGM;A;;3PM;A;;FTM;A;;OREB;;DREB;;REB;;AST;;STL;;BLK;;TO;;PF;;PTS' => '','DALLAS' => '');



        $file=implode("",file("$Datei"));

        $text = $file;

        $berichtigter_text = str_replace(array_keys($var), array_values($var),$text);

        $filename = '2007-01-30.txt';
        $somecontent = $berichtigter_text;

        if (is_writable($filename)) {

        if (!$handle = fopen($filename, "w")) {
        print "Kann die Datei $filename nicht öffnen";
        exit;
        }
        if (!fwrite($handle, $somecontent)) {
        print "Kann in die Datei $filename nicht schreiben";
        exit;
        }
        print "Fertig, in Datei $filename geschrieben<br><br>$somecontent<br>";



        fclose($handle);

        } else {
        print "Die Datei $filename ist nicht schreibbar";
        }
        ?>

        Funktioniert einwandfrei.

        Was ich aber immer noch nicht schaffe ist:

        Am Ende jeder Zeile etwas einfügen ohne etwas zu ersetzen

        Leere Zeilen komplett zu löschen, also aufzurücken

        Eine Zeile löschen in der ein ein Suchkriterium zutrifft, also alla sql delelte row where content LIKE %

        Kommentar


        • #5
          Original geschrieben von DDogg
          Was ich aber immer noch nicht schaffe ist:

          Am Ende jeder Zeile etwas einfügen ohne etwas zu ersetzen
          Wenn du auf Zeilenbasis arbeiten willst - wieso fügst du dann das, was file() dir liefert, wieder zusammen?

          Btw: $text = $file; - solche unsinnigen Umkopierereien spare dir bitte.
          Leere Zeilen komplett zu löschen, also aufzurücken

          Eine Zeile löschen in der ein ein Suchkriterium zutrifft, also alla sql delelte row where content LIKE %
          Wenn du mit einem Array aus Zeilen arbeitest, entsprechen beide Schritte dem Entfernen eines Elements aus dem Array.
          I don't believe in rebirth. Actually, I never did in my whole lives.

          Kommentar


          • #6
            Mein Kopf raucht grade ...

            Können Sie mir vieleicht ein etwas konkreteren Tipp geben wie ich an jedes Zeilenende zb ein <br> einfügen kann?

            Kommentar


            • #7
              Original geschrieben von DDogg
              Können Sie mir vieleicht ein etwas konkreteren Tipp geben wie ich an jedes Zeilenende zb ein <br> einfügen kann?
              Per Stringverkettung ...?
              I don't believe in rebirth. Actually, I never did in my whole lives.

              Kommentar


              • #8
                Am Ende jeder Zeile etwas einfügen ohne etwas zu ersetzen
                Zeilenweise einlesen und schreiben+'<br>'. ( fread )

                Leere Zeilen komplett zu löschen, also aufzurücken
                Eine Zeile löschen in der ein ein Suchkriterium zutrifft, also alla sql delelte row where content LIKE %
                Wenn du alles Zeilenweise machen würdest, wäre das alles gar kein Problem.

                Mit if und strpos z.B findest du heraus ob ein Suchkriterium zutrifft, und dann speicherst du die Zeile halt nicht.
                gruss Chris

                [color=blue]Derjenige, der sagt: "Es geht nicht", soll den nicht stoeren, der's gerade tut."[/color]

                Kommentar

                Lädt...
                X