2010-12-28 2 views
2

Что не так с этим, когда я выхожу из строки из файла csv и конкатюю что-нибудь до конца строки, он не отображается, вместо этого все строки эхо-сигналы, а Консолированная строка появляется только в самом конце, это какая-то буферизующая вещь, которая не позволяет мне конкатрировать строки с материалом из моего файла csv, его запуск на моем локальном сервере Wamp, и я попробовал разный разделитель строк в моей загрузке функция, im уверен, что файл использует только \ n в конце строки.php import csv в sql database

im пытается проанализировать файл csv по строке, поэтому я могу проверить его содержимое, прежде чем использовать его для создания инструкции sql и вставить ее в мою базу данных.

$file = fopen($filename, "r") 
$filesize = filesize($filename); 
$filecontent = fread($file, $filesize); 
fclose($file); 

$rows = explode("\n", trim($filecontent)); 
foreach ($rows as $row) 
{ 
    echo $row . '<br />'; 
} 
+0

Извините, ребята, мой плохой, у меня нет контроля над сценарием, который генерирует файл csv, и парень, который сказал мне использовать неправильный линейный разделитель, моя проблема решена сейчас. –

ответ

2

Вы разделите строку на строку \n. Если фактическая строка «\ n» не появляется в любом месте файла, это, вероятно, ничего не сделает. Вероятно, вы имели в виду "\n" (double quotes), что делает этот фактический разрыв линии.

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

$handle = fopen('test.csv', 'r'); 
while (($row = fgetcsv($handle)) !== false) { 
    foreach ($row as $field) { 
     echo $field . '<br />'; 
    } 
} 
fclose($handle); 
+0

двойные кавычки thig были просто копией + прошлой ошибкой, так что это не проблема, но я попробовал свой код и все еще получил то же поведение, о котором я описал, тэг br появляется после каждого поля, а не после каждой строки, если я что-то повторю или после цикла for он появится только один раз –

0

Использование fgetcsv() функции для преобразования CSV файл в массив:

$csvFile = "test.csv"; 
$csvSeparator = ","; 
$csvFileLength = filesize($csvFile); 

$handle = fopen($csvFile, "r"); 
    $csvData = fgetcsv($handle, $csvFileLength, $csvSeparator); 
fclose($handle); 

Дамп данных, чтобы показать структуру:

var_dump($csvData); 

Теперь вы можете конвертировать данные для использования в база данных.

+0

Я играл с fgetcsv раньше, я пробовал каждый пример на php.net, но все еще имею ту же проблему, fgetcsv просто возвращает каждое поле в файле csv в одном массиве, я не думаю, что он правильно читает разделитель строк, я думаю его набор \ r \ n по умолчанию и не может быть изменен. –