2013-11-24 5 views
0

все еще борется с манипуляциями файлами PHP и CSV. Я постараюсь спросить об этом, чтобы я мог помочь.PHP для удаления последней строки CSV-файла

У меня есть файл CSV с примерно 4000 строк/строк, и я написал этот код для создания массива всего CSV и вытащил строку LAST из файла CSV для использования в моем скрипте. Код работает для всего этого успеха.

// CREATE ASSOCIATIVE ARRAY FROM LAST ROW OF CSV FILE 
$csv = array(); 
if (FALSE !== $handle = fopen("Alabama-TEST.csv", "r")) 
{ 
while (FALSE !== $row = fgetcsv($handle)) 
{ 
$csv[] = $row; 
} 
} 
$new_csv = array(); 
foreach ($csv as $row) 
{ 
$new_row = array(); 
for ($i = 0, $n = count($csv[0]); $i < $n; ++$i) 
{ 
$new_row[$csv[0][$i]] = $row[$i]; 
} 
$new_csv[] = $new_row; 
} 

переменные $ NEW_ROW последняя строка в CSV, и я могу использовать штраф данных. Но когда скрипт закончен, я хочу удалить эту последнюю строку с именем $ new_row.

Вот пример моего CSV-файла на вид сверху;

CITY  ADDRESS  STATE  NAME 
Birmingham 123 Park St. Alabama Franky 

Поэтому я просто хочу удалить последнюю строку и сохранить заголовок сверху, в следующий раз, когда скрипт запускается. Я пробовал в течение 3 дней, пытаясь понять это, поэтому я надеюсь, что кто-то из тех, кто ЗНАЕТ, ЧТО ОНИ ОЗНАЧАЮТ, может помочь.

Вот код, который я попытался удалить с последней строки;

$inp = file('Alabama-TEST.csv'); 
$out = fopen('Alabama-TEST.csv','w'); 
or ($i=0;$i<count($inp)-1;$i++) 
fwrite($out,$inp[$i]); 
fclose($out); 

Поскольку я использую большой файл размером около 4000 строк, есть ли способ сделать это, не используя слишком много памяти?

+0

Поскольку $ n содержит количество строк, почему «$ i <$ n - 1» не разрешает? может быть, вы не объяснили себя правильно? – nrathaus

+0

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

+0

Вы хотите написать новую версию Alabama-TEST.csv без последней строки? – nrathaus

ответ

1

Вы должны использовать array_pop в массиве ($ new_csv) и fputcsv для сохранения файла:

array_pop($new_csv); // Removes the last element in the array 
$out = fopen('Alabama-TEST-new.csv','w'); 
foreach ($new_csv as $row) { // sorry for writing it badly, try now 
fputcsv($out, $row); 
} 
fclose($out); 

У меня нет условий, чтобы проверить это, извините.

+0

Спасибо - попробовал, и он бежал без ошибок - к сожалению, он не удалял последнюю строку в CSV - я думаю, что вы действительно близки, хотя из-за того, что он не исказил CSV-файл. –

+0

Вы заметили, что я намеренно редактировал ** Alabama-TEST-new.csv **, а не оригинальный файл? :) – nrathaus

+0

Извините, я не использовал Alabama-TEST-new.csv - я попробую еще раз –

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