PHP fgetcsv (), где исходный файл не имеет символа вложения? - PullRequest
4 голосов
/ 19 ноября 2011

У меня есть входной CSV, где «столбцы» ни в чем не заключены.

Содержимое файла ($ input = fopen ( filename );):


    1,2,3,4,5,6,7
    a,b,c,d,e,f,g
    9,8,7,6,5,4,3
    z,y,x,w,v,u,t

У меня проблемы с тем, чтобы заставить fgetcsv () работать, потому что вокруг значений нет оболочки.



    while($row = fgetcsv($input)) {
      print_r($row);
    }

Результаты:

1111

У меня естьпопробовал некоторые базовые вещи, которые я мог придумать, из головы:

fgetcsc($file, 0, ',', '\');

fgetcsc($file, 0, ',', '');

Есть идеи для обхода?Редактирование входного файла вручную на самом деле не вариант, так как в нем несколько миллионов строк.

Ответы [ 3 ]

4 голосов
/ 19 ноября 2011

Непонятно, в чем ваша проблема. fgetcsv и str_getcsv также работают со столбцами без кавычек:

print_r(str_getcsv('1,2,3,4,5,6,7'));

Возвращает:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
    [4] => 5
    [5] => 6
    [6] => 7
)

Кавычки являются необязательными и предназначены только для CSV, у которого в значениях может быть разделитель столбцов:

 column1, "Column 2 with , comma inside", colum3
1 голос
/ 19 ноября 2011

Вам не нужно использовать эти два последних параметра вообще, они являются необязательными. Просто используйте:

fgetcsv($file, 1000);

Это автоматически предполагает, что разделитель - запятая. Также длина должна быть не 0, а положительным числом символов, которые следует прочитать.

В качестве альтернативы: вам не нужно полагаться на fgetcsv, вы можете просто использовать explode:

$values = explode(",", $row);
0 голосов
/ 10 октября 2017

более правильный способ сделать это - изменить значение корпуса на что-то редко используемое (или вообще не используемое).

Наилучшим вариантом, как я обнаружил, будет символ chr (0).

fgetcsv($handle, null, "\t", chr(0))

отлично работает для меня и не должен ломаться, если только у вас нет крайнего случая данных CSV.

...