fgetcsv() bzw. eigene csv Funktion für String

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

fgetcsv() bzw. eigene csv Funktion für String

Beitrag von mgutt »

Hallo,

meine Frage war:
gibt es irgendwo eine fertige Funktion für csv-Zeilen wie z.B.:

Code: Alles auswählen

// getcsv ($var, $Trennzeichen, $Texterkennungszeichen, $Texterkennungszeichen_löschen)
getcsv($string, ";", '"');
Zwischenzeitlich habe ich selbst was geschrieben:

Code: Alles auswählen

<?php

function getcsv($var, $delimiter=';', $field_delimiter='"', $rfd=false)
{
	// standard: '#("[^"]*"|[^";]+)#'
	$pattern = '#(' . $field_delimiter . '[^' . $field_delimiter . ']*' . $field_delimiter . '|[^' . $field_delimiter . '' . $delimiter . ']+)#';
	preg_match_all($pattern, $var, $matches);
	$matches = $matches[1];
	if ( $rfd )
	{
	 	$matches = str_replace($field_delimiter, '', $matches);
	}
	return $matches;
}

$var = '"text1";"text2";"text3;text4;text5";0.00;"text6";10;1234;"text7";text8;"";"text9";"";"text10"';

echo('<pre>');
print_r(getcsv($var, ';', '"'));
print_r(getcsv($var, ';', '"', true));
echo('</pre>');

?>
Das Ergebnis:

Code: Alles auswählen

Array
(
    [0] => "text1"
    [1] => "text2"
    [2] => "text3;text4;text5"
    [3] => 0.00
    [4] => "text6"
    [5] => 10
    [6] => 1234
    [7] => "text7"
    [8] => text8
    [9] => ""
    [10] => "text9"
    [11] => ""
    [12] => "text10"
)
Array
(
    [0] => text1
    [1] => text2
    [2] => text3;text4;text5
    [3] => 0.00
    [4] => text6
    [5] => 10
    [6] => 1234
    [7] => text7
    [8] => text8
    [9] => 
    [10] => text9
    [11] => 
    [12] => text10
)
Kommentare und Kritik sind erwünscht.

Gruß
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Was machst du wenn Anführungszeichen im Text vorkommen? Du müsstest die Maskierung noch erkennen oder? (z.b. mit Backslash oder wie auch immer das normalerweise maskiert wird).
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

Das ist eben die Frage. Es gibt ja nicht wirklich einen Standard dafür.

Gibt es csv Dateien, die Anführungszeichen im Text haben und mit Backslash maskiert wurden?

Gruß
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
Stefane
Mitglied
Beiträge: 784
Registriert: 04.02.2006 22:43
Wohnort: Rathenow
Kontaktdaten:

Beitrag von Stefane »

Servus,

also ich kenne diese Funktion: fgetcsv.
Bei dieser kannst du auch das Trennzeichen separat angeben.
Diese Funktion ist auch speziell dazu, um CSV-Dateien auszulesen. Ich verwende diese Funktion selbst in einem Script von mir. Funktioniert ohne Probleme.
Ich hoffe, das ist das, was du suchst und dass wir nich aneinander vorbeireden!?!
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

Hi,

es ist nicht von ungefährt, dass die Funktion von mir getcsv() heißt.

fgetcsv funktioniert aber nur bei einem Filestream.

Wenn Du die Datei aber mit file() oder file_get_contents() einliest hilft die Dir nicht weiter.

Gruß
Marc
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
Pyramide
Ehrenadmin
Beiträge: 12734
Registriert: 19.04.2001 02:00
Wohnort: Meschede

Beitrag von Pyramide »

mgutt hat geschrieben:fgetcsv funktioniert aber nur bei einem Filestream.

Wenn Du die Datei aber mit file() oder file_get_contents() einliest hilft die Dir nicht weiter.
Ein Grund mehr, auf das sinnlose aufteilen in mehrere Dateien zu verzichten. :roll:
KB:knigge
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Also ich denke es gäbe da mehrere Versionen:
1.
- Zellen von ; getrennt
- Wenn keine ; im Zellentext sind, dann keine Maskierung des Inhalts, ansonsten Anführungszeichen (") um den Inhalt bis zum nächsten Semikolon.
- Wenn Anführungszeichen vorhanden sind, werden diese verdoppelt

Diese Version scheint z.b. von Excel beim erstellen von CSV verwendet zu werden.

2.
- Zellen von ; getrennt
- Um den Zellinhalt stehen grundsätzlich immer Anführungszeichen
- Enthaltene Anführungszeichen werden verdoppelt um sie von den Anfangs-/Endzeichen abzuheben.

Diese Version halte ich für sinnvoll.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Benutzeravatar
mgutt
Mitglied
Beiträge: 2999
Registriert: 31.08.2004 16:44
Wohnort: Hennef
Kontaktdaten:

Beitrag von mgutt »

Pyramide hat geschrieben:
mgutt hat geschrieben:fgetcsv funktioniert aber nur bei einem Filestream.

Wenn Du die Datei aber mit file() oder file_get_contents() einliest hilft die Dir nicht weiter.
Ein Grund mehr, auf das sinnlose aufteilen in mehrere Dateien zu verzichten. :roll:
So sinnlos ist das nicht, da ich die Datei nicht in einem abarbeite, sondern jeden Split durch den Besucher einzeln abarbeiten lasse.

Anders müsste ich die letzte Zeile herannehmen, die zwischenspeichern usw. ne.. im Moment ist das schön einfach :D
meine Foren: http://www.maxrev.de/communities.htm
Ich kaufe Dein Forum! Angebote bitte an marc at gutt punkt it
Benutzeravatar
Stefane
Mitglied
Beiträge: 784
Registriert: 04.02.2006 22:43
Wohnort: Rathenow
Kontaktdaten:

Beitrag von Stefane »

hi, schaut mal, was mir gerade über den Weg gelaufen ist...
http://de2.php.net/manual/de/function.str-getcsv.php

Also gibt es solch eine Funktion wohl doch.
Antworten

Zurück zu „Coding & Technik“