Модераторы: skyboy, MoLeX, Aliance, ksnk
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Как удалить одинаковую строку 
:(
    Опции темы
nnz
Дата 10.9.2006, 11:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 19.8.2006

Репутация: нет
Всего: нет



Доброго времени суток.
Надо написать скриптик, который удаляет одинаковые строки в файле.
Подскажите плиз функцию, с помощью которой удаляется строка из файла.
PM MAIL   Вверх
Mal Hack
Дата 10.9.2006, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



file, array_unique
PM ICQ   Вверх
nnz
Дата 10.9.2006, 12:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 19.8.2006

Репутация: нет
Всего: нет



Mal Hack Большое спасибо.  smile 
PM MAIL   Вверх
Vaulter
Дата 10.9.2006, 12:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 6
Всего: 22



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



--------------------
PM MAIL WWW ICQ   Вверх
nnz
Дата 10.9.2006, 13:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 19.8.2006

Репутация: нет
Всего: нет



Вот мой код, не судите строго  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к строк
Поправьте плиз, если что не так.

Это сообщение отредактировал(а) nnz - 10.9.2006, 13:12
PM MAIL   Вверх
Vaulter
Дата 10.9.2006, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Участник Клуба
Сообщений: 1724
Регистрация: 30.12.2002
Где: бункер

Репутация: 6
Всего: 22



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 "Работа завершена";



--------------------
PM MAIL WWW ICQ   Вверх
nnz
Дата 10.9.2006, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 19.8.2006

Репутация: нет
Всего: нет



>>когда писал "$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

Это сообщение отредактировал(а) nnz - 10.9.2006, 14:10
PM MAIL   Вверх
AztEK
Дата 10.9.2006, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: 6
Всего: 18



Цитата(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.


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
nnz
Дата 10.9.2006, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 19.8.2006

Репутация: нет
Всего: нет



AztEK Спасибо.
А что насчет некорректной работы:
Взял для теста файл 10573 строки
- скриптом в итоге выдало 4550 строк
- программой  - 6714 строк (проверил, ни одного дубля не нашел)
Какие будут мысли? Почему такая разница?
PM MAIL   Вверх
szz
Дата 10.9.2006, 16:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1289
Регистрация: 31.5.2005
Где: Moscow, Jerusalem

Репутация: 8
Всего: 33



Цитата
Старая версия PHP.

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


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

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


--------------------
PM   Вверх
Mal Hack
Дата 10.9.2006, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Мудрый...
****


Профиль
Группа: Участник Клуба
Сообщений: 9926
Регистрация: 15.2.2004

Репутация: 122
Всего: 261



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

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

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


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

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

PM ICQ   Вверх
nnz
Дата 10.9.2006, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 19.8.2006

Репутация: нет
Всего: нет



Цитата

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

Проверял и на меньших файлах - результат тот же.
PM MAIL   Вверх
AztEK
Дата 11.9.2006, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 723
Регистрация: 4.1.2005

Репутация: 6
Всего: 18



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


--------------------
Linux is like wigwam -- no windows, no gates, apache inside.
PM MAIL Jabber   Вверх
nnz
Дата 11.9.2006, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 19.8.2006

Репутация: нет
Всего: нет



Цитата

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

Да, считаются одинаковыми.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "PHP"
Aliance
IZ@TOP
skyboy
SamDark
MoLeX

Новичкам:

  • PHP редакторы собираются и обсуждаются здесь
  • Электронные книги по PHP, документацию можно найти здесь
  • Интерпретатор PHP, полную документацию можно скачать на PHP.NET

Важно:

  • Не брезгуйте пользоваться тегами [code=php]КОД[/code] для повышения читабельности текста/кода.
  • Перед созданием новой темы воспользуйтесь поиском и загляните в FAQ
  • Действия модераторов можно обсудить здесь

Внимание:

  • Темы "ищу скрипт", "подскажите скрипт" и т.п. будут переноситься в форум "Web-технологии"
  • Темы с именами: "Срочно", "помогите", "не знаю как делать" будут УДАЛЯТЬСЯ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, IZ@TOP, skyboy, SamDark, MoLeX, awers.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | PHP: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.2170 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.