Hello,
Ich hab ein tab-separated CSV und möchte nur bestimmte Zeilen auslesen.
Ich weiss welchen Wert ich auslesen möchte, aber leider steht dieser nicht immer in der gleichen Spalte, und zwar kann er in 20 verschiedenen Spalten vorkommen (Spalten 17 - 36). Ich kann nun bei jedem Zeilen-Durchlauf aus-ifen, ob der Wert irgendwo drinnen steht, bloss ist das etwas umständlich.
Wie groß ist denn die Datei, um die es geht? Bis ca. 140.000kByte Dateigröße kann man die Datei gut in ein assoziatives Array einlesen und in ein indiziertes sogar bis zu 200.000kByte. Das kann man dann zielgenau abfragen, wo die Treffer liegen. Dafür gibt es spezielle CSV-Funktionen in PHP.
Die Begrenzungen entstehen durch die meistens eingestellte Speicherbegrenzung auf 8 oder 10 MByte pro Script. Ein Array "bläst" sich gegenüber einer CSV-Datei ungefähr auf den fünf bis 7-fachen Speicherbedarf auf.
Alternativ kann man eine CSV-Datei natürlich auf die klassische Art abarbeiten, also Zeile für Zeile, was dannn aber je nach Speicher- und Cachemodell erheblich in die Verarbeitungszeit gehen kann.
Umständlich ist das ganze bestimmt nicht, wenn man sich die Arrayfunktionen nochmals genau anschaut:
http://de.php.net/manual/de/function.fgetcsv.php
Wensentlich dabei ist nur, dass die CSV-Datei "sauber" sein muss, d.h. dass es eben keinen Zeilenendezeichen innerhalb der Datensätze geben darf, bzw. bei der Verwendung von "enclosure" eben keine Kombination "delimiter""enclosure""delimiter" innerhalb eines Satzes.
Zu den Standardbegriffen:
PHP Standard
"delimiter" --> seperator
"enclosure" --> delimiter
In SQL-Datenbanken gibt es oft die Möglichkeit des Exports oder des Imports von "SDF"-Dateien (Standard Data Format). Da spricht man dann manchmal von
seperated by ... delimited with ...
Bei MySQL heißt es aber dann z.B.
fields terminated by ',' enclosed by '"'
lines terminated by '\r\n'
Der automatische Import mit
LOAD DATA INFILE <dateiname>
INTO <tabellenname>
FIELDS TERMINATED BY "\t" ENCLOSED BY '"'
funktioniert aber nur, wenn die Datenformate aufeinander abgestimmt sind. Wenn z.B. bei Zahlenwerten das Komma als Dezimalzeichen benutzt wird, oder Daten in einem ungewöhnlichen Format gechrieben werden, hast Du schon ein Problem.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau