Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Общие вопросы > Копии строк в ЛистБоксе...


Автор: Kritik 7.3.2006, 08:59
Всем привет!
Дам, девушек и девчёнок с праздником!!!

Люди такой вопрос проверить ЛистБокс на копии и выделить их или удалить???
Делаю цикл от нулевой строки до Коунт-1 в него подцикл от 1-ой строки до Коунт, при этом у меня выходят ошибки: лист аут оф бонд (и число)...

Если кто делал подобное подкиньте решение....

Пасиба.

Автор: Albinos_x 7.3.2006, 09:31
Цитата(Kritik @ 7.3.2006, 08:59 Найти цитируемый пост)
1-ой строки до Коунт

строки Коунт не существует...т.к. отчисление от нуля...

http://forum.vingrad.ru/index.php?showtopic=81996&hl=combobox
http://forum.vingrad.ru/index.php?showtopic=75776&hl=combobox
http://forum.vingrad.ru/index.php?showtopic=72378&hl=combobox

это с combobox, то же и с ЛистБоксом

Автор: Drovosek 10.3.2006, 12:18
[/code]
Код

procedure TForm1.Button1Click(Sender: TObject);
var s,m: string;
i,k,y: integer;
f: textfile;
begin
//заменяем повторы на пустоту
for i:= 0 to listbox1.Items.Count-1 do
  begin
  s:=listbox1.Items.Strings[i];
  for k:= 0 to listbox1.Items.Count-1 do
    begin
    m:=listbox1.Items.Strings[k];
    if (i<>k) and (s=m) and (m<>'') then
      begin
      listbox1.Items.Delete(k);
      listbox1.Items.Add('');
      end;

    end;
  end;

//в папке, где сохранен проект создаем файл.txt

assignfile(f,'temp.txt');
rewrite(f);
for i:=0 to listbox1.Items.Count-1 do
  begin
  s:=listbox1.Items.Strings[i];
  if s<>'' then writeln(f,s);//записываем в него строки из listbox, кроме пустых
  end;

// добавляем строки из файла в listbox
listbox1.Items.Clear;
reset(f);
while not EOF(f) do
  begin
  readln(f,s);
  listbox1.Items.Add(s);
  end;
//получили listbox без пустых строк и повторов. файл.txt удаляем
reset(f);
rewrite(f);
closefile(f);
erase(f);

end;


end.

// ничего проще в голову не пришло



При этом порядок строк будет сохранен!



{Все гениальное просто и рационально} smile

Автор: Демо 10.3.2006, 13:10
Kritik,
Так как у тебя уже есть TListBox, то, строк, как я понимаю, не очень много.
Если поорядок следования строк неважен, то для удаления дублей в этом случае просто воспользоваться дополнительным TStringList.
В нем использовать свойства Sorted и Duplicates.
Например:

Код

var
  L: TStringList;
  i: Integer;
begin
  L := TStringList.Create;
  L.Sorted := True;
  L.Duplicates := dupIgnore;
  try
    for i := 0 to ListBox.Items.Count-1 do
    begin
      L.Add(ListBox.Items[i]);
    end;
    ListBox1.Items.Assign(L);
  finally
    L.Free;
  end;


Немного подумав, при необходимости, можно и порядок строк восстановить.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)