ron: textdatei periodisch auslesen

hallo allesamt,

naja fange gerade an mich mit datenbanken auseinander zu setzen.
trotz  rum-googeln hab ich das ganze noch nicht wirklich begriffen.

ich hab ein formular. die ergebnisse werden unter anderem mittels cgi und mysql in eine text-datei geschrieben.
Die Textdatei sieht so aus:

|"normal"|"normal"|""|""|""|""|""|""|""|"regelmäßig"|"regelmäßig"|"regelmäßig"|

und so weiter.....

d.h. wenn das Formular abgeschickt wird werden die Werte nacheinander durch | getrennt.
ich habe also immer gleich viele Felder pro Formular-auswertung.

Jetzt würde ich gerne die datei auslesen um bestimmte Werte zu vergleichen. Z.b immer die dritte Antwort.

Meine Frage ist nun. wie mache ich das am besten.
Mit PHP und CGI scheint es ja irgendwie zu gehen. Lese aber immer nur von zeilenweisen auslesen.

Ich bräuchte jedoch eher etwas das mir das benutze trennungszeichen ausliest, in meinem Fall | .dann könnte ich die trennungszeichen zählen lassen und somit z.b. jeweils das 20. Element auslesen, wenn mein Formular 20 felder besitzt.

Ist mein Denkansatz richtig, oder ist das zu umständlich.
Würde gern von jemand auf den richtigen Pfad gewiesen werden.

gruß ron

  1. Hi,

    Erstmal muss ich sagen, dass alles was ich sage, für Perl gilt, und nicht umbedingt für PHP.
    Wenn dich das Zeilenweise einlesen stört, könntest du auch einfach die variable $\ auf | setzen. Dannach könntet du einfach jeden xten Array Eintrag auslesen.
    Oder du könntest mit regulären ausdrücken und einer Schleife arbeiten.
    Oder du könntest Zeichenweise leses, und immer bei dem nten vorkommen von | etwas tuen usw.

    mfg Andres Freund

    --
    ss:) zu:) ls:} fo:) de:] va:) ch:| n4:& rl:° br:^ js:( ie:% fl:( mo:|
    1. Hi Andres,

      danke für die Antwort, ist doch mal ein Ansatz.
      Wobei ich mich auch frage lohnt sich das erlernen von Perl oder lieber in PHP.
      naja, beides können wäre ja am besten.
      komme aus der Design-ecke und tue mich doch
      schwer mit programmieren.

      gruß ron

  2. Hallo

    Jetzt würde ich gerne die datei auslesen um bestimmte Werte zu vergleichen. Z.b immer die dritte Antwort.

    Meine Frage ist nun. wie mache ich das am besten.
    Mit PHP und CGI scheint es ja irgendwie zu gehen. Lese aber immer nur von zeilenweisen auslesen.

    Ich bräuchte jedoch eher etwas das mir das benutze trennungszeichen ausliest, in meinem Fall | .dann könnte ich die trennungszeichen zählen lassen und somit z.b. jeweils das 20. Element auslesen, wenn mein Formular 20 felder besitzt.

    Ist mein Denkansatz richtig, oder ist das zu umständlich.
    Würde gern von jemand auf den richtigen Pfad gewiesen werden.

    Mittels PHP kannst du die Datei zeilenweise in ein Array einlesen (file())
    und dann in einer Schleife jede Zeile (Element des Arrays) mit explode()
    jeweils am "|" weiterzerlegen. Das Ergebnis ist widerum ein Array, dessen
    Elemente von 0 an durchnummeriert sind.

    Alternativ kannst du dich mal mit serialize() und unserialize() beschäftigen.
    Diese Funktionen schreiben/lesen die Daten so in/aus die/der Datei,
    daß die Beziehungen der Datensätze erhalten bleiben.

    Tschö, Auge

  3. Hi!

    Du musst das ganze zeilenweise einlesen, am besten mit file(), und danach jede Zeile bei | trennen und das x. Element in einen Array schreiben, also sowas:

    $gesuchte_spalte = 20;

    foreach (file("datei.txt") AS $line) {
        $tmp = explode("|",trim($line));
        $toller_arrray[]= tmp[$gesuchte_spalte - 1];
    }

    print_r($toller_arrray);

    Wenn Du bestimmte Funktionen nicht verstehst lese das am besten im Manual nach: http://php.net/funcref

    Grüße
    Andreas

  4. danke für alle antworten.
    damit lässt sich was anfangen.

    Nur zum Verständnis.
    Ist das gängige Methode das so zu machen?
    Ist das das, was man unter Datenbank versteht?

    Ist z.B. PHPmyAdmin auch in der Lage das zu machen
    oder dergleichen?

    danke ron

    1. Hallo ron,

      Ist das gängige Methode das so zu machen?

      nein, eher nicht.

      Ist das das, was man unter Datenbank versteht?

      mhh.. das ist eher eine Art Datei-Datenbank aber keine Datenbank im eigenlichen Sinne.

      Ist z.B. PHPmyAdmin auch in der Lage das zu machen

      PHPmyadmin ist ein Administrationstool zum administrieren (wer hätte es gedacht :-)) von einer mysql-Datenbank. Im Prinzip lautet die Antwort auf die Frage also 'ja' - mit mysql kann man sowas auch (und einfacher) machen. (die Frage ist natürlich, ob du überhaupt mysql zur Verfügung hast).

      Grüße aus Nürnberg
      Tobias

      --
      sh:( fo:) ch:? rl:( br:< n4:& ie:% mo:| va:) de:] zu:) fl:( ss:| ls:[ js:|
      (Selfcode -> http://emmanuel.dammerer.at/selfcode.html)
      1. Hallo Tobias,

        nett das du meine komischen fragen beantwortet hast.

        ja mysql hab ich zur verfügung.
        die text-datei wird damit ja generiert, heist es im cgi-script.
        hab ne datei .tpt datei in der ich alles aufschreib was gespeichert werden soll, und die text-datei die ausgegeben wird.

        Ist das dann Datenbank?
        ich glaub ich hab irgendwie den falschen einstieg erwischt.
        oder ich stell mir darunter immer was viel komplitzierteres vor als es ist.

        gruß ron

    2. Hi

      wenn Du schon "nur" mit einem Flat-File, also einer einfachen .txt Datei, arbeitets, dann würde _ich_ empfehlen, die ganze Sache als .csv Datei zu handeln. Das ist dann quasi eine Datenbank und Du kannst mit SQL-Befehlen auf diese "Datenbank" zugreifen. Das sollte Dir dann die ganzen Auswertungen sehr vereinfachen.
      Dazu benötigst Du dann nicht einmal MySQL.

      Unter Perl ziemlich einfach,
      Die entsprechenden Module vom CPAN laden (wobei, so glaube ich, die meisten schon in der Core-Installation von Perl dabei sind.

      Inwieweit PHP .csv Dateien unterstützt ist mir nicht bekannt. aber auf alle Fälle solltest Du mal unter "csv" googeln. "csv" steht für "Comma separated values" - wobei bei Dir eben "|" das Comma  darstellt.

      Bye
      Timothy

      --
      Zwei Dinge im Leben kannst du nicht zurück holen. Den Pfeil, den du verschossen. Und das Wort, das du gesprochen.
      (alte indianische Weisheit)
      1. Hi

        hier noch ein Link, der ein bißchen entwas über .csv-Dateien und Perl zeigt

        http://www.linux-magazin.de/Artikel/ausgabe/1999/05/DBflat/dbflat.html

        Bye
        Timothy

        --
        Zwei Dinge im Leben kannst du nicht zurück holen. Den Pfeil, den du verschossen. Und das Wort, das du gesprochen.
        (alte indianische Weisheit)
      2. hallo Timothy,

        aber auf alle Fälle solltest Du mal unter "csv" googeln. "csv" steht für "Comma separated values" - wobei bei Dir eben "|" das Comma  darstellt.
        Timothy

        sehr interessant. danach hatte ich eigentlich die ganzwe zeit gesucht.