Textdatei auslesen und mittels explode trennen

Buckaroo

Grünschnabel
Hallo,
ich habe folgendes Problem:

Ein Wawi-System exportiert mir eine Menge Artikeldaten in einer Textdatei. Getrennt sind die einzelnen Datensatzteile durch eine definierte Zeichenkombination (*#|).
Bsp:

MT-05807C4*#|IBM Scrollpoint Mouse USB
USB und PS/2 - Hst-Nr: 31P8700
Sprache: ML
System: MPF*#|*#|*#|61,00*#|59,00*#|57,00*#|57,00*#|55,00*#|51,00*#|51,00*#|49,00*#|49,00*#|47,00*#|*#|*#|Ja*#|IBM*#|Computer/Server*#|Desktop/Tower - Zubeh”r*#|Tastaturen und M„use*#|-*#|*#|*#|MPF*#|*#|ML*#|12*#|*#|(Leer)*+|&

Die einzelnen Teile dieses Datensatzes sollen nun ausgelesen und in bestimmte Variablen geschrieben werden.
Zeile für Zeile lese ich nun die Daten aus und trenne bestimmte Teile mit explode(). Das Hauptproblem liegt darin, daß manche Datensätze z.B. eine Zeile mehr besitzen, was den Logarythmus (schreibt man das so?) ziemlich durcheinander bringt.
Gibt es eine andere Möglichkeit diese Daten auszulesen, ohne mit fgets Zeile für Zeile das Script durchzuforsten ?
Falls ich mich etwas unklar ausgedrückt habe, fragt ruhig.
Im vorraus schon mal vielen Dank für eure Mühe.

Gruß,
Buckaroo
 
Am besten ist es, wenn du die ganze Datei per file ausliest, dann zu einer Variable implodest, uin der dann die Zeilenumbrüche übernommen werden:

PHP:
$datei = file("datei.txt");
$datei = implode("", $datei);
$datei = explode("#|", $datei);
 
Also in dem Dateidesign muss schon eine bestimmte Logik drin stecken.

Das Beispiel sieht für mich so ohne weitere Erläuterung ziemlich undurchdacht aus. Besonders, wenn unterschiedliche Datensätze wirklich unterschiedlich viele Zeilen umfassen können.

Spontan würde ich sagen, dass eventuell "*+|&" eine Art Ende-Kriterium darstellt. Aber ist natürlich schwer zu sagen ohne weitere Datensätze.

Keine Ahnung, ob ich dein Problem jetzt richtig verstanden habe. Eine andere Möglichkeit, als Dateien unmittelbar zeilenweise zu verarbeiten steht zwar in einem Post vor mir, dürfte aber dein Problem nicht lösen, sofern es um die unterschiedliche Größe von Datensätzen ohne feste Grenzkriterien geht.

Irgendetwas muss eben vorhanden sein, um eine Trennung vorzunehmen und zwar nicht nur als Delimiter zwischen den Datenfeldern, was bei dir das "*#|" ist, sondern eben auch zwischen Datensätzen; im Normalfall eben der Zeilenumbruch oder auch eine festgelegte Anzahl von Datenfeldern.

Ich würde mich einfach mal mit dem Entwickler der Dateistruktur kurzschließen, sofern das möglich ist.

Achja: es heißt Algorithmus und hat mit Logarithmus oder Rhythmus nichts zu tun :-).

Fluke
 
@Nuinmundo: Vielen Dank, du bist ein Schatz :) Genauso wollte ichs haben. Super.
@Fluke: Die Trennungszeichen habe ich in der Wawi eingefügt("*+|&" für einen neuen Datensatz und "*#|" für die Feldtrennung). Jeder Datensatz hat die gleich Anzahl von Feldern, nur sind in manchen Feldern, Ingram sei Dank :(, Zeilenumbrüche enthalten, was das Zeilenweise auslesen natürlich problematisch machte. Aber Nuinmundo sei Dank klappts jetzt. Aber trotzdem danke für die Klärung der richtigen Bezeichnung und die Gedanken, die du für mein Problem verschwendet hast.

Gruß,
Buckaroo
 
Zurück