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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 18.11.2010, 00:00   #1
Euforia_PZAS09_1
Пользователь
 
Регистрация: 18.10.2009
Сообщений: 21
По умолчанию сравнение содержимого Memo и Edit

текст из файла считывается в мемо1. его нужно набрать в эдит1. вводить весь текст не обязательно, нужно посимвольно сравнить содержимое мемо1 и эдит1 и подсчитать количество не правильно введенных символов.

миллионный вариант кода((. при компиляции возникают такие ошибки:
[Warning] Unit1.pas(110): Variable 'j' might not have been initialized
[Warning] Unit1.pas(110): Variable 'i' might not have been initialized
при запуске:Project Game.exe raised exception class EAccess violation with message 'EAccess violation at address 00469C18 in module 'Game.exe'. Read of address FFFFFFFF'.

подскажите, пожалуйста, как правильно реализовать сравнение

Код:
procedure TGameForm.Edit1Change(Sender: TObject);
var i,j:integer;
begin
EdStr:=Edit1.Text;
for i:=0 to Memo1.Lines.Count-1 do
begin
if Ord(Memo1.Lines[i][j])<>Ord(EdStr[i]) then
inc(Error);//Error - глобальная переменная
end;
Euforia_PZAS09_1 вне форума Ответить с цитированием
Старый 18.11.2010, 01:06   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Код:
uses Math;
...
procedure TForm1.Edit1Change(Sender: TObject);
var
  i : integer;
  EdStr, MStr : string;
begin
  EdStr := Edit1.Text;
  MStr := StringReplace(Memo1.Lines.Text, #13#10, ' ', [rfReplaceAll]);
  for I := 1 to Min(Length(MStr), Length(EdStr)) do
    if MStr[I] <> EdStr[I] then
      Inc(Error);
end;
Прик вне форума Ответить с цитированием
Старый 18.11.2010, 01:07   #3
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Варнинги - это не ошибки, а предупреждения.
Вам чистым аглицким языком компилятор пишет, что переменные I,J могут быть непроинициализированы.
Что, кстати, у вас и происходит... Какое значение имеет переменная J ?
И перестаньте вы использовать в качестве имен переменных ключевые слова...
Неужели фантазии не хватает придумать нечто отличное от "Error"?
mihali4 вне форума Ответить с цитированием
Старый 18.11.2010, 08:45   #4
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Да вы знаете, нет такого ключевого слова Error, если под "ключевыми" понимаются зарезервированные слова (reserved words) в Delphi.
Прик вне форума Ответить с цитированием
Старый 18.11.2010, 09:49   #5
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

А если заглянуть в штатный хэлп ?
Например :
Цитата:
The following code opens MediaPlayer1. If an exception occurs, a message window displays the error number and string.

procedure TForm1.BitBtn1Click(Sender: TObject);

var
MyErrorString: String;
begin
try
MediaPlayer1.Open;
except
MyErrorString := 'ErrorCode: ' + IntToStr(Error) + #13#10;
MessageDlg(MyErrorString + MediaPlayer1.ErrorMessage, mtError, [mbOk], 0);
end;

end;
Или просто взять в хэлпе справку по слову "Error" ?
mihali4 вне форума Ответить с цитированием
Старый 18.11.2010, 09:55   #6
Euforia_PZAS09_1
Пользователь
 
Регистрация: 18.10.2009
Сообщений: 21
По умолчанию

Цитата:
Сообщение от mihali4 Посмотреть сообщение
И перестаньте вы использовать в качестве имен переменных ключевые слова...
Неужели фантазии не хватает придумать нечто отличное от "Error"?
зачем что-то другое? если там, действительно, хранится количество ошибок.а так пожалуйста:AErrCount, AErrorSum, AError...нужны будут ещё имена переменных - пишите.


и я вас не с "Error" прошу помочь, то мелочи.

Последний раз редактировалось Euforia_PZAS09_1; 18.11.2010 в 09:59.
Euforia_PZAS09_1 вне форума Ответить с цитированием
Старый 18.11.2010, 10:17   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Euforia_PZAS09_1
и я вас не с "Error" прошу помочь
то, что Вы написали - в корне неверно. "в корне" - это значит на уровне алгоритма...

Тогда давайте рассмотрим поподробнее на примерах, что Вы хотите получить.
Всего пара маленьких примеров. Вы считаете количество неправильно введённых символов (и объясняете, как подсчитали) и мы с Вами вместе придумываем алгоритм (+ реализация)
пример 1.
в Edit: Молоко
в Memo (3 строки):
Лом
Бом
Дом

Сколько ошибок?

Пример 2.
в Edit: паап пишетт стену
в Memo (2 строки):
Мама Пишет Письмо
Папа Красит Стену

Сколько ошибок?

можете собственные примеры привести.. Это только лучше будет. Ведь Вам, как разработчику, должны быть лучше известны нюансы и граничные проверки...

просто хочется понять, что Вам собственно нужно...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 18.11.2010, 10:27   #8
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

mihali4, просто интересно ваше мнение о причинах "запрещения" использования слова Error в качестве переменной в своих приложениях.
В зарезервированных словах оно отсутствует. Следовательно, компилятор разрешит его применение. Если это слово используется внутри какого-то класса, то тоже не криминал, если его применять как переменную вне этих объектов - мало ли у меня классов с одинаковыми наименованиями полей.
Опять же, что за понятие "ключевое слово" в Delphi? Может мы с вами имеем ввиду разные вещи?

Не думаю, что спонтанно возникшая дискуссия - словофлудие. Проблема видимости переменных достаточно принципиальная, особенно для новичков.
Может быть слепить из нее другую тему? (виноват, до оффтопа свалился)

Последний раз редактировалось Прик; 18.11.2010 в 10:32.
Прик вне форума Ответить с цитированием
Старый 18.11.2010, 12:09   #9
Euforia_PZAS09_1
Пользователь
 
Регистрация: 18.10.2009
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
то, что Вы написали - в корне неверно
простите, я просто уже не в состоянии что-то объяснять. если вы думаете, что я просто сижу и жду пока кто-то напишет правильный код, то вы очень ошибаетесь. я на это даже не смею надеяться.

вот примерно как-то так:
Код:
procedure TGameForm.Edit1Change(Sender: TObject);
var i,j,len:integer;
begin
EdStr:=Edit1.Text;
for i:=0 to ? do //вот тут понятия не имею до скольки. возможно, //Memo1.Lines.Count-1
begin
    len:=length(Memo1.Lines[i]);
    if length(EdStr)<len then len:=length(EdStr);
    for j:=1 to len do
         if (Memo1.Lines[i][j])<>(EdStr[j]) then inc(AError);
 end;
правда тогда не понятно что хранит AError

3. Не флудить. Флудом (пустой болтовней) считается все, не относящееся к теме. Здесь не чат, а форум серьезно увлеченных людей.
К флуду относится также:
- необоснованное (не требующееся по смыслу) цитирование предыдущего поста;
- оверквотинг (избыточное цитирование). При цитировании имеет смысл оставлять в цитате только тот текст, который имеет непосредственное отношение к вашему ответу.
- размещение своих постов подряд друг за другом - пользуйтесь кнопкой "Правка" для изменения своего сообщения.
За флуд - автор поста получит нарушение №1 - "Флуд" и 2 очка штрафа.

Последний раз редактировалось mihali4; 18.11.2010 в 12:39.
Euforia_PZAS09_1 вне форума Ответить с цитированием
Старый 18.11.2010, 13:11   #10
Euforia_PZAS09_1
Пользователь
 
Регистрация: 18.10.2009
Сообщений: 21
По умолчанию

благодарю за помощь, надеюсь, вам помогают лучше.
Euforia_PZAS09_1 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение edit and dbgrid grafgrial Общие вопросы Delphi 9 09.10.2010 16:11
Сравнение значения Edit с числом ? kta87 Общие вопросы Delphi 5 06.03.2010 22:03
проверка содержимого поля Edit KaimNotark Общие вопросы Delphi 6 16.02.2010 07:45
Из Edit в Memo HaBiBi Общие вопросы Delphi 2 13.06.2009 15:30
изменение содержимого поля edit truel Win Api 1 21.04.2008 12:31