Hallo Leute,
ich steh mal wieder vor nem rießen Problem.
Und zwar geht es um eine CSV-Datei. Die bekomme ich von einem großen Shop. Diese muß ich in verschiedene kleinere aufteilen. Das ist auch alles kein Problem. Aber jetzt kommts. Die Daten sind per ';' getrennt. Ist ja auch so üblich.
In der Datei gibt es auch eine Spalte Beschreibung. Dort steht längerer Text drin. Jetzt haben die Schlaumeier von dem Shop in diesen Texten ';' gesetzt.
Dadurch geht natürlich die Aufteilung mit explode dahin
Da auf der Spalte Text eine Spalte folgt wo die Einträge immer mit einer Zahl beginnen, hab ich mir folgendes gedacht.
Also ich zerlege die Zeile mit explode. Dann prüfe ich ob wert[19] als 1. Zeichen eine Zahl hat. Wenn nicht, wird wert[19] an wert[18] angehängt
und es geht von vorne los.
Hier mal mein Versuch der Umsetzung:
Leider funktioniert das nicht wie es soll.
Ich erhalte folgenden Fehler:
Hat jemand eine Idee wie das zu realisieren ginge?
Ich wäre wirklich sehr dankbar.
ich steh mal wieder vor nem rießen Problem.
Und zwar geht es um eine CSV-Datei. Die bekomme ich von einem großen Shop. Diese muß ich in verschiedene kleinere aufteilen. Das ist auch alles kein Problem. Aber jetzt kommts. Die Daten sind per ';' getrennt. Ist ja auch so üblich.
In der Datei gibt es auch eine Spalte Beschreibung. Dort steht längerer Text drin. Jetzt haben die Schlaumeier von dem Shop in diesen Texten ';' gesetzt.
Dadurch geht natürlich die Aufteilung mit explode dahin
Da auf der Spalte Text eine Spalte folgt wo die Einträge immer mit einer Zahl beginnen, hab ich mir folgendes gedacht.
Also ich zerlege die Zeile mit explode. Dann prüfe ich ob wert[19] als 1. Zeichen eine Zahl hat. Wenn nicht, wird wert[19] an wert[18] angehängt
und es geht von vorne los.
Hier mal mein Versuch der Umsetzung:
PHP-Code:
private function delSemi($datei)
{
$src = file(dirname(__FILE__).'/../import/'.$datei);
$dst = fopen(dirname(__FILE__).'/../import/test.csv', 'w+');
foreach($src as $zeile)
{
$werte = explode(';', $zeile); // CSV Datenzeile in Array umwandeln
$zeichen=substr($werte[19],0,1); //erstes Zeichen von $werte[19] auslesen
if(!preg_match('/^[0-9]/', $zeichen))
{
$werte[18].="+".$werte[19];
$this->delSemi();
} //if pregmatch (wenn erstes Zeichen von werte[19] keine Zahl ist)
else
{
$text=$werte[0].$werte[1].$werte[2].$werte[3].$werte[4].$werte[5].$werte[6].$werte[7].$werte[8].$werte[9].$werte[10].$werte[11].$werte[12].$werte[13].$werte[14].$werte[15].$werte[16].$werte[17].$werte[18].$werte[19].$werte[20].$werte[21].$werte[22].$werte[23];
fwrite($dst, $text);
}
} // foreach
Ich erhalte folgenden Fehler:
Code:
Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 8308722 bytes) in AdminCSV.php on line 292
Ich wäre wirklich sehr dankbar.
Kommentar