Datei bis Steuerzeiche auslesen

Seven Secrets

Erfahrenes Mitglied
Hallo,

ich möchte eine csv-Datei auslesen lassen. Jeder Datensatz besteht aus einzelnen Inhalten, die durch ein Komma getrennt sind. Die Datensätze werden dabei mit dem ASCII-Zeichen 13 getrennt. Wie kann ich es bewerkstelligen, daß die Inhalte einfach untereinander aufgelistet werden?

Ein Datensatz sieht so aus: JANET JACKSON,because of Love,VIRGIN,12&#34,gb,724389234060,9.63,http://www.mbeat.de/catalog/images/...mbeat.de/catalog/audio/m3u/27211.m3u,original 1994..r´n´b´soul...mixes by frankie&david...dub mix..classic 12 inch mix...trick...extended mix...muggs 7inch w/bass intro..!,http://www.mbeat.de/catalog/product_info.php?products_id=4794&language=de

Gruß
 
Verstehe die sache nicht ganz,
wenn du die Datei mit fopen öffnest und dann per fgets ohne Länge
ausliest, wird generell bis \n bzw \r\n ausgelesen.
Ansonsten sollte auch file() gehen, welches dir ein Array mit einem
Element pro Zeile anlegt.
 
Versuch mal folgendes:
PHP:
<?php
	$contents = file_get_contents('quelle.csv');
	$rows = explode(chr(13), $contents);
	foreach( $rows as $row ) {
		echo $row.'<br />';
	}
?>
 
Das funktioniert im Prinzip schon! Nun möchte ich aber den Inhalt zwischen den einzelnen Kommas gesondert auswerten und in einer Varibale Speichern lassen, um es in einer Tabelle wiedergeben zu können, so lange bis die Datei beendet ist. Da ja links für Bilder und Vorhöroptionen eingebunden sind.
 
Der Datensatz besteht aus:

Artist, Titel, Groesse, Country, BstllNr, Preis, Image, Info, Stream

die sind jeweils durch ein Komma getrennt. Ich hatte mir das wie folgt überlegt:

PHP:
$records = "quelle.csv";
$fp = fopen($records,"r");
while($zeile = fgetcsv($fp,500,","))
{
echo "Artist/Titel/Groesse/Country/BstllNr/Preis/Image/Info/Stream<br>";
for($x=0;$x<count($zeile);$x++)
{
echo "$zeile[$x]";
echo "<br>";
}
echo "<br>";
}
fclose($fp);?>

Nun soll anstatt dieser blanken Aufzählung der Inhalt in ein jeweiliges $name übergeben werden. Wie muß ich das bewerkstelligen?
 
Zunächst die Datei in array einlesen:

$datei = "http://www.xxx.de/yyy.csv";
$array = file($datei);

dann hast du ein array wo quasi jede Zeile einzeln drin steht.

um auf die einzelnen Datensätze der Zeilen zugreifen zu können musst du dieses array in ein weiters array aufteilen:

for($n=0;$n<count($array);$n++)
{
$daten = explode(",",$array[$n]);

//hier dann die Zeilenweise html Ausgabe - fertig
//in deinem Fall Artist = $daten[0] ... Titel = $daten[1] usw....
}
 
Das klingt schon logisch! Dabei gibt es das Problem, daß ich im Grunde zwei Steuerzeichen habe. Einmal ASCII-Zeichen 13 für einen kompletten Satz und das Komma um den Satz dann zu unterteilen.
 
Deswegen benutzt du mit meinem Vorschlag auch zwei arrays. Im ersten Array wird der komplette Satz bis zum Zeilenende in der CSV datei jeweil ausgelesen also hast du folgendes im array zu stehen:

$array[0] : Artist1, Titel1, Groesse1, Country1, BstllNr1, Preis1, Image1, Info1, Stream1
$array[1] : Artist2, Titel2, Groesse2, Country2, BstllNr2, Preis2, Image2, Info2, Stream2

und das bis zum letzten array

$array[999] : Artist999, Titel999, Groesse999, Country999, BstllNr999, Preis999, Image999, Info999, Stream999

Nun kommt das zweite array zum tragen, es zerlegt jetzt die im $array gespeicherten Zeilen anhand des Kommas noch einmal

for($n=0;$n<count($array);$n++)
{
$daten = explode(",",$array[$n]); //das Komma in den Hochkommas ist der Trennseperator
}

Oder verstehe ich da in deiner Frage irgend etwas falsch?
 
:rolleyes: Mein Fehler! :p Jetzt habe ich es verstanden!

Nun ist aber ein Satz nicht automatsich eine zeile sondern zwischen den Sätzen das ASCII-Zeichen 13 gesetzt. Die Datenbank wertet es aus und gibt es nacheinander einfach aus.

Artist1,Titel1,Groesse1,Country1,BstllNr1,Preis1,Image1,Info1,Stream1[ASCII-Zeichen 13 ]Artist2,Titel2,Groesse2,Country2,BstllNr2,Preis2,Image2,Info2,Stream2[ASCII-Zeichen 13 ]...[ASCII-Zeichen 13 ]Artist999,Titel999,Groesse999,Country999,BstllNr999,Preis999, Image999,Info999,Stream999
 
Zuletzt bearbeitet:
Zurück