Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 08.05.2017, 10:45
Асяу Асяу вне форума
Прохожий
 
Регистрация: 08.05.2017
Сообщения: 7
Версия Delphi: RAD Studio 10.1
Репутация: 10
Вопрос Считывание и проверка строки

Имеем:
Текстовый файла, в нем данные в формате
Петров Петр группа: 111 1
ФИО-Группа№ Пароль
Данный фал хранит в себе данные для авторизации и сохраняет новые при регистрации.
Задача:
Проверить, имеются ли в файле введенные данные.
Это успешно реализовано так:
Код:
LogAndGruppa_Regis:=Register_Familiya.Text+'   группа: '+Register_Gruppa.Text+'     '+Register_Password.Text;
  for iterIntCount:=0 to SaveTxt1.Count -1 do
      begin
        if LogAndGruppa_Regis = SaveTxt1[iterIntCount] then
          begin
          Application.MessageBox('Вы уже зарегистрированы!'+#13#10+'Вы можете авторизоваться!', 'Внимание!',+ MB_ICONWARNING);
          Exit;
          end
          end;
             if (Register_Familiya.Text = '') or (Register_Gruppa.Text = '') or (Register_Password.Text = '') then
               begin
               Application.MessageBox('Вход невозможен!'+#13#10+'Заполните все поля', 'Внимание!',+ MB_ICONWARNING);
               end else
                  begin
                  Registr_Familiya_P:=Trim(Register_Familiya.Text);
                  Registr_Gruppa_P:=Trim(Register_Gruppa.Text);
                  Registr_Password_P:=Trim(Register_Password.Text);
                  SaveTxt1.Add(Register_Familiya.Text+'   группа: '+Register_Gruppa.Text+'     '+Register_Password.Text);
                  SaveTxt1.Add('______________________________________________________');
                  SaveTxt1.Add(' ');
                  SaveTxt1.SaveToFile(ExtractFilePath(Application.ExeName)+'lgn.tnt');
                  Register_Familiya.clear;
                  Register_Gruppa.clear;
                  Register_Password.clear;
                  Application.MessageBox('Регистрация успешно завершена!'+#13#10+'Вы можете авторизоваться', 'Внимание!',+ MB_ICONASTERISK);
                  end;
  end;
НО! Код целиком вытаскивает строку, поэтому, если вписать в ЕДИТы данные как в строке - скажет, что такой юзер уже есть, а вот если поменять пароль - нет.
Нужно реализовать проверку по Фамилии Имени и группе, отсекая пароль.
Т.е. Если в какой то строке подряд идут данные ФИО Группа и они совпадают с введенным в ЕДИТы - сказать, что юзер уже есть.

Битые сутки над этим бьюсь, сил уже нет!
Как можно реализовать такое в рамках данного кода?
Ответить с цитированием
  #2  
Старый 08.05.2017, 18:03
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

Проще через TStringList разбить строку по пробелам и сравнить элементы.
Код:
sl.Delimiter     := ' ';
sl.DelimitedText := S;

if (Register_Familiya.Text = sl[0]) and (Register_Gruppa.Text = sl[3]) then  { зарегистрирован };

lmikle: Bargest, скобАчки не забывай
__________________
jmp $ ; Happy End!
The Cake Is A Lie.

Последний раз редактировалось Bargest, 08.05.2017 в 19:59.
Ответить с цитированием
  #3  
Старый 08.05.2017, 19:08
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Можно еще примерно так:
Код:
if Pos(AnsiUpperCase(Register_Familiya.Text + ' группа: ' + Register_Gruppa.Text),AnsiUpperCase(S)) > 0 Then {зарегистрирован}
Тут не нужен доп. объект, просто ищем есть ли такая подстрока (без пароля).

ЗЫ. А вообще, хранить такие данные в текстовом файле как-то не айс. Либо нужно делать бинарный файл, либо БД, либо текстовый, но немного другого формата. Ну и пароль хранить в открытом виде - явный моветон
Ответить с цитированием
  #4  
Старый 09.05.2017, 15:26
Асяу Асяу вне форума
Прохожий
 
Регистрация: 08.05.2017
Сообщения: 7
Версия Delphi: RAD Studio 10.1
Репутация: 10
По умолчанию

lmikle, я не могу сообразить, как это воткнуть в текущую конструкцию кода?
Я так понимаю, что S -это строка с данными, но ведь ее номер заранее неизвестен..
Ответить с цитированием
  #5  
Старый 09.05.2017, 17:59
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,097
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

S - это строка из файла. Тебе надо проверить все строки в файле.
Смысл кода - просто формируется частитчная строка тем же способом, что и для записи в файл (кроме пароля) и просто в каждой строке из файла ищется - не входит ли эта строка как подстрока. Если да, то такой пользователь уже есть. Ну и сделано, что бы искала без учета регистра, но это так, на всякий случай.
Ответить с цитированием
  #6  
Старый 09.05.2017, 19:00
Асяу Асяу вне форума
Прохожий
 
Регистрация: 08.05.2017
Сообщения: 7
Версия Delphi: RAD Studio 10.1
Репутация: 10
По умолчанию

lmikle, я совсем новичок в этом деле..
Код:
procedure TFORM_LOGIN.Register_ButtonClick(Sender: TObject);
  var
  S:string;
  begin
  Load_From_File_Passw:=TStringList.Create;
  Load_From_File_Passw.LoadFromFile(ExtractFilePath(Application.ExeName)+'lgn.tnt');
  LogAndGruppa_Regis:=Register_Familiya.Text+'   группа: '+Register_Gruppa.Text+'     '+Register_Password.Text;
  for iterIntCount:=0 to Load_From_File_Passw.Count -1 do
      begin
      if Pos(AnsiUpperCase(Register_Familiya.Text + '   группа: ' + Register_Gruppa.Text),AnsiUpperCase(S)) > 0 Then
          begin
          Application.MessageBox('Вы уже зарегистрированы!'+#13#10+'Вы можете авторизоваться!', 'Внимание!',+ MB_ICONWARNING);
          Login_Familiya.Text:= Register_Familiya.text;
          Login_Gruppa.Text:= Register_Gruppa.text;
          Register_Familiya.clear;
          Register_Gruppa.clear;
          Register_Password.clear;
          Exit;
          end
          end;
             if (Register_Familiya.Text = '') or (Register_Gruppa.Text = '') or (Register_Password.Text = '') then
               begin
               Application.MessageBox('Вход невозможен!'+#13#10+'Заполните все поля', 'Внимание!',+ MB_ICONWARNING);
               end else
                  begin
                  Registr_Familiya_P:=Trim(Register_Familiya.Text);
                  Registr_Gruppa_P:=Trim(Register_Gruppa.Text);
                  Registr_Password_P:=Trim(Register_Password.Text);
                  Load_From_File_Passw.Add(Register_Familiya.Text+'   группа: '+Register_Gruppa.Text+'     '+Register_Password.Text);
                  Load_From_File_Passw.Add('______________________________________________________');
                  Load_From_File_Passw.Add(' ');
                  Load_From_File_Passw.SaveToFile(ExtractFilePath(Application.ExeName)+'lgn.tnt');
                  Login_Familiya.Text:= Register_Familiya.text;
                  Login_Gruppa.Text:= Register_Gruppa.text;
                  Register_Familiya.clear;
                  Register_Gruppa.clear;
                  Register_Password.clear;
                  Application.MessageBox('Регистрация успешно завершена!'+#13#10+'Вы можете авторизоваться', 'Внимание!',+ MB_ICONASTERISK);
                  end;
  end;
Вроде так пишу, а не работает - сразу регистрирует..
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра
Комбинированный вид Комбинированный вид

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 18:28.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025