PHP Zeilen aus CSV Datei löschen

ZockerLordLP

Erfahrenes Mitglied
Hallo Community

Kann ich mithilfe von PHP aus einer CSV Datei alle leere Zeilen löschen?
Habe es mit folgendem Code versucht:
PHP:
$filename = "./csv/14-01-2014.csv";
$fileedit = file_get_contents($filename);
$end = preg_replace("/(^[\r\n]*|[\r\n]+)[\s\t]*[\r\n]+/", "\n", $fileedit);
file_put_contents("./csv/14-01-2014.csv","");
file_put_contents("./csv/14-01-2014.csv",$end);

Allerdings wird dort nicht die erste Zeile gelöscht.
Ich will dies machen, da phpmyadmin meckert, dass in der Datei leere Zeilen vorkommen. Kann man anstelle auch MYSQL sagen, dass er die leeren Zeilen ignorieren soll?

Fehlermeldung:
Code:
Ungültige Anzahl an Spalten im CSV-Import in Zeile 1.

Danke für die Hilfe.
 
Diese Zeile in deinem Code ist unnötig: file_put_contents("./csv/14-01-2014.csv","");



Bugs immer zu mir:

PHP:
<?php

function removeEmptyLines($s)
{
    // Die Funktion achtet darauf, Whitespace am Zeilenende von Zeilen, die
    // aus mehr als Whitespace bestehen, *nicht* zu entfernen
    return preg_replace('/^\s*?[\r\n]+|[\r\n]+\s+\z/m', '', $s);
}

function removeTrailingWhitespace($s)
{
    return preg_replace('/\s+$/m', '', $s);
}

function normalizeLineEndings($s)
{
    return str_replace(array("\r\n", "\r"), "\n", $s);
}

function clean($s)
{
    return normalizeLineEndings(
        removeTrailingWhitespace(
            removeEmptyLines($s)
        )
    );
}



// Die Idee hier ist, \t, \r und \n explizit definieren zu können und dadurch
// etwa auch zu verhindern, dass ein Editor Whitespace am Zeilenende beim
// Speichern der Quellcodedatei entfernt.
//
// Zeilenenden im folgenden String werden entfernt, dann werden \t, \r und \n
// in einem zweiten Schritt durch das jeweilige Whitespace-Zeichen ersetzt.
$input = <<<'EOT'
   \n
    \r\n
bla\n
blub \r\n
foo\t\r
\n
    \n
\r\n
bar  \n
\n
\t\r\n
    \n
\n
\r\n
EOT;
$input = preg_replace('/[\r\n]+/', '', $input);
$input = str_replace(array('\r', '\n', '\t'), array("\r", "\n", "\t"), $input);



echo $input;

echo "\n----\n";

$data = removeEmptyLines($input);
echo str_replace(array(' ', "\t"), '_', $data) . ".\n";
echo "----\n";

$data = removeTrailingWhitespace($data);
echo $data . ".\n";
echo "----\n";

$data = normalizeLineEndings($data);
echo str_replace("\n", "\\n\n", $data) . ".\n";

// Oder alles in einem Rutsch:
echo "====\n";
echo clean($input) . ".\n";

Ausgabe:

Code:
bla
blub 
foo	
    

bar  

	
    



----
bla
blub_
foo_
bar__.
----
bla
blub
foo
bar.
----
bla\n
blub\n
foo\n
bar.
====
bla
blub
foo
bar.
 
Danke ;) Nur leider war dies nicht das Problem. Habe nun herausgefunden,dass in der Datenbank 8 Spalten vorhanden sind (wegen ID) und in der Datei 7. Kann man bei PHP hinterjeder Zeile einfach ein
Code:
,""
einfügen,sodass es funktioniert?
Oder kann man Mysql sagen das er die Spaltenanzahl ignorieren soll?
 
Du könntest die CSV-Datei einlesen, dann Zeile für Zeile loopen und in der Zeile deinen SQL so zusammen bauen, dass nur die Spalten mit Werten gefüllt werden, für die du einen Wert in der CSV-Datei stehen hast.
 
Jap danke. Hat geklappt mit PHP. Nun habe ich ein weiteres Problem. Er läd mir meine CSV Datein nicht mehr in die DB :(

SQL:
mysql_query("LOAD DATA LOCAL INFILE './csv/".$filenamehtm.".csv' INTO TABLE `".$tablename."` FIELDS TERMINATED BY ',' ENCLOSED BY '\"' ESCAPED BY '\"' LINES TERMINATED BY '\n'");

In der Datenbank stehen dann keine Daten.
Bei Xampp funktioniert es. Unter Debian nicht.

Folgende Fehlermedlung:
Code:
the used command is not allowed with this mysql version
 
Zuletzt bearbeitet:
Jop habe ich auch gesehen ;) Trotzdem Danke

Ein letztes Problem habe ich noch:
Kann ich MySql/PHP sagen, dass es, wenn die Zelle leer ist, den Wert aus der Zeile darüber nehmen soll?
 
Du kannst bei einem Loop dir die Werte aus der vorigen Zeile merken (z.B. über ein Array oder einfachen Variablen). Wenn du dann in der nächsten Zeile feststellst, das kein Wert in der entsprechenden Spalte ist, nimmst du einfach das, was du in der Zeile davor gespeichert hast.
 
Zurück