2013-08-19 14 views
6

Mam ten skrypt, który zrobiłem, to w zasadzie chwyta wszystkie pliki w moim folderze "logi" i łączy je wszystkie w jeden plik tablicy, moim jedynym problemem jest to, że czasami skrypt zrywa się, jeśli istnieje jest pusta linia lub pusty wiersz! jak mogę powiedzieć, aby automatycznie pominąć puste puste linie i przejść do następnej? puste linie niekoniecznie są na górze lub na dole! może być w środku pliku csvfgetcsv pomiń puste wiersze w pliku

<?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

Może 'if (is_array ($ results) && count ($ result)) {$ csv [] = $ result; } ' – Orangepill

+2

@Orangeepill:' fgetcsv() 'zwraca' tablicę (null) 'gdy linia jest pusta, więc niestety' is_array ($ result) && count ($ result) 'miałoby wartość' true'. 'if ($ result! == array (null)) {$ csv [] = wynik $; } 'powinien załatwić sprawę. –

+0

@TomasCreemers Który działał świetnie: D, proszę, opublikuj to jako odpowiedź – hyperexpert

Odpowiedz

13

Jak można przeczytać w documentation for fgetcsv():

Pusta linia w pliku CSV zostanie zwrócona jako tablica składająca się z pojedynczego pola null i nie będą traktowane jako błąd.

Sprawdzanie że przed dodaniem go do tablicy danych powinny być wystarczające, aby:

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

Dziękuję, zadziałało świetnie – hyperexpert

+0

to rozwiązanie nie mogło uchwycić przypadku "pustej" linii csv nie zawierającej żadnych wartości, np. ",,,,, ,, który zostanie przetłumaczony jako tablica z pustymi wartościami znaków – Pitt

+0

@Pitt Masz rację. Miałem zamiar skorzystać z tego rozwiązania, ale nie działało, gdy testowałem. W takim przypadku możesz użyć zaakceptowanej odpowiedzi z tego pytania: https://stackoverflow.com/questions/5040811/checking-if-all-the-array-items-are-empty-php –

3

To działa w 100% testowane, najprostszy sposób. Wyjaśnienie jest takie, że puste linie powodują, że fgetcsv zwraca niepustą tablicę z tylko pustym elementem wewnątrz.

if ($result[0] == NULL) 
    continue; 
Powiązane problemy