Mailinglisten-Archive |
On Tue, 9 Aug 2005 14:46:59 +0200, Aron Schlesinger <aron at viplocations.de> wrote: >>> Allerdings macht es <http://de.php.net/fgetcsv> trivial. >> >> Gibt es einen eleganten (einfachen) Weg, das folgende zu loesen? >> >> Eine Zeile einer CSV-Datei sieht so aus: >> 9686;"ABC\";"DEF;";;;;"sail1wqkccr0o";0; >> >> fgetcsv() macht das daraus: >> $data[1] = ABC\"; >> >> Tatsaechlich wird aber folgendes benoetigt: >> $data[1] = ABC\ > >Ich muss gestehen nicht den ganzen Thread gelesen zu haben, >aber das hiesige sollte mit: > >preg_match_all("/(\"|'|)?(.*?)\\1;/", $string, $match); > >print_r($match['2']); > >zu lösen sein (Nicht getestet), wenn es um die einzelnen Zeilen geht. Danke - nur liegt das Problem darin, dass bereits fgetcsv() das Array falsch bildet. Etwas vollstaendiger: 9685;"AABM";"AABM";;;;"sas0jdpr8v9gk";0; 9686;"AABM\";"AABM\";;;;"sail1wqkccr0o";0; Daraus macht fgetcsv(): Array ( [0] => 9685 [1] => AABM [2] => AABM [3] => [4] => [5] => [6] => sas0jdpr8v9gk [7] => ) Array ( [0] => 9686 [1] => AABM\"; [2] => [3] => [4] => [5] => sail1wqkccr0o [6] => ) Das erste Array ist korrekt, das zweite nicht. Man koennte natuerlich ein addslashes() auf die gesamte Datei durchfuehren und sie erst dann per fgetcsv() lesen. Bei einer 10MB grossen Quelldatei erscheint mir das allerdings nicht besonders effektiv. fgets() hingegen wird mit solchen Zeilen Schwierigkeiten bekommen: 9687;"AABM;";"AABM;";;;;"sail1wqkccr0o";0; - Andreas
php::bar PHP Wiki - Listenarchive