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

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

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

Восстановить пароль

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

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Нет наработок или кода, если нужно готовое решение - создайте тему в разделе Фриланс и оплатите работу.
Название темы включает слова - "Помогите", "Нужна помощь", "Срочно", "Пожалуйста".
Название темы слишком короткое или не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте правила и заново правильно создайте тему.
 
Опции темы Поиск в этой теме
Старый 12.11.2011, 20:08   #1
Kapitan4ik
Пользователь
 
Регистрация: 25.10.2011
Сообщений: 47
По умолчанию Загрузка текстовика,сравнение с моим условием

Такой вопрос. Нужно чтобы грузился текстовик, считывалось его содержание, сравнивалось с моим условием, и если всё так, то выводилось сообщение. Вот мой код.

Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 st:string;
begin
st:='123456789';
Accounts:=TstringList.Create;
OpenDialog1.InitialDir := ExtractFilePath(Application.ExeName);
if OpenDialog1.Execute then
begin
Accounts.Clear;
Accounts.LoadFromFile(OpenDialog1.FileName);
Memo1.Text := Accounts.Text;
end;
if Memo1.Text = st then
showmessage('Accepted');
end;
Что я пытался добиться:
Загрузка текста из текстовика
Вывод содержания в Memo1
Сравнение Memo1.Text и моей переменной.
Попытка вывода сообщения.


Но соль в том, что сообщение не выводится. Текстовик грузится, содержание идет в Мемо, но сообщения нету.
Помогите найти ошибочку.
Заранее спасибо
Kapitan4ik вне форума
Старый 12.11.2011, 21:26   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Код:
//Memo1.Text := Accounts.Text;
Memo1.Lines.Text := Accounts.Text; //только зачем дублировать, если можно сравнить с Accounts.Text?
//или загрузить сразу в мемо:
//Memo1.Lines.LoadFromFile(OpenDialog1.FileName);

//if Memo1.Text = st then
if Memo1.Lines.Text = st then
Прик вне форума
Старый 12.11.2011, 21:39   #3
Kapitan4ik
Пользователь
 
Регистрация: 25.10.2011
Сообщений: 47
По умолчанию

вот что получилось, но всёравно при открытии текстовика с нужными строками, ничего не происходит
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
 st:string;
begin
st:='123456789';
Accounts:=TstringList.Create;
OpenDialog1.InitialDir := ExtractFilePath(Application.ExeName);
if OpenDialog1.Execute then
begin
Accounts.Clear;
Accounts.LoadFromFile(OpenDialog1.FileName);
Memo1.Lines.Text := Accounts.Text;
end;
if Memo1.Lines.Text = st then
begin
showmessage('Accepted');
end;
end;
Kapitan4ik вне форума
Старый 12.11.2011, 21:44   #4
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Цитата:
Сообщение от Kapitan4ik Посмотреть сообщение
но всёравно при открытии текстовика с нужными строками, ничего не происходит
Это "ничего", видимо, связано с отсутствием сообщения?
Если это так, то причина только одна: условие
Код:
 if Memo1.Lines.Text = st then
не выполняется
Прик вне форума
Старый 12.11.2011, 22:21   #5
Kapitan4ik
Пользователь
 
Регистрация: 25.10.2011
Сообщений: 47
По умолчанию

так из за чего оно не может выполнятся?)
Kapitan4ik вне форума
Старый 12.11.2011, 22:27   #6
3D Hunter
Сумрачная тень
Форумчанин
 
Аватар для 3D Hunter
 
Регистрация: 05.03.2009
Сообщений: 689
По умолчанию

Рабочий код:
Код:
procedure TForm2.Button1Click(Sender: TObject);
var
  st: String;
  Accounts:TStringList;
begin
  try
    st := '123456789';
    Accounts := TStringList.Create;
    if OpenDialog1.Execute then
    begin
      Accounts.LoadFromFile(OpenDialog1.FileName);
      Memo1.Lines.Text := Accounts.Text;
      if StringReplace(Memo1.Lines.Text,#13#10,'',[rfReplaceAll]) = st then
      begin
        showmessage('Accepted');
      end;
    end;
  finally
    FreeAndNil(Accounts);
  end;
end;
Смысл в том, что при присвоении текста классу TStrings и всем его наследникам автоматом добавляется в конец завершающий символ-разделитель строк. По умолчанию это пара символов #13#10. Вот поэтому мы и исключаем их функцией StringReplace, заменяя на пустые символы (удаляя из текста).
Вообще в таком случае правильнее организовать поиск по циклу совпадения нужной строки, например:
Код:
...
      for i:=0 to Memo1.Lines.Count-1 do
        if Memo1.Lines[i]=st then
        begin
          showmessage('Accepted');
          Break;
        end;
...
...
"ковыряю изнутри" (с)
3D Hunter вне форума
Старый 12.11.2011, 22:30   #7
mihali4
*
Старожил
 
Регистрация: 22.11.2006
Сообщений: 9,201
По умолчанию

Цитата:
Сообщение от Kapitan4ik Посмотреть сообщение
Текстовик грузится, содержание идет в Мемо, но сообщения нету.
Чтобы было понятнее, оформил не кодом (код не дает подкрасить).
Цитата:
if Memo1.Lines.Text = st then
showmessage('Accepted') else
showmessage('Not Accepted')
;

Последний раз редактировалось mihali4; 13.11.2011 в 00:08.
mihali4 вне форума
Старый 12.11.2011, 22:51   #8
Kapitan4ik
Пользователь
 
Регистрация: 25.10.2011
Сообщений: 47
По умолчанию

огромное спасибо всем, всё работает) Офайте темку
Kapitan4ik вне форума
Закрытая тема


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Проблема с условием FanRa3 Общие вопросы Delphi 2 04.11.2010 14:44
Выгрузка из текстовика mephist Microsoft Office Excel 2 06.08.2009 17:25
Помогите с Условием memoze Microsoft Office Excel 7 22.02.2008 15:23