2013-05-11 10 views
0

У меня есть следующий фрагмент кода, который я пытаюсь использовать для чтения файла, который может иметь несколько строк, повторяющихся два или более раз. Цель этого скрипта - писать только уникальные строки (без дубликатов), но по какой-то причине кажется, что он не обнаруживает равенства. Есть предположения?Сравнение строк PHP не работает должным образом

$handle = @fopen("Old.csv", "r"); 
$new = @fopen("New.csv", "w"); 
$last_line = null; 

if ($handle && $new) { 
    while (($buffer = fgets($handle, 4096)) !== false) { 
     if($last_line != $buffer) fwrite($new, $buffer); 
     $last_line = $buffer; 
    } 
    if (!feof($handle)) { 
     echo "Error: unexpected fgets() fail\n"; 
    } 
    fclose($handle); 
    fclose($new); 
} 

Вот пример "Old.csv"

apple 
apple 
orange 
grapes 
grapes 
grapes 

"New.csv" должно быть:

apple 
orange 
grapes 

Но он оказался точной копией «Старый .csv».

+1

Почему не просто 'uniq Old.csv> New.csv' в вашем среднем приглашении unix? –

+0

логика apearrs будет звуковой ... можете ли вы подтвердить, что Old.csv отсортирован? – Orangepill

+0

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

ответ

1

попробуйте cat old.csv | sort -u > new.csv в командной строке его гораздо быстрее.

+0

Я НЕ пытаюсь сортировать данные. Я пытаюсь удалить повторяющиеся строки. – pogeybait

+0

После того как вы получили окончательные строки, ваш ответ действительно работал для обрезки дубликатов, поэтому я принял ваш ответ. – pogeybait

0

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

+0

имеет большое значение :) – DevZer0

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