# Datei zeilenweise in Array einlesen!



## abi22 (11. Oktober 2004)

Hallo!

Wer kann mir bitte helfen?

Eine .txt Datei mit beispielsweise folgendem Inhalt:

Abbe---->Günther---->Strasse---->Ort---->Land
Becker---->Boris----->Strasse---->Ort---->Land---->Telefon
Cullmann---->Carsten---->Strasse---->Ort---->Land----->Telefon---->Homepage----->Fax

Diese Datei möchte ich nun mit PHP zeilenweise einlesen.
Zudem möchte ich auch noch die Reihenfolge der Daten ändern. Z.B.:

Strasse---->Ort---->Land---->Günther---->Abbe etc.

Bei meinen Versuchen ergaben sich folgende Probleme:
Es wurde zeilenweise eingelesen, jedoch nur bis zu einem bestimmten Zeichen
und unvollständig. Die Ausgabe ist z.B. so:
Abbe---->Günther---->Strasse---->Ort---->Land
ris----->Strasse--->Ort---->Land---->Telefon---->Cullmann
Carsten---->Strasse..... Also ein durcheinander.


So sieht mein Programm aus:


*<?php*
*$fp = fopen('export-auftrag.txt', 'r');*
*while (!feof($fp))*
*{*
*$zeile = fgets($fp,100);*
*$daten = explode("\t", $zeile);*
*echo "$daten[0]\t$daten[1]\t$daten[2]\t$daten[3]\t$daten[4]\t$daten[5]\t*
*$daten[6]\t$daten[7]\t$daten[8]<br>;*
*}*
*fclose($fp);*
*?>*

*Wie kann man das bitte realisieren*
*Vielen Dank für Eure Hilfe!*


----------



## Nils Hitze (11. Oktober 2004)

mein Vorschlag ... benutze in Zukunft vernünftige CVS Trenner und achte auf konsistente Daten.
Das heißt : 

Name,Vorname,Strasse,Ort
Name,,Strasse,Ort
Name,Vorname,,

Wenn du eine neue Zeile beginnst, diese aber weniger Inhalt hat müssen dennoch die 
Trennzeichen vorhanden sein.

Zu deinem Problem :
Ich würde die Datei über [phpf]file[/phpf] einlesen, exploden, dann sortieren.

Gruß,
 Nils


----------



## Tobias Menzel (11. Oktober 2004)

Hi,

nur auf den ersten Blick, aber ich _vermute_ mal:

fgets($fp,100); <-- damit begrenzt Du die Zeilenlänge beim Einlesen auf 100 Bytes. Wenn Deine Zeile mehr Bytes enthält, wird sie notwendigerweise zerrissen.

Gruß

EDIT: hmm, wieder mal einen Tick zu spät.  Ansonsten: Wie Nils sagte - mit file() geht es sicher eleganter.


----------



## abi22 (11. Oktober 2004)

Das Problem ist nur, dass diese "Trenner" beim Export der Daten schon so eingefügt werden!
Also muss ich auch damit arbeiten. Und da diese Daten auch in eine Datenbank eingefügt werden sollen, und diese tabdelimitted arbeitet muss diese Form beibehalten werden.


----------



## abi22 (11. Oktober 2004)

Hab ne Frage könnte einer von euch mir mal eine Bsp.-Programm zeigen wie man das nach euren Vorstellungen lösen könnte.


----------



## Lukasz (12. Oktober 2004)

```
$datei=file("pafadzurdatei");
{
unset($inhalt,$eintrage);
for ($i=0;$i<count($datei)+1;$i++){ // Wir lesen die gesammte Datei in die Variable $inhalt
$inhalt .="$datei[$i]";
}
// Wir erzeugen einen array
$eintrage=explode('---->',$inhalt);
// so jetzt hast du die Einträge in einem array $eintrage[0] ist erster Eintrag
// $eintrage[1] der zweite usw.
}
// Du kannst auch alle ausgeben
// mittels count() kannst du zählen wieviel einträge eine Datei hat
for ($i=0;$i<count($eintrage);$i++){ //$i ist null so lange bis die anzahl im array erreicht ist
// im schrittakt +1 (++) bedeutet eine Variable wird um eins erhöht
echo "$eintrage[$i]<br>"; // da jetzt $i mal 0,1,2,3 bekommst du alle Einträge raus

}
```


PS
wegen Datei zeilenweise in Array einlesen!

```
$datei=file("pafadzurdatei");
```
$datei ist jetzt dann schon ein array mit den Zeilen!


----------

