xpfreund: Inhalte einer Textdatei auslesen und nutzen

Hallo,

Ich möchte eine Textdatei einlesen. Wie? Steht ja hier: http://de.selfhtml.org/navigation/faq.htm#daten_einbinden
Die Datei *.txt hat folgendes Format:
09.06.0320:57RECV00000052faxCAPI          fax            60252                    00493575660247           267  1   0:18 0:18                                                             fax00011

Steht alles in einer Zeile, Abstände bleiben. Jetzt die Frage: Was muss ich tun, damit das Datum 09.06.03 , die Uhrzeit und die ganzen anderen Teile in Strings gespeichert werden, damit ich diese individuell als Liste auf dem Bildschirm ausgeben kann?

gruß aus Hosena

  1. Hallo xpfreund,

    Ich möchte eine Textdatei einlesen. Wie? Steht ja hier: http://de.selfhtml.org/navigation/faq.htm#daten_einbinden

    Werde dir erst mal darüber klar, was du willst.
    Du hast als Thema PHP gewählt und verlinkst nun auf eine Seite, die das mit JavaScript umsetzen will.

    Steht alles in einer Zeile, Abstände bleiben. Jetzt die Frage: Was muss ich tun, damit das Datum 09.06.03 , die Uhrzeit und die ganzen anderen Teile in Strings gespeichert werden, damit ich diese individuell als Liste auf dem Bildschirm ausgeben kann?

    Funktionen, die du für dein Vorhaben benötigen wirst:

    JavaScript: split, substr, indexOf/search
    PHP: fopen/file, explode, substr, strpos oder gleich mit preg_match...

    Gruß,
    Dodwin

    --
    Dodwin
    1. Hallo,

      Ich möchte eine Textdatei einlesen. Wie? Steht ja hier: http://de.selfhtml.org/navigation/faq.htm#daten_einbinden

      Werde dir erst mal darüber klar, was du willst.
      Du hast als Thema PHP gewählt und verlinkst nun auf eine Seite, die das mit JavaScript umsetzen will.

      Hab ich gesagt, dass ich ausgerechnet Javascript dafür nehmen will, dort gibt es schließlich noch mehr Möglichkeiten.

      Steht alles in einer Zeile, Abstände bleiben. Jetzt die Frage: Was muss ich tun, damit das Datum 09.06.03 , die Uhrzeit und die ganzen anderen Teile in Strings gespeichert werden, damit ich diese individuell als Liste auf dem Bildschirm ausgeben kann?

      Funktionen, die du für dein Vorhaben benötigen wirst:

      JavaScript: split, substr, indexOf/search
      PHP: fopen/file, explode, substr, strpos oder gleich mit preg_match...

      gruß aus Hosena

      1. Hallo xpfreund,

        Hab ich gesagt, dass ich ausgerechnet Javascript dafür nehmen will, dort gibt es schließlich noch mehr Möglichkeiten.

        Oh, richtig. Im vorletzen Absatz steht auch was von PHP.
        Wobei du die Dinge, die in dem Text stehen, wie require oder include nicht brauchen wirst.

        Am Besten liest du es dann mit file ein und gehst Zeile für Zeile durch. Am einfachsten wäre dies mit preg_match. Aber du kannst natürlich auch einfach per strpos die entsprechenden Leerzeichen suchen und das Datum so extrahieren.

        Gruß,
        Dodwin

        --
        Dodwin
        1. Hallo,

          Aber du kannst natürlich auch einfach per strpos die entsprechenden Leerzeichen suchen und das Datum so extrahieren.
          Gut, aber zwischen Datum und Uhrzeit ist ja kein Leerzeichen.

          gruß aus Hosena

          1. Hallo xpfreund,

            Gut, aber zwischen Datum und Uhrzeit ist ja kein Leerzeichen.

            Aber du weißt doch die Länge des Datums und der Uhrzeit.
            Es ist immer 8 Zeichen lang.
            Also strpos($foo,0,8) wäre dann dein Datum und strpos($foo,8,5) die Uhrzeit.

            Gruß,
            Dodwin

            --
            Dodwin
    2. Hallo,

      Wenn ich das so mache: <?php $lines = file('faxview.txt');
      foreach ($lines as $neu ) {
      $date = substr($neu, 0, 8);
      echo $date;
      }
      ?> wird zwar das Datum jeder Zeile ausgegeben, allerdings hintereinander weg, ohne Leerzeichen und auf einer Zeile. Wie mach ich das jetzt, dass jedes Datum in einer neuen Zeile angezeigt wird?

      gruß aus Hosena

      1. Wie mach ich das jetzt, dass jedes Datum in einer neuen Zeile angezeigt wird?

        Füge einen Zeilenumbruch ein.

        Siechfred

        --
        Ein Selbständiger ist jemand, der bereit ist, 16 Stunden am Tag zu arbeiten, nur um nicht 8 Stunden für einen Anderen arbeiten zu müssen.
      2. echo $begrüßung;

        Wenn ich das so mache:
        echo $date;
        ?> wird zwar das Datum jeder Zeile ausgegeben, allerdings hintereinander weg, ohne Leerzeichen und auf einer Zeile. Wie mach ich das jetzt, dass jedes Datum in einer neuen Zeile angezeigt wird?

        Indem du eine Ausgabe hinzufügst, die eine neue Zeile erzeugt. Das hängt von der verwendeten Umgebung ab. In Text-Dateien wird ein Zeilenumbruchszeichen verwendet (oder auch mehrere, je nach System). HTML kennt dafür das br-Element.

        echo "$verabschiedung $name";

        1. Hallo,

          Der echo $date - Befehl wurde nur einmal ausgeführt und eigenartigerweise jede Zeile des Arrays abgearbeitet (also immer Zeichen 0-8) und hintereinander ausgegeben. Die Textdatei enthält immer eine neue Zeile pro Datum.

          gruß aus Hosena

          1. Hallo xpfreund,

            Der echo $date - Befehl wurde nur einmal ausgeführt und eigenartigerweise jede Zeile des Arrays abgearbeitet (also immer Zeichen 0-8) und hintereinander ausgegeben. Die Textdatei enthält immer eine neue Zeile pro Datum.

            Falsch. "echo $date" steht in einer Schleife und wurde daher bei jedem Schleifendurchlauf ausgeführt.
            Wenn du auch noch einen Zeilenumbruch willst schreibe:

            foreach ($lines as $neu) {
            $date = substr($neu, 0, 8);
            echo $date.'<br>';
            }

            Gruß,
            Dodwin

            --
            Dodwin
            1. Hallo,

              Falsch. "echo $date" steht in einer Schleife und wurde daher bei jedem Schleifendurchlauf ausgeführt.

              Woraus liest du, dass das in einer Schleife steht? Schleifen sind doch normalerweise mit for oder while begonnen. Ich habe einfach den obigen Text in einer neuen Datei gespeichert und ausgeführt, da kam das genannte Problem.

              Wenn du auch noch einen Zeilenumbruch willst schreibe:

              foreach ($lines as $neu) {
              $date = substr($neu, 0, 8);
              echo $date.'<br>';
              }

              gruß aus Hosena

              1. Hallo xpfreund,

                Woraus liest du, dass das in einer Schleife steht? Schleifen sind doch normalerweise mit for oder while begonnen.

                foreach ($lines as $neu) {

                ^^^

                for?

                Gruß,
                Dodwin

                --
                Dodwin
            2. Hallo,

              Ok, liegt an foreach. Aber wie bekomme ich jetzt die anderen Teile auf die gleiche Zeile? br beendet ja die Zeile.

              gruß aus Hosena

              1. Hallo xpfreund,

                Ok, liegt an foreach.

                Okay. Hab ich das Posting umsonst losgeschickt...

                Aber wie bekomme ich jetzt die anderen Teile auf die gleiche Zeile? br beendet ja die Zeile.

                echo $date.' ';

                Gruß,
                Dodwin

                --
                Dodwin
                1. Hallo,

                  Zu dem Zeitpunkt war noch nicht aktualisiert, macht er ja nur alle 2 Minuten den meta refresh des Forums.

                  gruß aus Hosena

                  1. Hallo xpfreund,

                    Zu dem Zeitpunkt war noch nicht aktualisiert, macht er ja nur alle 2 Minuten den meta refresh des Forums.

                    1. Es gibt keinen Meta-Refresh im Forum, wenn es nicht über die Benutzereinstellungen gewünscht ist
                    2. Du kannst nicht wissen ob die Seite zu dem Zeitpunkt in meinem Browser noch nicht aktualisiert war. Sie war es, ich habe das Posting schlicht und einfach übersehen.
                    3. Ich kann auch ohne ein(en?) Meta-Refresh die Seite neuladen

                    *SCNR*

                    Gruß,
                    Dodwin

                    --
                    Dodwin
                    1. Hallo,

                      1. Es gibt keinen Meta-Refresh im Forum, wenn es nicht über die Benutzereinstellungen gewünscht ist

                      hab ich ja alle min eingestellt

                      1. Du kannst nicht wissen ob die Seite zu dem Zeitpunkt in meinem Browser noch nicht aktualisiert war. Sie war es, ich habe das Posting schlicht und einfach übersehen.

                      das stimmt

                      1. Ich kann auch ohne ein(en?) Meta-Refresh die Seite neuladen

                      dann musst du aber selbst auf aktualisieren klicken

                      gruß aus Hosena

              2. Hallo Hugo,

                Ok, liegt an foreach. Aber wie bekomme ich jetzt die anderen Teile auf die gleiche Zeile? br beendet ja die Zeile.

                es sieht so aus, als lägen Dir in Deiner Ausgangsdatei tabellarische Daten vor (Fritzfax-Protokoll oder so was ähnliches?). Tabellarische Daten gibst Du am allerbesten in einer Tabelle aus.

                Prinzipielle Vorgehensweise:

                Eingabe:      Lese Textdatei in ein Array ein
                Verarbeitung: Erzeuge aus jeder Zeile des Arrays ein Array mit den
                              diversen Dich interessierenden Informationen
                Ausgabe:      Gib das neue Array in einer HTML-Tabelle aus.
                              Jede Zeile der Ausgangsdatei entspricht einem <tr>-Element
                              Jeder Eintrag in einer Zeile einem <td>-Element

                Wenn Speicher ein Problem sein sollte, dann verarbeite die Daten zeilenweise,
                d.h. lies jeweils eine Zeile ein, verarbeite diese Zeile, gebe sie aus.

                Freundliche Grüße

                Vinzenz

                1. Hallo,

                  es sieht so aus, als lägen Dir in Deiner Ausgangsdatei tabellarische Daten vor (Fritzfax-Protokoll oder so was ähnliches?). Tabellarische Daten gibst Du am allerbesten in einer Tabelle aus.

                  zumindest ist es ein Faxprotokoll

                  Prinzipielle Vorgehensweise:

                  Eingabe:      Lese Textdatei in ein Array ein

                  klar, über file()

                  Verarbeitung: Erzeuge aus jeder Zeile des Arrays ein Array mit den
                                diversen Dich interessierenden Informationen

                  Wie mach ich jetzt aus dem gesamten Array ein einzelnes pro Zeile.
                  <?php $lines = file('faxview.txt');
                  foreach ($lines as $neu ) {
                  $date = substr($neu, 0, 8);
                  $time = substr($neu, 8, 5);
                  $send = substr($neu, 13, 4);
                  $id = substr($neu, 17, 8);
                  $driver = substr($neu, 25, 7);
                  $user = substr($neu, 42, 15);
                  echo $date.' ';
                  echo $time.' ';
                  echo $send.' ';
                  echo $id.' ';
                  echo $driver.' ';
                  echo $user.'<br>'
                  }
                  ?>
                  Mit der Methode geht es zwar, es scheint mir nur nicht gerade die beste Lösung zu sein.

                  Ausgabe:      Gib das neue Array in einer HTML-Tabelle aus.
                                Jede Zeile der Ausgangsdatei entspricht einem <tr>-Element
                                Jeder Eintrag in einer Zeile einem <td>-Element

                  mit Tabellen habe ich mich noch nicht großartig beschäftigt.

                  gruß aus Hosena

                  1. Hallo xpfreund,

                    Wie mach ich jetzt aus dem gesamten Array ein einzelnes pro Zeile.

                    Du hast scheinbar noch nicht wirklich Ahnung von Arrays.
                    Am Besten liest du dir dazu mal ein paar Informationen durch (siehe php.net, o.Ä. Google hilft...)

                    Aber ich verstehe gar nicht, warum da nochmal ein Array erzeugt werden soll, das verbraucht doch nur Speicher+Zeit.
                    Ich würde es (wenn es später nicht mehr geordnetet werden soll) einfach ausgeben:

                    <table...>

                      
                    <?php $lines = file('faxview.txt');  
                    foreach ($lines as $neu ) {  
                      $date = substr($neu, 0, 8);  
                      $time = substr($neu, 8, 5);  
                      $send = substr($neu, 13, 4);  
                      $id = substr($neu, 17, 8);  
                      $driver = substr($neu, 25, 7);  
                      $user = substr($neu, 42, 15);  
                      echo '<tr><td>'.$date.'</td><td>'.$time.'</td><td>'.$send.'</td><td>'.$id.'</td><td>'.$driver.'</td><td>'.$user.'</td></tr>';  
                    }  
                    ?>
                    

                    </table>

                    Gruß,
                    Dodwin

                    --
                    Dodwin
  2. gudn tach!

    Die Datei *.txt hat folgendes Format:
    09.06.0320:57RECV00000052faxCAPI          fax            60252                    00493575660247           267  1   0:18 0:18                                                             fax00011

    Steht alles in einer Zeile, Abstände bleiben.

    du hast also eine textdatei mit genau einer zeile, die von zeit zu zeit aktualisiert wird? heisst "abstaende bleiben", dass die anzahl der leerzeichen dazwischen ueber die zeit konstant ist oder dass die anfaenge der jeweiligen daten immer gleich bleibt.

    also wird eine naechste zeile eher so aussehen

    09.06.0320:58panzer          panzer            123 [...] (gleiche relative abstaende wie oben)

    oder eher so

    09.06.0320:58panzer                       panzer         123  [...] (gleiche absolute positionen)

    ?

    im ersten fall waere interessant, ob die jeweiligen daten leerzeichen enthalten duerfen. falls nicht koenntest du einfach die zeile mit / +/ splitten.

    im zweiten fall koenntest du die datei mit file() einlesen und mit substr() die jeweiligen daten rausholen.

    prost
    seth

    1. Hallo,

      Die Datei *.txt hat folgendes Format:
      09.06.0320:57RECV00000052faxCAPI          fax            60252                    00493575660247           267  1   0:18 0:18                                                             fax00011

      Steht alles in einer Zeile, Abstände bleiben.

      du hast also eine textdatei mit genau einer zeile, die von zeit zu zeit aktualisiert wird? heisst "abstaende bleiben", dass die anzahl der leerzeichen dazwischen ueber die zeit konstant ist oder dass die anfaenge der jeweiligen daten immer gleich bleibt.

      also wird eine naechste zeile eher so aussehen

      09.06.0320:58panzer          panzer            123 [...] (gleiche relative abstaende wie oben)

      oder eher so

      09.06.0320:58panzer                       panzer         123  [...] (gleiche absolute positionen)

      Nein, die nächste Zeile sieht genauso mit den festen Abständen aus, nur das dann Datum und Zeit beispielsweise anders sind. Die Zeilen werden nicht aktualisiert, sondern es wird eine neue Zeile von einem externen Programm des Servers eingefügt.

      im ersten fall waere interessant, ob die jeweiligen daten leerzeichen enthalten duerfen. falls nicht koenntest du einfach die zeile mit / +/ splitten.

      im zweiten fall koenntest du die datei mit file() einlesen und mit substr() die jeweiligen daten rausholen.

      Gilt nicht substr nur für Strings?

      gruß aus Hosena

      1. Hallo xpfreund,

        im zweiten fall koenntest du die datei mit file() einlesen und mit substr() die jeweiligen daten rausholen.
        Gilt nicht substr nur für Strings?

        file() erzeugt ein Array.
        Das Array beinhaltet (in deinem Fall) die String mit den Zeilen.
        Auf die einzelnen Array-Elemente kannst du die Funktion also anwenden.

        Gruß,
        Dodwin

        --
        Dodwin