Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.11;
Скачать: [xml.tar.bz2];




Вниз

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


IronHawk   (2002-03-28 16:40) [0]

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



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

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



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

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



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

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



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


> McSimm ©

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



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

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



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


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

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



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

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



MBo   (2002-03-28 17:01) [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) [9]


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

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



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

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



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


> 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 - СпаСиБо !



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

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



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

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



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


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

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



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

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

Slist.Free;
в конце



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


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



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




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.04.11;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.025 c
14-32942          SV                    2002-03-02 19:15  2002.04.11  
WinXP. Что дальше?


1-32754           Yu                    2002-03-28 10:30  2002.04.11  
Всем привет


3-32694           Serg___               2002-03-21 10:46  2002.04.11  
ADO vs BDE


1-32895           ppcat                 2002-03-24 17:52  2002.04.11  
Version Information


3-32698           kjj                   2002-03-21 15:32  2002.04.11  
что писать в UpdateSQL?