"Christmas - the time to fix the computers of your loved ones" « Lord Wyrm

[PHP] .csv Datei importieren (ohne explode)

Bogus 02.12.2009 - 12:48 1606 7
Posts

Bogus

C64 Generation
Avatar
Registered: Mar 2006
Location: Graz
Posts: 3170
hi

bin echt ziemlich eingerostet. muss ein .csv file importieren.
bisher hab ich im .csv file einfach die pipe | als feldtrenner verwendet. mit explode ging es dann in php einfach aufzutrennen.

jetzt hab ich aber eine .csv datei (die ich selbst nicht beeinflussen) kann, welche ein komma als feldtrenner hat. zusätzlich sind textfelder in " gesetzt und integer nicht.

jemand nen trick auf lager oder hilft da nur noch eine regexp?

watchout

Legend
undead
Avatar
Registered: Nov 2000
Location: Off the grid.
Posts: 6845
Kann ein Textfeld auch \" enthalten?

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25381
Momentan verwende ich diese Funktion für CSVs. Greif zu. ;)
Code: PHP
	/**
	* Parses a string as CSV
	* @static
	*
	* Parses single quote and double quote values the same way.
	* For example with delimiter ',': 1,'2',"3",'4,',"5," => array(1,'2',"3",'4,',"5,")
	*
	* @param string input string
	* @param string optional delimiter
	*
	* @return array fields
	*/
	static public function parseCSV($szInput,$szDelimiter)
	{
		return preg_split('/'.$szDelimiter."(?=(?:[^\"\']*[\"\'][^\"\']*[\"\'])*(?![^\"\']*[\"\']))/",$szInput);
	}

Edit: Bug im PHP-vbTag gefixt. :p

Bogus

C64 Generation
Avatar
Registered: Mar 2006
Location: Graz
Posts: 3170
@watchout: wäre denkbar. dann wahrscheinlich ohne backslash davor. kann es leider nicht prüfen weil ne suche nach " zig ergebnisse pro zeile liefer ;)
und \" kommt nicht vor

@mat: mercie bien!

COLOSSUS

Administrator
Frickler
Avatar
Registered: Dec 2000
Location: ~
Posts: 11920
Es gibt ja auch auch wirklich nichts, was es im PHP-Default-Namensraum nicht gibt:
http://php.net/manual/en/function.fgetcsv.php ?

mat

Administrator
Legends never die
Avatar
Registered: Aug 2003
Location: nö
Posts: 25381
Ich hab mir damals eine eigene Version geschnitzt, weil die von PHP damals nur auf Dateien zugreifen konnte. Mittlerweile gibt es ja str_getcsv() bei PHP 5.3 und höher. Um für ältere PHP-Versionen kompatibel zu bleiben, könnten die Funktionen (bei selbem Verhalten!) per function_exists() gepaart werden.

Bogus

C64 Generation
Avatar
Registered: Mar 2006
Location: Graz
Posts: 3170
is ja krass des php. für jeden schmuh gibts ne function *G*
wird scho fad.......
....bei postnuke hatte es auch so angefangen das immer mehr optionale features zwangsweise eingebaut wurden........

thnx trotzdem für die hinweise

Ringding

Pilot
Avatar
Registered: Jan 2002
Location: Perchtoldsdorf/W..
Posts: 4300
Kontakt | Unser Forum | Über overclockers.at | Impressum | Datenschutz