johnny: csv auslesen

Hi!

Ich habs jetzt stundenlang versucht alleine hinzubekommen, aber ich schaffs nicht. Auch die Googlesuuche oder Forumssuche brachte mich nicht weiter.

Ich hab eine CSV-Textdatei. In jeder Zeile sind fünf Elemente (also eigentlich 5 Spalten). Nun möchte ich jede Zeile auslesen und von jeder Zeile wiederum jedes Element auslesen und ausgeben.

Die Textdatei als Array zu speichern ist ja mit file() kein Problem. Auch das Speichern einer einzelnen Zeile als Array ist mit fgetcsv() kein Problem. Doch wie gebe ich nun jedes Element einer Zeile einzeln aus und dies für alle Zeilen in der Textdatei?!

Ich schaffs mühelos entweder alle Zeilen der Textdatei auszulesen und auszugeben ODER jedes Element einer einzelnen Zeile auszulesen und auszugeben. Aber wie ich die beiden Dinge verknüpfen soll seh ich nicht.

Ich schätz mal nicht, dass noch jemand ausser ich hier unterwegs ist. Deshalb geh ich mal ins Bett und guck morgen wieder rein ob jemand mir weiterhelfen konnte ;).

Liebe Grüsse
johnny

  1. Hello Johnny,

    Ich schaffs mühelos entweder alle Zeilen der Textdatei auszulesen und auszugeben ODER jedes Element einer einzelnen Zeile auszulesen und auszugeben. Aber wie ich die beiden Dinge verknüpfen soll seh ich nicht.

    Wie Du auf ein Element eines zweidimensionalen Arrays zugreifen kannst, das weißt Du?

    $dateiname = 'deine/bunte/CSVDatei';
      $_file = array();  # leeres Array für die gesamte Datei vorbereiten
      $_row  = Array();  # leeres Array für einen Datensatz vorbereiten

    $fh = fopen($dateiname, 'rb');
      flock($fh);

    while ($_rec = fgetcsv($dateiname, 8192, ';', '"')  # solange Datensätze gelesen werden können
      {
          $_datei[] = $_rec();                            # hänge diese an das Array an
      }

    fclose($fh);

    # in $_datei sollte nun die gesamte Datei stehen.
      # die geben wir nun mit Hilfe der "Debugfunktion" print_r() aus.

    echo htmlspecialchars(print_r($_datei,1));

    echo htmlspecialchars($_datei[1][2]);   # gibt das dritte Element des zweiten Datensatzes aus

    Liebe Grüße aus Syburg bei Dortmund

    Tom vom Berg

    --
    Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Hello,

      $_datei[] = $_rec;                            # hänge diese an das Array an

      sorry, sollte keine Funktion werden.

      Liebe Grüße aus Syburg bei Dortmund

      Tom vom Berg

      --
      Nur selber lernen macht schlau
      http://bergpost.annerschbarrich.de
  2. echo $begrüßung;

    Ich habs jetzt stundenlang versucht alleine hinzubekommen, aber ich schaffs nicht. Auch die Googlesuuche oder Forumssuche brachte mich nicht weiter.

    Diese Aussage nützt niemandem etwas, da daraus nicht ersichtlich ist, wo bei dir die Verständnisprobleme liegen.

    Die Textdatei als Array zu speichern ist ja mit file() kein Problem. Auch das Speichern einer einzelnen Zeile als Array ist mit fgetcsv() kein Problem. Doch wie gebe ich nun jedes Element einer Zeile einzeln aus und dies für alle Zeilen in der Textdatei?!

    Was am Beispiel im PHP-Handbuch zu fgetcsv() ist dir denn unversändlich?

    echo "$verabschiedung $name";

    1. Diese Aussage nützt niemandem etwas, da daraus nicht ersichtlich ist, wo bei dir die Verständnisprobleme liegen.

      Sorry, aber so ein Kommentar war echt nicht nötig. Anschliessend folgte ja die ausführliche Problembeschreibung in der man klar erkennt wo die Verständnisprobleme liegen.

      Was am Beispiel im PHP-Handbuch zu fgetcsv() ist dir denn unversändlich?

      Die filecsv() war nicht mein Problem. Nur, dass bei der While Schleife
      ``while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)[/code] automatisch immer zur nächsten Zeile (bis keine Zeile mehr folgt) gesprungen wird, wusste ich nicht.

      So konnte ich mein Problem durch einer kleinen Modifikation an dem von Dir angegebenen Beispiel lösen.

      Danke trotz dem Anschnauzen zu Beginn Deines Posts.

      johnny

      1. Hello,

        Die filecsv() war nicht mein Problem. Nur, dass bei der While Schleife
        ``while (($data = fgetcsv($handle, 1000, ",")) !== FALSE)[/code] automatisch immer zur nächsten Zeile (bis keine Zeile mehr folgt) gesprungen wird, wusste ich nicht.

        Da wird überhaupt nicht gesprungen, sondern Byte für Byte aus der Datei gelesen.
        Stell Dir eine Datei bitte als "Bindfaden" vor, auf dem die Daten untergebracht sind. Jedes "Zeilenende" ist dann z.B. ein Knoten in dem Faden. Und nun ziehst Du ihn langsam durch Deine Finger (lässt den Lesekopf über die Festplatte gleiten). Mit dieser Modellvorstellung sollte Dir eigentlich klar werden, dass die Leseposition automatisch auf dem Beginn der nächsten "Zeile" steht, wenn die vorherige vollständig (bis hinter das Zeilenende-Zeichen) gelesen wurde.

        Liebe Grüße aus Syburg bei Dortmund

        Tom vom Berg

        --
        Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
        1. Da wird überhaupt nicht gesprungen, sondern Byte für Byte aus der Datei gelesen.
          Stell Dir eine Datei bitte als "Bindfaden" vor, auf dem die Daten untergebracht sind. Jedes "Zeilenende" ist dann z.B. ein Knoten in dem Faden. Und nun ziehst Du ihn langsam durch Deine Finger (lässt den Lesekopf über die Festplatte gleiten). Mit dieser Modellvorstellung sollte Dir eigentlich klar werden, dass die Leseposition automatisch auf dem Beginn der nächsten "Zeile" steht, wenn die vorherige vollständig (bis hinter das Zeilenende-Zeichen) gelesen wurde.

          Cool. Tolle bildliche Beschreibung. So kann ich mir das gut merken. Dankeschön Tom!

          Liebe Grüsse nach Dortmund ;)
          johnny