Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Как удалить одинаковую строку


Автор: nnz 10.9.2006, 11:31
Доброго времени суток.
Надо написать скриптик, который удаляет одинаковые строки в файле.
Подскажите плиз функцию, с помощью которой удаляется строка из файла.

Автор: Mal Hack 10.9.2006, 11:57
file, array_unique

Автор: nnz 10.9.2006, 12:26
Mal Hack Большое спасибо.  smile 

Автор: Vaulter 10.9.2006, 12:50
nnz, чтобы удалить строку из файла
надо сначала прочитать . будем читать в массив
$c = file($file);
теперь номер строки для удаления ($todel) например. или array_map, foreach, ...
unset($c[$todel]);
теперь обратно в файл:
file_put_contents($file, implode("\r\n",$c));

Автор: nnz 10.9.2006, 13:10
Вот мой код, не судите строго  smile 
Код

<?php
Error_Reporting(E_ALL & ~E_NOTICE);
    $List = file("$way_to_file");
    $Unique_list = array_unique ($List);
        for ($i=0; $i< count ($Unique_list); $i++) 
            {
                $k=fopen("$out_file", "a+") or die ("Ошибка открытия файла");
                fputs ($k, $Unique_list[$i]);
                fclose($k);
            }
    print "Работа завершена";
?>

Только мне кажется, что он некорректно работает с файлами, в которых больше 20к строк
Поправьте плиз, если что не так.

Автор: Vaulter 10.9.2006, 13:53
nnz, >>Только мне кажется, что он некорректно работает с файлами, в которых больше 20к строк
откуда такая информация?
когда писал "$way_to_file" подумал че написал??? 

код можно ужать:
$List = file($way_to_file);
$Unique_list = array_unique ($List);
file_put_contents($way_to_file,implode("\r\n",$Unique_list));
print "Работа завершена";

Автор: nnz 10.9.2006, 14:04
>>когда писал "$way_to_file" подумал че написал??? 
А что тут не так? Путь к файлу берется из html формы? форма в другом файле.
>>nnz, >>Только мне кажется, что он некорректно работает с файлами, в которых больше 20к строк
>>откуда такая информация?
Есть у меня программка с помощью которой тоже можно удалять дубли, так вот в ней результатов получается гараздо больше и повторов вроде нету. (ее не хочу использовать так как работает очень долго на моем компе, а скрипт на php в 10-ки раз быстрее)
Код

$List = file($way_to_file);
$Unique_list = array_unique ($List);
file_put_contents($way_to_file,implode("\r\n",$Unique_list));
print "Работа завершена";

Выдает ошибку:
Fatal error: Call to undefined function: file_put_contents() in z:\home\localhost\www\delete.php on line 5

Автор: AztEK 10.9.2006, 14:25
Цитата(nnz @  10.9.2006,  17:04 Найти цитируемый пост)
Выдает ошибку:
Fatal error: Call to undefined function: file_put_contents() in z:\home\localhost\www\delete.php on line 5


Старая версия PHP.
Воспользуйся fopen и fwrite или обнови PHP.

Автор: nnz 10.9.2006, 14:39
AztEK Спасибо.
А что насчет некорректной работы:
Взял для теста файл 10573 строки
- скриптом в итоге выдало 4550 строк
- программой  - 6714 строк (проверил, ни одного дубля не нашел)
Какие будут мысли? Почему такая разница?

Автор: szz 10.9.2006, 16:57
Цитата
Старая версия PHP.

  Кстати, 4-я версия еще не считается старой. Вот 5-ая считается како-то нездорово новой, это да.


Цитата
Какие будут мысли? Почему такая разница? 

  Мне в голову приходят только коллизии с \r

Автор: Mal Hack 10.9.2006, 19:36
Цитата(szz @  10.9.2006,  17:57 Найти цитируемый пост)
Вот 5-ая считается како-то нездорово новой, это да.

Это - НЕТ. Нормальная версия...

Цитата(nnz @  10.9.2006,  15:39 Найти цитируемый пост)
Какие будут мысли? Почему такая разница? 


Цитата(szz @  10.9.2006,  17:57 Найти цитируемый пост)
  Мне в голову приходят только коллизии с \r 

Это раз. А Два, скорее всего памяти не зватило. Хотя маловероятно.

Автор: nnz 10.9.2006, 21:31
Цитата

А Два, скорее всего памяти не зватило. Хотя маловероятно.

Проверял и на меньших файлах - результат тот же.

Автор: AztEK 11.9.2006, 11:54
А какой программой? Какой у неё алгоритм определения дублей (в частности, считаются ли разнорегистровые строки одинаковыми)?

Автор: nnz 11.9.2006, 14:39
Цитата

в частности, считаются ли разнорегистровые строки одинаковыми

Да, считаются одинаковыми.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)