Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Textabschnitt aus Textdokument auslesen

Einklappen

Neue Werbung 2019

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

  • [Erledigt] Textabschnitt aus Textdokument auslesen

    Hallo zusammen,

    ich suche nach einem Weg, aus einer Textdatei einen speziellen <p></p> Textabsatz auszulesen. Die Textdatei wird ca. stündlich aktualisiert runtergeladen und kann durchaus vom Inhalt (Anzahl Zeilen, etc.) variieren. Das Dateiformat kann ich quasi beliebig wählen. Zur Zeit verwende ich .txt

    Bisher lese ich die Datei folgendermaßen ein:

    Vom Server auf meinen kopieren:

    PHP-Code:
    <?php
    $ftp_server 
    "ftp..."
    $conn_id ftp_connect ($ftp_server)
        or die(
    "Couldn't connect to $ftp_server"); 
    $ftp_user_name "name";
    $ftp_user_pass "pass";

    // Variablen Heute Aktualisierung 5.05 Uhr
    $local_file1 'texte/text.txt';
    $server_file1 'filename;

    // Verbindung aufbauen        
    $conn_id = ftp_connect($ftp_server);

    // Login mit Benutzername und Passwort
    $login_result = ftp_login($conn_id, $ftp_user_name, $ftp_user_pass);

        
    if (ftp_get($conn_id, $local_file1, $server_file1, FTP_BINARY)) {


    // Versuche $server_file herunterzuladen und in $local_file zu speichern
        echo "$local_file1 wurde erfolgreich geschrieben\n<br>";
    }  


    else {
        echo "Ein Fehler ist aufgetreten\n";
    }

    echo $server_file1;

    // Verbindung schließen
    ftp_close($conn_id);

    ?>

    <?php
    $datei = "texte/text.txt";
    $zeilen = file($datei);
    unset($zeilen[0]) ; // die erste löschen
    unset($zeilen[1]) ; // die zweite löschen


    file_put_contents($datei,$zeilen);

    ?>
    Ich lösche also immer die ersten zwei Zeilen, was mir bislang das gewünschte Ergebnis bringt und gebe dann in PHP aus:

    PHP-Code:
    <?php

    $row 
    1;
    $handle fopen ("texte/text.txt","r");

    while ( (
    $data fgetcsv ($handle1000"|")) !== FALSE ) {
        
    $num count ($data);
        for (
    $c=0$c $num$c++) {
            
    $data[$c] = utf8_encode($data[$c]);
            print 
    $data[$c] . "<br>\n";
        }
    }

    fclose ($handle);

    ?>

    Jetzt habe ich aber eine Datei, die mal zwei und mal drei Zeilen hat, welche ich nicht gebrauchen kann. Daher würde ich gerne gezielt einen von insgesamt drei Textabschnitten auslesen bzw. vielleicht schon beim ersten Schritt nur das benötigte kopieren.

    Welches Vorgehen macht aus eurer Sicht mehr Sinn?

    Nach welcher Funktion muss ich da suchen?

    Gibt es vielleicht Skripte, die ähnliches machen?

    Danke für eure Tipps

  • #2
    So, ich konnte mir jetzt schonmal selbst etwas weiterhelfen, indem ich folgendes probiert habe:

    PHP-Code:
    <?php
     $content_all
    =join(""file("texte/test.txt"));
     
    $start=strpos($content_all"<p>") ;
     
    $end=strrpos($content_all"</p>") ;
     
    $content=substr($content_all$start$end-$start);
     echo 
    $content;
     exit;
    ?>
    Ausgegeben bekomme ich so natürlich alle <p>

    Gibt es einen Weg, z.b. nur die ersten beiden ausgeben zu lassen?

    Kommentar


    • #3
      Sinnvoller wäre sicher DOMDocument & Co., aber alternativ müsste es auch per RegEx gehen:
      PHP-Code:
      // Variante 1
      preg_match_all'/(?<=\<p\>)[^\<]/is'file_get_contents('texte/test.txt'), $matchResult );

      // Variante 2
      $matchResult preg_grep'/(?<=\<p\>)[^\<]/i'file('texte/test.txt') ); 
      ...allerdings ungetestet!

      In beiden Varianten solltest Du ein Array mit den gefundenen Elementen bekommen.

      Kommentar


      • #4
        Irgendwie stehe ich grad völlig aufm Schlauch.

        Habe die Variante 1 probiert und bekomme folgendes Array

        Array ( [0] => Array ( [0] => [1] => [2] => L [3] => C ) )

        Das passt schonmal, weil ich insges. 4 <p> Abschnitte habe. Allerdings sind die ersten beiden komplett leer, 2 und 3 beinhalten je nur einen Buchstaben...

        Liegt's an mir?

        Kommentar


        • #5
          Ja, sorry... hab ja gesagt ungetestet...
          Probier das mal:
          PHP-Code:
          preg_match_all'/(?<=\<p\>)[^\<]+/is'file_get_contents('texte/test.txt'), $matchResult ); 

          Beitrag editiert:
          Funktionert übrigens nur zuverlässig, wenn Du keine weiteren HTML-Tags innerhalb der P-Tags hast!

          Kommentar


          • #6
            supergut!!! danke dir...

            Kommentar


            • #7
              Darf ich doch nochmal was fragen... :-[

              Wie kann ich denn einzelne Absätze auslesen, wenn diese nicht durch <p></p> gekennzeichnet, sondern nur durch Zeilenumbrüche getrennt sind...ist das überhaupt möglich?

              Kommentar


              • #8
                Vermutlich nicht so wie Du es gerne hättest. Du kannst auf die gleiche Weise auch zwischen zwei Zeilenumbrüchen filtern, aber dann darf darin auch kein weiterer Zeilenumbruch vorhanden sein.

                Kommentar


                • #9
                  Die Absätze sind durch doppelte Zeilenumbrüche getrennt und innerhalb der Absätze sind mehrere einfache Umbrüche.

                  Wäre es vielleicht möglich, beim Runterladen der Datei die doppelten Zeilenumbrüche durch <br> zu ersetzen?

                  Kommentar


                  • #10
                    Könntest Du mal versuchen.
                    Oder Du probierst einfach mal ob's damit klappt, kanns grad nicht testen:
                    PHP-Code:
                    preg_match_all'/(?<=\n\n).+(?=\n\n)/is'file_get_contents('texte/test.txt'), $matchResult ); 
                    ...vorrausgesetzt, die Zeilenumbrüche sind jeweils zwei \n ?!

                    Kommentar


                    • #11
                      Ich habe es jetzt anders gelöst.

                      Die Absätze fangen jeweils mit einem "Am (Wochentag)" bzw. mit "Von (Wochentag)" an. Habe diese jetzt einfach mit "<br><br>Am (Wochentag)" und alle Zeilenumbrüche durch eine Leerstelle ersetzt. So habe ich den gewünschten Effekt.

                      Ist zwar nicht die eleganteste Lösung, aber es funktioniert. Habe mich quasi an deinem Spruch orientiert und es mit Phantasie versucht...

                      Werde deinen Vorschlag aber auch mal testen. Danke dir sehr für deine Hilfe.

                      Kommentar

                      Lädt...
                      X