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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2014, 13:19   #1
Taner
Пользователь
 
Регистрация: 05.04.2014
Сообщений: 54
По умолчанию Поиск и замена заданной строки в тексте

В программе есть возможность создавать пользователя, при этом стандартный пароль ему дается "1234", надо сделать так чтобы при первом его заходе в систему ему вылезало окошко с просьбой изменить пароль, не знаю как найти и заменить пароль в текстовом файле.
unit Unit1;

Код:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
 ---------------------------
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  i: Integer;
  fl: TextFile;
  Log, Pass, mText: string;
  
implementation

uses Unit2, Unit6ChangePass;

 var
   SecR: string;
{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
  f: TextFile;
begin
  AssignFile(f, 'User.txt');
  Reset(f);
  while not Eof(f) do
   begin
    Readln(f, mText);
    Log:= Copy(mText, 1, Pos(' ', mText) - 1);
    Delete(mText, 1, Pos(' ', mText));
    Pass:= Copy(mText, 1, Pos(' ', mText) - 1);
    Delete(mText, 1, Pos(' ', mText));
    SecR:= Copy(mText, 1, Length(mText));
    if (Edit1.Text = Log) and (Edit2.Text = Pass) then
     begin
//-----------Проверка стандартный ли пароль
       if (Pass = '1234') then
        begin
         Form1.Hide;
         Form6.Show;
        end;
//--------------------------------------------
----------------------------------------------
   end;
----------------------------------------------
  CloseFile(f);
end;

end.
Код:
unit Unit6ChangePass;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm6 = class(TForm)
    Edit1: TEdit;
    Label1: TLabel;
    Button1: TButton;
    Button2: TButton;
    CheckBox1: TCheckBox;
    procedure Button1Click(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form6: TForm6;

implementation

uses Unit1, Unit2;

var
  fl: TextFile;
  
{$R *.dfm}

procedure TForm6.Button1Click(Sender: TObject);
var
  str, str1, mText, Log3, Pass3, SecR3: string;
  f2, f: TextFile;
  f1: TStringList;
  i: integer;
begin
  AssignFile(f2, '1.txt');//1.txt Словарь
  Reset(f2);
  if (Length(Edit1.Text) < 6) then
   begin
     ShowMessage('длина пароля > 6 символов!');
     Exit;
   end;
  while not Eof(f2) do
   begin
     Readln(f2 , str);
     if str = Edit1.Text then
      begin
        ShowMessage('пароль = слову из словаря');
        CloseFile(f2);
        Exit;
      end;
   end;
  f1:= TStringList.Create;
  f1.LoadFromFile('User.txt');
  for i:= f1.Count-1 downto 0 do
   begin
//---------------Вот тут я попробовал заменить пароль
    if Pos(Log3, f1.Strings[i]) > 0 then
     begin
       str1:= f1.Strings[i];
       while not Eof(f) do
        begin
         Readln(f, mText);
         Log3:= Copy(mText, 1, Pos(' ', mText) - 1);
         Delete(mText, 1, Pos(' ', mText));
         Pass3:= Copy(mText, 1, Pos(' ', mText) - 1);
         Delete(mText, 1, Pos(' ', mText));
         Insert(Edit1.Text, str1, Pos(' ', mText));
         SecR3:= Copy(mText, 1, Length(mText));
        end;
     end;
  f1.SaveToFile('User.txt');
  ShowMessage('выполнено');
  f1.Free;
//-------------------Вот тут у меня ничего не вышло------------
   end;
end;
Taner вне форума Ответить с цитированием
Старый 13.06.2014, 13:20   #2
Taner
Пользователь
 
Регистрация: 05.04.2014
Сообщений: 54
По умолчанию

Не нашел где изменить название, модератор может добавить в название что это Delphi?
Taner вне форума Ответить с цитированием
Старый 13.06.2014, 14:02   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Цитата:
надо сделать так чтобы при первом его заходе в систему ему вылезало окошко с просьбой изменить пароль
Допустим так:
Код:
with TStringList.Create do begin
 LoadFromFile('пароли');
 if Values[Log3]='' then begin
   Values[Log3]:=InputBox('Хей, юзер','Введи пароль','');
   SaveToFile('пароли');
 end else
  пароль правильный. Есть такой юзер.
 free;
end;
Годится идея?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.06.2014, 14:30   #4
Taner
Пользователь
 
Регистрация: 05.04.2014
Сообщений: 54
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Допустим так:

Годится идея?
да я с горем пополам проверку на то, первый ли раз заходит юзер сделал
Код:
//-----------Проверка стандартный ли пароль
       if (Pass = '1234') then
        begin
         Form1.Hide;
         Form6.Show;
        end;
//--------------------------------------------
, а саму замену сделать не выходит в Unit6
Код:
//---------------Вот тут я попробовал заменить пароль
    if Pos(Log3, f1.Strings[i]) > 0 then
     begin
       str1:= f1.Strings[i];
       while not Eof(f) do
        begin
         Readln(f, mText);
         Log3:= Copy(mText, 1, Pos(' ', mText) - 1);
         Delete(mText, 1, Pos(' ', mText));
         Pass3:= Copy(mText, 1, Pos(' ', mText) - 1);
         Delete(mText, 1, Pos(' ', mText));
         Insert(Edit1.Text, str1, Pos(' ', mText));
         SecR3:= Copy(mText, 1, Length(mText));
        end;
     end;
  f1.SaveToFile('User.txt');
  ShowMessage('выполнено');
  f1.Free;
//-------------------Вот тут у меня ничего не вышло------------
Совсем не умею работать с pos/delete/insert
Taner вне форума Ответить с цитированием
Старый 13.06.2014, 15:20   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ну так я дал пример именно по замене.
Текстовик у тебя как выглядит?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.06.2014, 15:59   #6
Taner
Пользователь
 
Регистрация: 05.04.2014
Сообщений: 54
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Ну так я дал пример именно по замене.
Текстовик у тебя как выглядит?
Честно говоря я наверное не очень понял твой пример.

текстовик выглядет так
Обычный текстовый документ логин, пароль и "права" разделены пробелами.

admin1 111 111
admin2 222 111
user3 1234 110

т.е. прога заносит в пер. log:= user3; pass:= 1234; SecR:= 110
затем проверят пароль и если он стандартный( 1234), то перекидывает на 6ю форму, где один edit, куда мы вводим новый пароль, и кнопка принять.
Можешь тогда дать комментарии к твоему примеру.
p/s на всякий случай скину проект, может если будет время, согласишься потратить на мой пример.
Вложения
Тип файла: rar lab_4_delphi_7.rar (231.4 Кб, 10 просмотров)
Taner вне форума Ответить с цитированием
Старый 13.06.2014, 16:35   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

У-у-у...
А может стоит использовать INI файлы?
http://yandex.ua/yandsearch?text=TIn...mdoc=10&lr=142

Твой пример файла неудачный. Конечно можно и с твоим, но это глупо.
По факту если брать твое то выглядеть он может так:
Код:
var r:TStringList;i:integer;
...
r:=TStringList.Create
with TStringList.Create do begin
 LoadFromFile('пароли');
 for i:=0 to Count-1 do begin
  r.DelimitedText:=Strings[i];
  if r[0]=log3 then begin
   if (r.count>1)and(r[1]=pass) then пароль подошел. else
   if (r.count>1)and(r[1]<>pass) then пароль не подошел else
   if (r.count<2) then begin 
    r.Append(InputBox('Хей, юзер','Введи пароль',''));
    Strings[i]:=r.DelimitedText;
    SaveToFile('пароли'); break;
   end;
  end;
 end;
 free;
end;
r.free;
Смысл примера: Считать файл. Пройтись по его строкам. Разбить на массив слов по пробелам. Проверить первое слово (логин). Если совпадает проверить пароль. Если совпадает пароль - юзер норм. Если пароль не совпадает - от ворот поворот. Если пароля вообще нет - запросить пароль новый.

Повторяю: Если хочешь делать такую базу на текстовике - INI файлы.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 13.06.2014, 17:00   #8
Taner
Пользователь
 
Регистрация: 05.04.2014
Сообщений: 54
По умолчанию

я думал INI файлы нужны для хранения всяких настроек, а база будет совсем не большая это обычный пример там будет от силы 5 юзеров, и еще INI файлы можно как-то шифровать, мне надо шифровать еще текстовики ( я делаю обычный сдвиг), затем считаю хеш от файлов, и заношу его в отдельный файл, при открытии снова считаю хеш, если он совпадает тогда дешифрую, если нет тогда сообщение о том что целостность нарушена.
Спасибо, попробую пример.
Taner вне форума Ответить с цитированием
Старый 13.06.2014, 17:56   #9
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Ини файлы шифровать не нужно )
В том то и фишка что в него можно писать MD5 хеш (примеры есть).
Да и работать будет удобнее чем с обычным текстовиком. Решать тебе, но я из опыта советую лучший вариант.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 14.06.2014, 10:45   #10
FaTaL
Участник клуба
 
Аватар для FaTaL
 
Регистрация: 09.11.2007
Сообщений: 1,759
По умолчанию

Я бы тоже в Вашем случае использовал именно INI-файлы.
FaTaL вне форума Ответить с цитированием
Ответ


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

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

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
найти в тексте все вхождения заданной последовательности Delion Помощь студентам 1 25.12.2012 21:37
поиск и замена символа в тексте textbox pooli Microsoft Office Excel 2 02.02.2011 03:04
Поиск слов в тексте(Строки в Паскале) ParkDI Помощь студентам 0 28.11.2010 18:03
Поиск и замена строки (слова) ps10n1ck Общие вопросы C/C++ 4 29.10.2010 21:22
Поиск строки в тексте по маске Gerzs Общие вопросы Delphi 3 24.03.2010 09:36