предотвратить fgetcsv () взломать \ n внутри корпуса - PullRequest
0 голосов
/ 30 апреля 2020

Мой файл похож на это

row 1: 1,2,3,4
row 2: bob,larry,jill, "sue 
she is a great girl"
row3 3:tom, fred, jack, billy

, когда я использую fgetcsv ($ handle, 0, ',', '"'), он разбивает строку 2 на две отдельные строки, потому что в столбце 4 есть \ п в нем. Люди, которые дают мне эти CSV, используют Excel, чтобы сделать это, и Excel заключает в себе только двойные кавычки, когда есть специальный символ.

Как я могу написать fgetcsv (), чтобы он не разбивать \ n внутри двойных кавычек? Я пишу очень тяжелые PHP и анализирую иногда миллионы строк, поэтому мое решение должно быть эффективным с точки зрения памяти и времени. Мне просто кажется, что я неправильно использую fgetcsv потому что он, очевидно, не должен ломаться при вложении \ n.

Ответы [ 2 ]

1 голос
/ 30 апреля 2020

У меня есть код:

$row = 1;
if (($handle = fopen("test.csv", "r")) !== FALSE) {
    while (($data = fgetcsv($handle, 1000, ",", '"')) !== FALSE) {
        print_r($data);
    }
    fclose($handle);
}

и test.csv:

1,2,3,4
bob,larry,jill, "sue 
she is a great girl"
tom, fred, jack, billy

результат как исключение:

Array
(
    [0] => 1
    [1] => 2
    [2] => 3
    [3] => 4
)
Array
(
    [0] => bob
    [1] => larry
    [2] => jill
    [3] => sue 
she is a great girl
)
Array
(
    [0] => tom
    [1] =>  fred
    [2] =>  jack
    [3] =>  billy
)
0 голосов
/ 30 апреля 2020

Ваш файл должен быть:

1,2,3,4
bob,larry,jill, "sue 
she is a great girl"
tom, fred, jack, billy

без \ n в нем

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...