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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 21.06.2008, 21:51   #1
Marsik
Форумчанин
 
Аватар для Marsik
 
Регистрация: 23.10.2007
Сообщений: 275
Злость Поиск в мемо

Я ищу в мемо таким способом:
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
i:integer;
begin
for i=0 to memo1.Lines.Count-1 do
if memo1.Lines.Strings[i]='Марсель' then
showmessage('Найдено')
else
showmessage('типа нету');
end;
и как всегда выходят ошибки:
Цитата:
[Ошибка] Unit1.pas(31): For loop control variable must be simple local variable
[Ошибка] Unit1.pas(31): Incompatible types: 'Boolean' and 'Integer'
[Ошибка] Unit1.pas(35): Incompatible types: 'Boolean' and 'procedure, untyped pointer or untyped parameter'
[Фатальная ошибка] Project1.dpr(5): Could not compile used unit 'Unit1.pas'
смотрел в хелпе, там что то вроде
Цитата:
This error message is given when the control variable of a for statement is not a simple variable (but a component of a record, for instance), or if it is not local to the procedure containing the for statement.

For backward compatibility reasons, it is legal to use a global variable as the control variable - the compiler gives a warning in this case. Note that using a local variable will also generate more efficient code.
..одним словом ничего не понял. С чем связана данная ошибка, и что Мне нужно предпринять чтобы ее исправить?
http://otlishnik.com/ чудесный портал для всех кто учится. Рефераты, каталоГ вузов, решебники, справочники, ЕГЭ! Welcome
Marsik вне форума Ответить с цитированием
Старый 21.06.2008, 22:08   #2
Карась
Участник клуба
 
Аватар для Карась
 
Регистрация: 26.10.2007
Сообщений: 1,244
По умолчанию

Первое что бросилось в глаза это

Код:
for i=0 to memo1.Lines.Count-1 do.....
Цитата:
[Ошибка] Unit1.pas(31): For loop control variable must be simple local variable
Сообщается что переменая i обьявлена глобально и судя по всему может произойти путаница если её будут использовать одновременно разные циклы или чтото ещё..
Умом Россию не понять, пока не выпито ноль пять,
А если выпито ноль пять всё делом кажется не хитрым,
Попытка глубже понимать уже попахивает литром...
Карась вне форума Ответить с цитированием
Старый 21.06.2008, 22:14   #3
_Alise_
 
Аватар для _Alise_
 
Регистрация: 03.06.2008
Сообщений: 6
По умолчанию

Попробуй так:

begin
for i:=0 to memo1.Lines.Count-1 do
if pos('Марсель',form1.memo1.Lines.Str ings[i])<>0 then
showmessage('найдено')
else
showmessage('нет');

А что сообщение должно выходить после каждой строчки?
_Alise_ вне форума Ответить с цитированием
Старый 21.06.2008, 22:46   #4
Marsik
Форумчанин
 
Аватар для Marsik
 
Регистрация: 23.10.2007
Сообщений: 275
По умолчанию

_Alise_ спасибо дружище ....но все же помоему Я неправильно сформулировал вопрос. Мне ведь нужно вот что: на мемо1.линес.стринГ есть несколько одинаковых записей, и встает вопрос как их вычислсить а затем удалить??? Так сказать убрать дубликаты
http://otlishnik.com/ чудесный портал для всех кто учится. Рефераты, каталоГ вузов, решебники, справочники, ЕГЭ! Welcome
Marsik вне форума Ответить с цитированием
Старый 21.06.2008, 22:59   #5
_Alise_
 
Аватар для _Alise_
 
Регистрация: 03.06.2008
Сообщений: 6
По умолчанию

Я ничего не понимаю. Какое задание вообще?
_Alise_ вне форума Ответить с цитированием
Старый 21.06.2008, 23:18   #6
Marsik
Форумчанин
 
Аватар для Marsik
 
Регистрация: 23.10.2007
Сообщений: 275
По умолчанию

есть мемо(на скрине видно). В мемо расположены построчно цифры. И нужно если цифры повторяются то один из них удалить..в общем на скрине все ясно. ...авот как это программно осуществить нет
Изображения
Тип файла: jpg 1.jpg (13.9 Кб, 129 просмотров)
http://otlishnik.com/ чудесный портал для всех кто учится. Рефераты, каталоГ вузов, решебники, справочники, ЕГЭ! Welcome
Marsik вне форума Ответить с цитированием
Старый 21.06.2008, 23:35   #7
mutabor
Телепат с дипломом
Старожил
 
Аватар для mutabor
 
Регистрация: 10.06.2007
Сообщений: 4,929
По умолчанию

Я небольшой спец по эффективным алгоритмам, но сразу вижу два:

1. Записывать все прочтенные строки в массив, перед записью очередного элемента сканировать массив на повтор, если повтор - в массив не пишем а из файла удаляем.

2. Сначала отсортировать строки. Затем создаем одну переменную, в нее читаем строку из файла, затем читаем следующую строку, если она равна той что в переменной, удаляем строку из файла, перед этим записав ее в переменную, если не равна все равно пишем ее в переменную.
The future is not a tablet with a 9" screen no more than the future was a 9" black & white screen in a box. It’s the paradigm that survives. (Kroc Camen)
Проверь себя! Онлайн тестирование | Мой блог
mutabor вне форума Ответить с цитированием
Старый 22.06.2008, 08:06   #8
Marsik
Форумчанин
 
Аватар для Marsik
 
Регистрация: 23.10.2007
Сообщений: 275
Злость

Цитата:
Сообщение от mutabor Посмотреть сообщение
сканировать массив на повтор, если повтор - в массив не пишем а из файла удаляем.
А как это осуществить?
http://otlishnik.com/ чудесный портал для всех кто учится. Рефераты, каталоГ вузов, решебники, справочники, ЕГЭ! Welcome
Marsik вне форума Ответить с цитированием
Старый 22.06.2008, 10:07   #9
Marsik
Форумчанин
 
Аватар для Marsik
 
Регистрация: 23.10.2007
Сообщений: 275
По умолчанию

эх....великая весчь Гугль...Так как Моя задача состояла втом, чтобы из мемо удалить дубликаты, то вот код с помощью которого это легко сделать:
Код:
procedure TForm1.Button3Click(Sender: TObject);
var
ls: tstringlist;
g: integer;
begin
ls:=tstringlist.Create;
ls.Sorted:= true;
ls.Duplicates:= dupignore;
try
 for g:=0 to memo1.Lines.Count-1 do
 ls.Add(memo1.Lines[g]);
 memo1.Lines.Assign(ls);
 finally
 ls.Free;
 end;
end;
может кому нить пригодится
http://otlishnik.com/ чудесный портал для всех кто учится. Рефераты, каталоГ вузов, решебники, справочники, ЕГЭ! Welcome
Marsik вне форума Ответить с цитированием
Старый 22.06.2008, 10:08   #10
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я бы сделал так:
Код:
var TS : TStringList;
  i : integer;
begin
  TS := TStringList.Create;
  for i:=0 to memo1.Lines.Count-1 do
   if TS.IndexOf(memo1.Lines.Strings[i])<0 then
       TS.Add(memo1.Lines.Strings[i]);
  Memo1.Text := TS.Text;
  FreeAndNil(TS)
end;
Serge_Bliznykov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск слова в поле типа МЕМО БД PARADOX KAZAKH БД в Delphi 2 05.06.2008 07:22
ЗАмена в мемо Drain Общие вопросы Delphi 2 29.01.2008 16:22
мемо ben95 Общие вопросы Delphi 1 29.01.2008 10:10
Строки в Мемо BETONOMESHALKA Общие вопросы Delphi 6 17.11.2007 02:01