![]() |
|
|
|||||||
| Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
![]() |
|
|
Опции темы | Поиск в этой теме | Опции просмотра |
|
|
|
#1
|
|||
|
|||
|
Имеем:
Текстовый файла, в нем данные в формате Петров Петр группа: 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
|
||||
|
||||
|
Проще через TStringList разбить строку по пробелам и сравнить элементы.
Код:
sl.Delimiter := ' ';
sl.DelimitedText := S;
if (Register_Familiya.Text = sl[0]) and (Register_Gruppa.Text = sl[3]) then { зарегистрирован };lmikle: Bargest, скобАчки не забывай ![]() Последний раз редактировалось Bargest, 08.05.2017 в 19:59. |
|
#3
|
|||
|
|||
|
Можно еще примерно так:
Код:
if Pos(AnsiUpperCase(Register_Familiya.Text + ' группа: ' + Register_Gruppa.Text),AnsiUpperCase(S)) > 0 Then {зарегистрирован}ЗЫ. А вообще, хранить такие данные в текстовом файле как-то не айс. Либо нужно делать бинарный файл, либо БД, либо текстовый, но немного другого формата. Ну и пароль хранить в открытом виде - явный моветон ![]() |
|
#4
|
|||
|
|||
|
lmikle, я не могу сообразить, как это воткнуть в текущую конструкцию кода?
Я так понимаю, что S -это строка с данными, но ведь ее номер заранее неизвестен.. |
|
#5
|
|||
|
|||
|
S - это строка из файла. Тебе надо проверить все строки в файле.
Смысл кода - просто формируется частитчная строка тем же способом, что и для записи в файл (кроме пароля) и просто в каждой строке из файла ищется - не входит ли эта строка как подстрока. Если да, то такой пользователь уже есть. Ну и сделано, что бы искала без учета регистра, но это так, на всякий случай. |
|
#6
|
|||
|
|||
|
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; |