2016-08-07 3 views
0

Я пытаюсь преобразовать файл .txt с разделителями табуляции в файл CSV.PHP - преобразование файла с разделителем TXT в CSV

Я был в состоянии использовать fgetcsv(), чтобы открыть текстовый файл и получить данные для каждой строки со следующим кодом:

$handle = fopen("fileurl.com", "r"); 
$row = 1; 
if (($handle = fopen("fileurl.com", "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, "\t")) !== FALSE) { 
     $num = count($data); 
     echo "<p> $num fields in line $row: <br /></p>\n"; 
     $row++; 

     for ($c=0; $c < $num; $c++) { 
      echo $data[$c] . "<br />\n"; 
     } 

     print_r($data); 

    } 
    fclose($handle); 
} 

Теперь я просто нужно создать файл CSV из массива данных. Я пробовал использовать fputcsv(), но не имел никакой удачи. Я пытался что-то вроде этого, но файл CSV создается не правильно, и только 1 строку:

$fp = fopen('file.csv', 'w'); 

fputcsv($fp, $data, "\t"); 

fclose($fp); 

Пример того, как создать CSV-файл из массива данных $ было бы здорово. Я потратил много времени на изучение и попытку понять это, но не смог заставить его работать.

ответ

3

fputcsv() только пишет по одной строке за раз. Не весь файл. Вам нужно пройти через $data, чтобы добавить все эти данные в файл CSV.

$fp = fopen('file.csv', 'w'); 
foreach ($data as $line) { 
    fputcsv($fp, $line); 
} 
fclose($fp); 

Полный пример использования кода:

$handle = fopen("fileurl.com", "r"); 
$lines = []; 
if (($handle = fopen("fileurl.com", "r")) !== FALSE) { 
    while (($data = fgetcsv($handle, 1000, "\t")) !== FALSE) { 
     $lines[] = $data; 
    } 
    fclose($handle); 
} 
$fp = fopen('file.csv', 'w'); 
foreach ($lines as $line) { 
    fputcsv($fp, $line); 
} 
fclose($fp); 
+0

Спасибо за ответ. Я пробовал это и получил следующую ошибку: Предупреждение: fputcsv() ожидает, что параметр 2 будет массивом, указанная строка –

+0

Я обновил свой ответ, используя код в качестве примера. Вы не помещали данные в массив, который необходим для этого. –

+0

Это получает предупреждение: неверный аргумент, предоставленный foreach() в этой строке $ fp = fopen ('file.csv', 'w'); –

0

Это правильный способ для записи данных в файл CSV

<?php 

$list = array (
    array('aaa', 'bbb', 'ccc', 'dddd'), 
    array('123', '456', '789'), 
    array('"aaa"', '"bbb"') 
); 

$fp = fopen('file.csv', 'w'); 

foreach ($list as $fields) { 
    fputcsv($fp, $fields); 
} 

fclose($fp); 
?> 

В fputcsv мы используем второй параметр в виде массива.

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