Hallo,
ich schreibe gerade an einem kleinen Programm, das eine CSV-Datei mit fgetcsv einließt und den Inhalt anschließend in eine DB schreiben soll.
An einer Stelle möchte ich einen String mittels preg_match in seine Einzelteile zerlegen. Und das ist der Haken. Wenn ich den zweiten Parameter von preg_match per Variable übergebe, bekomme ich ein leeres $matches-Array zurück. Wenn ich den $subject-Parameter allerdings hartcodiert übergebe, funktioniert es (das ist allerdings bei einer Schleife weniger sinnvoll).
Hier mein Code:
In der Variablen $data[Buchungstext] ist der richtige String enthalten. Kann ich auch Problemlos ausgeben. Mein regulärer Ausdruck tut das was er soll, allerdings nur nicht meiner Schleife.
Woran könnte das liegen?
Vielen Dank und Grüße
ich schreibe gerade an einem kleinen Programm, das eine CSV-Datei mit fgetcsv einließt und den Inhalt anschließend in eine DB schreiben soll.
An einer Stelle möchte ich einen String mittels preg_match in seine Einzelteile zerlegen. Und das ist der Haken. Wenn ich den zweiten Parameter von preg_match per Variable übergebe, bekomme ich ein leeres $matches-Array zurück. Wenn ich den $subject-Parameter allerdings hartcodiert übergebe, funktioniert es (das ist allerdings bei einer Schleife weniger sinnvoll).
Hier mein Code:
PHP-Code:
<?php
header("Content-Type: text/html; charset=utf-8");
setlocale(LC_ALL, 'de_DE');
define("Wertstellung", 1);
define("Buchungstext", 3);
define("Umsatz", 4);
$datei = "umsaetze.csv";
$row = 1;
$i=0;
$__postings = array();
$pattern = "Auftraggeber(.*)Buchungstext(.*)End-to-End-Ref(.*)Mandatsref(.*)Gläubiger-ID(.*)Ref(.*)";
if (($handle = fopen($datei, "r")) !== FALSE) {
while (($data = fgetcsv($handle, 1000, ";")) !== FALSE) {
if ($row <= 11) { $row++; continue; }
$num = count($data);
if ($num == 6) {
$__postings[$i]["Datum"] = date("d.m.Y", strtotime($data[Wertstellung]);
$matches = null;
$subject = $data[Buchungstext];
preg_match("/$pattern/", $subject, $matches);
echo "<pre>";
var_dump($data[Buchungstext]); /* string(239) "Auftraggeber: AMAZON EU S.A.R.L. Buchungstext: 999-99999999-9999999 Amazon.de 00000 00000000000 End-to-End-Ref.: 9999999999999999 COR1 / Mandatsref.: xxxX99XX.XXX:xxx:xxXx+99X99xx9 Gläubiger-ID: DE99ZZZ00000000000 Ref. XX999999X9999999/99999" */
var_dump($matches); /* array(0) {} */
echo "</pre>";
$__postings[$i]["Auftraggeber"] = $matches[1]; /* Notice: Undefined offset: 1 in [...] on line 33 */
$__postings[$i]["Buchungstext"] = $matches[2]; /* Notice: Undefined offset: 2 in [...] on line 34 */
$__postings[$i]["End-to-End-Ref"] = $matches[3]; /* Notice: Undefined offset: 3 in [...] on line 35 */
$__postings[$i]["Mandatsref"] = $matches[4]; /* Notice: Undefined offset: 4 in [...] on line 36 */
$__postings[$j]["Gläubiger-ID"] = $matches[5]; /* Notice: Undefined offset: 5 in [...] on line 37 */
$__postings[$i]["Ref"] = $matches[6]; /* Notice: Undefined offset: 6 in [...] on line 38 */
$__postings[$i]["Umsatz"] = str_replace(array('.', ','), array('', '.'), $data[Umsatz]);
$i++;
}
$row++;
}
fclose($handle);
}
?>
Woran könnte das liegen?
Vielen Dank und Grüße
Kommentar