Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2018, 22:56   #1
Valimer
 
Регистрация: 05.11.2015
Сообщений: 9
Печаль удалить дубликаты вместе с оригиналом из Tstrings

удалить дубликаты вместе с оригиналом из Tstrings, если первые 4 символа равны 4 символам других строк, пробовал такой код, но ошибка list index out of bounds 0, причем если написать условие
Код:
if t[i] = t[q] then t.delete(q);
то все нормально. Главное еще оптимизировать код под работу через F:textfile; (главное чтобы работало быстро и не через оперативную память)

Код:
var T:Tstringlist;
i,q:integer;
...
for I := t.Count-1 downto 0 do
for q := i-1 downto 0 do
if Copy(t[i],1,4) = Copy(t[q],1,4) then t.Delete(q);
Valimer вне форума Ответить с цитированием
Старый 29.09.2018, 19:25   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Код:
for i:=t.count-1 downto 0 do
  for q:=t.count-1 downto i+1 do
    if ... then t.Delete(q)
Код:
i:=0;
while i<t.count-1 do
  for q:=t.count-1 downto i+1 do
    if .... then t.Delete(q);
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Старый 29.09.2018, 19:37   #3
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,515
По умолчанию

Цитата:
Главное еще оптимизировать код под работу через F:textfile;
Код:
t:=TstringList.Create;//место хранения "уникальных" строк
while not EOF(...) do begin
  s:=readln(..); //или другое чтение строки файла
  r:=false;
  for i:=0 to t.count-1 do begin
    r:=( copy(s,1,4)=copy(t.string[i],1,4) );
    if r then break;
  end;
  if not r then t.add(s);
end;
t.savetofile(...);
в идеале скорости еще бы избавиться и от многочисленных "обрезаний" строк copy(t.strings[i], 1, 4) в сторону хранения в памяти уже обрезанных строк.
программа — запись алгоритма на языке понятном транслятору

Последний раз редактировалось evg_m; 29.09.2018 в 19:45.
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удалить дубликаты и посчитать их сумму Pluselectro Microsoft Office Excel 4 10.02.2017 17:02
Удалить дубликаты строк Tronix Общие вопросы Delphi 24 07.10.2013 06:49
Как удалить одинаковые строки вместе с оригиналом baaur Microsoft Office Excel 4 15.07.2013 12:20
Удалить дубликаты из разных книг (листов) mojo Microsoft Office Excel 2 04.08.2012 13:28
удалить дубликаты в stringlist yuran111 Общие вопросы Delphi 3 29.04.2011 18:24