2013-08-19 15 views
6

Ich habe dieses Skript, das ich tat, es greift grundsätzlich alle Dateien in meinem "logs" Ordner und füge sie alle in einer Array-Datei zusammen, mein einziges Problem ist, manchmal das Skript bricht, wenn es ist Leerzeile oder Leerzeile! Wie kann ich sagen, dass leere leere Zeilen automatisch übersprungen werden und zum nächsten gehen? Leerzeilen sind nicht unbedingt oben oder unten! in der Mitte der CSV-Dateifgetcsv überspringen leere Zeilen in Datei

<?php 
    $csv = array(); 
    $files = glob('../logs/*.*'); 
    $out = fopen("newfile.txt", "w"); 

    foreach($files as $file){ 
     $in = fopen($file, "r"); 

    while (($result = fgetcsv($in)) !== false) 

     { 
      $csv[] = $result; 
     } 

     fclose($in); 
     fclose($out); 
    } 

    print json_encode(array('aaData' => $csv)); 
?> 
+0

Vielleicht 'if (is_array ($ result) && count ($ result)) {$ csv [] = $ result; } ' – Orangepill

+2

@Orangepill:' fgetcsv() 'gibt 'array (null)' zurück, wenn die Zeile leer ist, also 'is_array ($ result) && count ($ result)' wäre 'true'. 'if ($ result! == array (null)) {$ csv [] = $ result; } 'sollte den Trick machen. –

+0

@TomasCreemers Das hat super funktioniert: D würdest du es bitte als Antwort posten – hyperexpert

Antwort

13

Wie Sie in dem documentation for fgetcsv() sein könnte lesen:

Eine leere Zeile in einer CSV-Datei als Array zurückgegeben werden, die ein einzelnes Nullfeld, und wird nicht als Fehler behandelt.

für die Überprüfung, bevor es auf Ihre Daten Array Zugabe sollte ausreichend sein:

while (($result = fgetcsv($in)) !== false) { 
    if (array(null) !== $result) { // ignore blank lines 
     $csv[] = $result; 
    } 
} 
+0

Danke, toll gearbeitet – hyperexpert

+0

diese Lösung würde den Fall einer 'leeren' CSV-Zeile nicht erfassen, die keine Werte enthält, wie ',,,,,, ,, 'was würde übersetzt als ein Array mit leeren String-Werten – Pitt

+0

@ Pitt Sie haben Recht. Ich wollte diese Lösung verwenden, aber es hat nicht funktioniert, als ich es getestet habe. In diesem Fall können Sie die akzeptierte Antwort aus dieser Frage verwenden: https://stackoverflow.com/questions/5040811/checking-if-all-the-array-items-are-empty-php –

3

Dies funktioniert zu 100% getestet, einfachste Weg. Die Erklärung ist, dass leere Zeilen dafür sorgen, dass fgetcsv ein nicht leeres Array mit nur einem Nullelement zurückgibt.

if ($result[0] == NULL) 
    continue; 
Verwandte Themen