![]() |
|
|
Регистрация | << Правила форума >> | 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, скобАчки не забывай ![]() jmp $ ; Happy End! The Cake Is A Lie. Последний раз редактировалось 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; |