Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Как в обыкновенном *.TXT файле поудалять одинаковые строки ?


IronHawk ©   (2002-03-28 16:40:00) 

Ну САБЖ !
.... заранее благодарен !


IronHawk   (2002-03-29 10:11:00) [1]


> MBo © (28.03.02 19:07)
> SList:=TStringList.Create;
> в начале
>
> Slist.Free;
> в конце



Спасибо огромное, уже проблемма устранена !


MBo   (2002-03-28 19:07:00) [2]

SList:=TStringList.Create;
в начале

Slist.Free;
в конце


IronHawk   (2002-03-28 17:26:00) [3]


> MBo © (28.03.02 17:02)
> в дополнение
> и никакой сортировки

Обалденно, работает, только удаляет все строки, даже НЕодинаковые и оставляет последнюю, как лечить ?


MBo   (2002-03-28 17:12:00) [4]

Alx2
>эффективность потеряем Бинарный поиск - слишком лакомая штучка
да я не против ;)


Alx2   (2002-03-28 17:10:00) [5]

>MBo © (28.03.02 17:02)
>и никакой сортировки
IMHO эффективность потеряем. Бинарный поиск - слишком лакомая штучка. И бинарная вставка ненамного медленнее.
PS
С парой файлов тормознул, блин.


IronHawk   (2002-03-28 17:04:00) [6]


> MBo © (28.03.02 17:01)
> AssignFile(F1, Fname);
> Reset(F1);
> while not Eof(F1) do
> begin
> Readln(F1, S);
> If SList.IndexOf(s)<0 then
> Slist.Add(s);
> end;
> CloseFile(F1);
> SList.SaveToFile(fname);//или в другое

ООО, Само ОНО !
Спасибо !
MBo - СпаСиБо !


MBo   (2002-03-28 17:02:00) [7]

в дополнение
и никакой сортировки


MBo   (2002-03-28 17:01:00) [8]

AssignFile(F1, Fname);
Reset(F1);
while not Eof(F1) do
begin
Readln(F1, S);
If SList.IndexOf(s)<0 then
Slist.Add(s);
end;
CloseFile(F1);
SList.SaveToFile(fname);//или в другое


IronHawk   (2002-03-28 17:01:00) [9]


> Alx2 © (28.03.02 16:58)
> Тогда вот так можно:
> Открываем исходный файл (F) на чтение и другой - на запись
> (W). В него будем складывать "товар".
> Читаем строчку из F, и если ее нет в StringList (сортированном
> и с dupIgnore), то пишем в W. После этого нашу строчку заносим
> в StringList.
> В конце переименовываем W в F и убиваем StringList.

Круто, а они непосоряться ?


Alx2   (2002-03-28 16:58:00) [10]

Тогда вот так можно:
Открываем исходный файл (F) на чтение и другой - на запись (W). В него будем складывать "товар".
Читаем строчку из F, и если ее нет в StringList (сортированном и с dupIgnore), то пишем в W. После этого нашу строчку заносим в StringList.
В конце переименовываем W в F и убиваем StringList.


IronHawk   (2002-03-28 16:56:00) [11]


> MBo © (28.03.02 16:55)
> можно добавлять строки по одной, проверяя IndexOf

Да не, это некатит !
У меня просто будет хвататься файл и одинаковые строки должны удаляться !


MBo   (2002-03-28 16:55:00) [12]

можно добавлять строки по одной, проверяя IndexOf


IronHawk   (2002-03-28 16:52:00) [13]


> McSimm ©

Вот какраз сортировки мне и ненадо !!!!


IronHawk   (2002-03-28 16:48:00) [14]

ОК !
Это на файлах до 100К, допустимо ?


McSimm   (2002-03-28 16:48:00) [15]

Только после этого строки окажутся отсортированными, что не всегда приемлемо


Alx2   (2002-03-28 16:46:00) [16]

Задача в общем случае (на файлах большого размера) сложная.
На мелких можно воспользоваться сортированным TStringList и свойством Duplicates = dupIgnore.


Наверх

Титульная страница Поиск, карта сайта Написать письмо