Модераторы: Snowy, MetalFan, bems, Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> ComboBox, Удаление повторяющихся элементов 
:(
    Опции темы
sacha1m
  Дата 25.12.2005, 13:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 22.6.2005
Где: Нижний Новгород

Репутация: нет
Всего: нет



Уважаемые программысты, подкорректируйте пожалуйста код, Что-бы провторяющиеся значения ComboBox'ов были ликвидированы. Этот код заполняет на форме ComboBox'ы, путем выдираия текста из текстового файла протокола программы. Значение берется из строки содеращей " - начало".

Код

procedure TForm1.SpeedButton1Click(Sender: TObject);
var
FamName,dat: string;
s:string[100];
nom,dlin:integer;

begin


// Заполняем ComboBox1  ComboBox2
AssignFile(f,ExtractFilePath(Application.ExeName)+'Protocol.txt');
Reset(f);
while not eof(f) do
 begin
  Readln(f,s);
  dlin:=length(s);
  nom:=pos(' - начало',s);
  FamName:=copy(s,1,dlin-36);
  dat:=copy(s,nom-19,10);
  if nom<>0 then begin


                 Form2.ComboBox2.Items.Add(dat);
                 Form2.ComboBox1.Items.Add(FamName);
                 nom:=0;


Это сообщение отредактировал(а) Girder - 26.12.2005, 10:27
PM MAIL ICQ   Вверх
Albinos_x
Дата 25.12.2005, 13:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 2
Всего: 108



Цитата(sacha1m @ 25.12.2005, 13:29)

AssignFile(f,ExtractFilePath(Application.ExeName)+'Protocol.txt');
Reset(f);
while not eof(f) do
begin
Readln(f,s);
dlin:=length(s);
nom:=pos(' - начало',s);
FamName:=copy(s,1,dlin-36);
dat:=copy(s,nom-19,10);
if nom<>0 then begin


Form2.ComboBox2.Items.Add(dat);
Form2.ComboBox1.Items.Add(FamName);

может где-то так:
Код
...
function Povt(var s:string; SL:TStringList):boolean;
var i:integer;
begin
for i:=0 to (SL.Count-1) do
   begin
   if pos(s,SL.Strings[i])<>0 then
      begin
      Result:=false;
      exit;
      end;
   end;
SL.Add(S);
Result:=true;
end;
...
...
var  SL : TStringList;
       S,FamName,dat : string;
       f:TextFile;
....    
begin
...
SL:=TStringList.Create;
SL.Clear;  
AssignFile(f,ExtractFilePath(Application.ExeName)+'Protocol.txt');
Reset(f);
while not eof(f) do
    begin
    Readln(f,s);
    dlin:=length(s);
    nom:=pos(' - начало',s);
    if nom<>0 then 
       begin
       FamName:=copy(s,1,dlin-36);
       dat:=copy(s,nom-19,10);
       if Povt(s,SL) then
          begin
          Form2.ComboBox2.Items.Add(dat);
          Form2.ComboBox1.Items.Add(FamName);
          end;
       end;
    end;
CloseFile(f);
SL.Free;
...
end;



Это сообщение отредактировал(а) Albinos_x - 25.12.2005, 18:42


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Zero
Дата 25.12.2005, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 2169
Регистрация: 23.10.2004
Где: Россия, г. Рязань

Репутация: нет
Всего: 24



Создать динамический массив, в нём перед вводом проверять каждое слово, если нововводимого нету, то ввести нововводимое слово из текстового файла.
Потом перенести массив в комбобокс.
PM MAIL ICQ   Вверх
Rrader
Дата 25.12.2005, 14:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Inspired =)
***


Профиль
Группа: Экс. модератор
Сообщений: 1535
Регистрация: 7.5.2005

Репутация: 18
Всего: 191



Цитата

function Povt(var s:string; SL:TStringList):boolean;

Код

TStringList.IndexOf(S) = -1;



--------------------
Let's do this quickly!
Rest in peace, Vit!
PM MAIL Skype   Вверх
Albinos_x
Дата 25.12.2005, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 2
Всего: 108



Цитата
function Povt(var s:string; SL:TStringList):boolean;


код Pascal/Delphi
1:
TStringList.IndexOf(S) = -1;

не догнал, чего этим хотел сказать, если ошибка, то добавь дополнительную проверку:
Код

...    
function Povt(var s:string; SL:TStringList):boolean;    
var i:integer;
    col:integer;    
begin    
col:=SL.Count;
if col>0 then
   begin
   for i:=0 to (col-1) do    
      begin    
      if pos(s,SL.Strings[i])<>0 then    
         begin    
         Result:=false;    
         exit;    
         end;    
      end;
   end;    
SL.Add(S);    
Result:=true;    
end;    
...

Добавлено @ 14:28
всё догнал... прошу прощения... невнимательность... smile

Это сообщение отредактировал(а) Albinos_x - 25.12.2005, 18:43


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
sacha1m
Дата 25.12.2005, 17:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 22.6.2005
Где: Нижний Новгород

Репутация: нет
Всего: нет



Прошу прошенья за некоторую тупость, но компилятор сообщает в месте
Цитата

SL.Strings.Add(S);


Цитата

бла-бла ... '['  expected but '.' found

я пробовал поставлять кв. скобку, но что-то не получается,
просто не сталкивался с такими операторами, не пойму в чем дело.?


Цитата

function Povt(var s:string; SL:TStringList):boolean;
...
...
Result:=true;
end;

я так понял это вставлять в любое место?

Это сообщение отредактировал(а) sacha1m - 25.12.2005, 17:37
PM MAIL ICQ   Вверх
Albinos_x
Дата 25.12.2005, 18:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 2
Всего: 108



Цитата(sacha1m @ 25.12.2005, 17:02)
я пробовал поставлять кв. скобку, но что-то не получается,
просто не сталкивался с такими операторами, не пойму в чем дело.?

тут опечатка, нада так:
Код

SL.Add(S);


Цитата(sacha1m @ 25.12.2005, 17:02)
я так понял это вставлять в любое место?

если не описываешь, то до использования иначе будет говорить что не знает такую ф-ю
если описываешь, то в любом...
Добавлено @ 18:43
код исправил...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
sacha1m
Дата 25.12.2005, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 22.6.2005
Где: Нижний Новгород

Репутация: нет
Всего: нет



Странно , что-то все равно повторяющиеся записи не удалаются.

Глянте пожалуйста
програмку
, 130кб,
там в Unit1.pas находится исправления с данной темой, может я что не так сделал?

з.ы. Правда я в Delphi2 делал , но там только Unit1.pas надо править
если увидете ошибку , киньте пожалуйста на
мыло
PM MAIL ICQ   Вверх
Albinos_x
Дата 25.12.2005, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 2
Всего: 108



у меня ничего не качается... кидай мне на мыло [///]

Это сообщение отредактировал(а) Albinos_x - 25.12.2005, 20:34


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
sacha1m
Дата 25.12.2005, 20:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 22.6.2005
Где: Нижний Новгород

Репутация: нет
Всего: нет



Заранее Спасибо!
послал.

странно, сам 10 мин назад качал со своего сайта , а сечас сам скачать не могу
PM MAIL ICQ   Вверх
sacha1m
Дата 25.12.2005, 21:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 22.6.2005
Где: Нижний Новгород

Репутация: нет
Всего: нет



ну как?
PM MAIL ICQ   Вверх
Albinos_x
Дата 25.12.2005, 21:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 2
Всего: 108



разобрался... в первом коде мы сравнивали всю строку из файла, а у тебя в файле в принципе не может быть одинаковых строк, поэтому фильтрации не происходило... плюс к этому у тебя есь в коде небольшой глюк и одна ненужная строчка... привожу код:
Код
...
function Povt(famname:string;var SL:TStringList):boolean;
var i:integer;
    col:integer;
begin
col:=SL.Count;
if col>0 then    
   begin
   for i:=0 to (col-1) do
      begin
      if pos(famname,SL.Strings[i])<>0 then
         begin
         Result:=false;
         exit;
         end;
      end;
   end;
SL.Add(famname);
Result:=true;
end;

procedure TForm1.SpeedButton1Click(Sender: TObject);
var  SL : TStringList;    
       S,FamName,dat : string;    
       f:TextFile;
     nom,dlin:integer;

begin
// çàïèñü â ôàèë î íà÷àëå ñåàíñà
AssignFile(f,ExtractFilePath(Application.ExeName)+'Protocol.txt');
Append(f);  // îòêðûâàåì ôàéë äëÿ äîçàïèñè
s:=TimeToStr(time);
if length(s)<>8 then
   s:='0'+s;
writeln(f,Edit1.Text+' '+Edit3.Text+' '+s+' - íà÷àëî ñåàíñà');
CloseFile(f);
SL:=TStringList.Create;
SL.Clear;
Reset(f);
while not eof(f) do
    begin
    Readln(f,s);
    dlin:=length(s);
    nom:=pos(' - íà÷àëî',s);
    if nom<>0 then
       begin
       FamName:=copy(s,1,dlin-36);
       dat:=copy(s,nom-19,10);
       if Povt(famName,SL) then
          begin
          Form2.ComboBox1.Items.Add(FamName);
          end;
       if Povt(dat,SL) then
          begin
          Form2.ComboBox2.Items.Add(dat);
          end;
       end;
    end;
CloseFile(f);
SL.Free;
Form2.ShowModal;
end;
...

это работает без проблем... что исправлено:
Цитата
      begin
      FamName:=copy(s,1,dlin-36);
      dat:=copy(s,nom-19,10);
      if Povt(s,SL) then
          begin
          Form2.ComboBox2.Items.Add(dat);
          Form2.ComboBox1.Items.Add(FamName);
          end;
      end;

заменено на
Код

    if nom<>0 then
       begin
       FamName:=copy(s,1,dlin-36);
       dat:=copy(s,nom-19,10);
       if Povt(famName,SL) then
          begin
          Form2.ComboBox1.Items.Add(FamName);
          end;
       if Povt(dat,SL) then
          begin
          Form2.ComboBox2.Items.Add(dat);
          end;
       end;

убрана вторая строка:
Код

AssignFile(f,ExtractFilePath(Application.ExeName)+'Protocol.txt');

и добавлено(исправлено:
Код

if length(s)<>8 then
   s:='0'+s;
writeln(f,Edit1.Text+' '+Edit3.Text+' '+s+' - íà÷àëî ñåàíñà');

т.к. в 0-9 часов получается строка на один символ меньше (к примеру 0:00:01) следовательно в комбобокс у тебя попадало " 25.12.200" это добавление это исправляет...
Добавлено @ 21:29
щяс на мыло скину...


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
sacha1m
Дата 25.12.2005, 22:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 30
Регистрация: 22.6.2005
Где: Нижний Новгород

Репутация: нет
Всего: нет



Albinos_x
Вам ГИГАНСКОЕ спасибо! Расцеловал бы!!!, (в хорошем смысле слова)
PM MAIL ICQ   Вверх
Albinos_x
Дата 25.12.2005, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 2
Всего: 108



Рад был помочь smile


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
malor
Дата 23.5.2007, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 632
Регистрация: 17.11.2006

Репутация: нет
Всего: нет



Как можно очистить ComboBox от всех строк в нем, каким методом?
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Для новичков"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.1111 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.