![]() |
|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
#1
|
|||
|
|||
![]() Всем привет!
Помогите пожалуйста новичку. Есть текстовый файл с неким количеством одинаковых ссылок. Нужно из этого файла выбрать в отдельный файл по одному дубликату, а ссылки у которых нет дублей, в другой отдельный файл. Заранее спасибо! |
#2
|
||||
|
||||
![]() Код:
procedure ruz(fn, dupfn, nodupfn: string); var sl1, sl2, sl3: TStrings; i, b, c: integer; begin sl1:= TStringList.Create; sl2:= TStringList.Create; sl3:= TStringList.Create; sl1.LoadFromFile(fn); sl2.Add(sl1[0]); for i := 1 to sl1.Count-1 do begin c:= 0; for b := 0 to sl2.Count-1 do if sl1[i] = sl2[b] then c:= 1; if c = 0 then sl2.Add(sl1[i]); end; for i := 0 to sl2.Count-1 do \\ С нуля здесь список должен крутиться begin c:= 0; for b := 0 to sl1.Count-1 do if sl2[i] = sl1[b] then inc(c); if c = 1 then sl3.Add(sl2[i]); end; sl2.SaveToFile(dupfn); sl3.SaveToFile(nodupfn); sl1.Free; sl2.Free; sl3.Free; end; ... // Вызов ruz('total.txt', 'dup.txt', 'nodup.txt'); Я не понял Вашего вопроса, но всё же Вам на него отвечу! Последний раз редактировалось Alegun, 09.12.2017 в 21:06. |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
corzh (09.12.2017)
|
#3
|
|||
|
|||
![]() Спасибо огромное, все работает!!!
|
#4
|
|||
|
|||
![]() Есть проблема. Если в файле все ссылки с дублями, то работает нормально. Если есть одинарные, то они почему то выводятся в оба файла, с дублями и без.
|
#5
|
||||
|
||||
![]() Цитата:
![]() Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#6
|
|||
|
|||
![]() А можно сделать тогда без сохранения уникальных ссылок, а только сохранять по одному дубликату?
Основная задача стоит, чтобы определить дубликаты и вывести по одному дубликату в отдельный файл. Последний раз редактировалось corzh, 09.12.2017 в 23:18. |
#7
|
||||
|
||||
![]() Проще второй циклоблок заменить на
Код:
for i := sl2.Count-1 downto 0 do begin c:= 0; for b := 0 to sl1.Count-1 do if sl2[i] = sl1[b] then inc(c); if c = 1 then begin sl3.Add(sl2[i]); sl2.Delete(i); end; end; Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
Этот пользователь сказал Спасибо Alegun за это полезное сообщение: | ||
corzh (10.12.2017)
|