2013-06-03 2 views
1

Я обрабатываю файлы csv от geonames.org, и поэтому мне нужно получить строки csv без каких-либо вложений.Как вы можете использовать fgetcsv, когда нет символа оболочки?

В настоящее время fgetcsv() требует, чтобы вы предоставили единственный символ для параметра $enclosure и не обрабатывали данные CSV, если вы этого не сделаете.

Как вы извлекаете данные csv, которые не имеют символа оболочки, используя собственные функции php?

+0

Только для чтения линии для линии, а затем синтаксический анализ данных самостоятельно в нужном формате – MKroeders

ответ

2

Как уже упоминалось, проще всего не использовать fgetcsv(). Вы можете просто использовать функцию простой fgets(), чтобы прочитать каждую строку из CSV, а затем использовать explode(), чтобы создать массив всех различных полей в каждой строке

Вот небольшой пример:

$handle = fopen("foo.csv", "r"); 

$i = 1; // for test output 

while (($buffer = fgets($handle)) !== false) { 
    $fields = explode(";", $buffer); // assuming that fields are separated with semicolons 

    $j = 1; 

    // Test output 
    echo "Line $i: "; 
    // This is just for show, you can use a regular for loop instead 
    foreach ($fields as $field) { 
     echo "Field $j: $field"; 
     $j++; 
    } 

    echo "\n"; 
    $i++; 
} 

fclose($handle); 
+1

Это не принимает в уходящих функции, предоставляемых fgetcsv и может привести в некорректной строке, где точка с запятой используется в данных csv. Однако это эффективное решение для большинства ситуаций. – Josiah

5

в качестве возможного решения проблемы можно использовать нечетный характер, так как корпус:

// Read TSV line using 'backspace' as the enclosure character 
fgetcsv($stream, 0, "\t", chr(8)); 
+1

Typo в имени функции «char», должен быть «chr». –

Смежные вопросы