Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi vergleich mit einer txt datei (https://www.delphipraxis.net/143246-vergleich-mit-einer-txt-datei.html)

Nero281084 12. Nov 2009 11:50


vergleich mit einer txt datei
 
Hallo leute, da ihr mir beim letzten mal so gut geholfen habt, würde ich euch nochmal bitten euch diesen Quellcode anzusehen und mir da ein bisschen zu helfen.
danke schon mal im voraus
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
   PasswortList, UsernameList : TStringList;
   i, n, l, j: integer;
begin
   PasswortList:= TStringList.Create;
   PasswortList.LoadFromFile('D:\Delphi\De2\Formular2.11\Login.txt');
   for j := 0 to length(PasswortList[j]) - 1 do begin
       if form1.Edit2.Text = Copy(PasswortList[j], n, l) then
   end;
   UsernameList:= TStringList.Create;
   UsernameList.LoadFromFile('D:\Delphi\De2\Formular2.11\Login.txt');
   for I := 0 to length(UsernameList[i]) - 1 do begin
       if form1.Edit1.Text = Copy(UsernameList[i], n, l) then
   end;
   ShowMessage('Erfolgreich eingelogt');
   if form1.Edit1.Text = Copy(UsernameList[i], n, l) then begin
       if form1.Edit2.Text = Copy(PasswortList[j], n, l) then
   ShowMessage('Leider falsch. Versuch es bitte nochmal.');
   zaehler:= zaehler + 1;
   end;
   if zaehler >= 3 then begin
       Form1.Close;
   end;
   UsernameList.Free;
   PasswortList.Free;
   loginzeit:= TimeToStr(now);
[edit=Sharky]Delphi-Tags eingefügt. Mfg, Sharky[/edit]

Sharky 12. Nov 2009 11:52

Re: vergleich mit einer txt datei
 
Was ist denn das konkrete Problem?

Nero281084 12. Nov 2009 11:55

Re: vergleich mit einer txt datei
 
das programm sagt: EStringError mit der Meldung 'Listenindex überschreitet das Maximum'
und ich nicht auf die txt datei zugreifen und die daten mit den edit.felder vergleichen

DeddyH 12. Nov 2009 12:00

Re: vergleich mit einer txt datei
 
- Du lädst dieselbe Datei in 2 verschiedene Stringlisten, wozu?
- Nicht Length(Stringliste) sondern Stringliste.Count
- "then end;" macht keinen Sinn
- Benutze try-finally-Blöcke, um Speicherlecks zu vermeiden
- Die Variablen "l" und "n" sind nicht initialisiert

Mehr ist mir auf den ersten Blick nicht aufgefallen.

Nero281084 12. Nov 2009 12:10

Re: vergleich mit einer txt datei
 
macht sinn.
probier ich gleich mal aus

Nero281084 12. Nov 2009 12:13

Re: vergleich mit einer txt datei
 
Jetzt sagt mir das programm aber dass er auf die eigenschaft 'count' nicht zugreifen kann

p80286 12. Nov 2009 12:15

Re: vergleich mit einer txt datei
 
Zeig Code!

Gruß
K-H

Nero281084 12. Nov 2009 12:16

Re: vergleich mit einer txt datei
 
FileList:= TStringList.Create;
FileList.LoadFromFile('D:\Delphi\De2\Formular2.11\ Login.txt');
for j := 0 to TStringList.Count - 1 do begin
if form1.Edit2.Text = FileList[j] then begin
if form1.Edit1.Text = FileList[i] then
ShowMessage('Erfolgreich eingelogt');
end else
ShowMessage('Leider falsch. Versuch es bitte nochmal.');
zaehler:= zaehler + 1;
if zaehler >= 3 then begin
Form1.Close;
end;
end;
FileList.Free;

p80286 12. Nov 2009 12:20

Re: vergleich mit einer txt datei
 
Zitat:

Zitat von Nero281084
Delphi-Quellcode:
FileList:= TStringList.Create;
   FileList.LoadFromFile('D:\Delphi\De2\Formular2.11\Login.txt');
   for j := 0 to TStringList.Count - 1 do begin
       if form1.Edit2.Text = FileList[j] then begin
           if form1.Edit1.Text = FileList[i] then
           ShowMessage('Erfolgreich eingelogt');
       end else
       ShowMessage('Leider falsch. Versuch es bitte nochmal.');
       zaehler:= zaehler + 1;
       if zaehler >= 3 then begin
           Form1.Close;
       end;
   end;
   FileList.Free;

so ist hübscher.

Delphi-Quellcode:
for j := 0 to TStringList.Count - 1 
>>>>>
for j := 0 to Filelist.Count - 1
Warum jetzt auf einmal Filelist???

Gruß
K-H

fui-tak 12. Nov 2009 14:27

Re: vergleich mit einer txt datei
 
Zitat:

Zitat von p80286
Warum jetzt auf einmal Filelist???

Bei dir müsste das nicht Filelist, sondern UsernameList oder PasswortList sein.
Wenn du nur das machen würdest:
Delphi-Quellcode:
for j := 0 to TStringList.Count - 1
dann wüsste Delphi ja nicht auf welche Stringlist du zugreifen willst. Du musst die Stringlist schon mit Namen ansprechen also
Delphi-Quellcode:
for j := 0 to UsernameList.Count - 1
bzw.
Delphi-Quellcode:
for j := 0 to PasswortList.Count - 1

[Edit]
Ups, der Post oben drüber ist ja gar nicht von Nero....
Aber kann ja nicht schaden, was ich geschrieben habe

DeddyH 12. Nov 2009 14:38

Re: vergleich mit einer txt datei
 
Und wieso wird da einmal auf j und einmal auf i zugegriffen? Vielleicht zeigst Du uns mal eine Beispielzeile aus der Datei, dann können wir evtl. besser helfen.

p80286 12. Nov 2009 14:44

Re: vergleich mit einer txt datei
 
*!!*

j steht für die Passworte und i für die Benutzernamen und Nero hat da irgendwelche Bezüge durcheinander geworfen. D müssen wohl mal Grundlagen her.

Gruß
K-H

Nero281084 12. Nov 2009 16:26

Re: vergleich mit einer txt datei
 
:shock:

Nero281084 12. Nov 2009 16:39

Re: vergleich mit einer txt datei
 
hab alles hingekriegt.
danke für die hilfe, so schaut der quelltext jetzt aus:

interface

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

type
TForm4 = class(TForm)
StringGrid1: TStringGrid;
Button1: TButton;
Label1: TLabel;
Edit10: TEdit;
Button2: TButton;
procedure Button1Click(Sender: TObject);
procedure FormCreate(Sender: TObject);
procedure Button2Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form4: TForm4;
zeilenzaehler, i, j: integer;
FileList: TStringList;
implementation

uses Unit1, Unit2;

{$R *.dfm}

procedure TForm4.Button1Click(Sender: TObject);
begin
if Edit10.Text = 'Admin' then begin
StringGrid1.Cells[0, zeilenzaehler]:= Form1.Edit1.Text;
StringGrid1.Cells[1, zeilenzaehler]:= DateToStr(now);
StringGrid1.Cells[2, zeilenzaehler]:= loginzeit;
StringGrid1.Cells[3, zeilenzaehler]:= logoutzeit;
end else
ShowMessage('Tut mir Leid, Zugang verweigert.');
FileList.Free;
end;

procedure TForm4.Button2Click(Sender: TObject);
begin
ShowMessage('Erfolgreich ausgelogt');
Form1.Show;
Form4.Visible:= False;
end;

procedure TForm4.FormCreate(Sender: TObject);
begin
zeilenzaehler:= 1;
StringGrid1.Cells[0,0] := 'UserName';
StringGrid1.Cells[1,0] := ('Datum');
StringGrid1.Cells[2,0] := ('Login Zeit');
StringGrid1.Cells[3,0] := ('Logout Zeit');
Edit10.Text:= '';
end;

end.

Nero281084 12. Nov 2009 16:40

Re: vergleich mit einer txt datei
 
sorry war der falsche. hier ist der richtige

unit Unit1;

interface

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

type
TForm1 = class(TForm)
Edit1: TEdit;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Button1: TButton;
Button2: TButton;
Button3: TButton;
Button4: TButton;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
procedure FormShow(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
private
{ Private-Deklarationen }
public
{ Public-Deklarationen }
end;

var
Form1: TForm1;
zaehler: integer;
loginzeit, logoutzeit: string;
fenster: boolean;
f: TextFile;
implementation

uses Unit2, Unit4;


{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
FileList: TStringList;
i, j: integer;
begin
fenster:= false;
if fenster = false then begin
FileList:= TStringList.Create;
FileList.LoadFromFile('D:\Delphi\De2\Formular2.11\ Login.txt');
for j := 0 to FileList.Count - 1 do begin
if form1.Edit2.Text = FileList[j] then begin
for I := 0 to FileList.Count - 1 do begin
if form1.Edit1.Text = FileList[i] then
ShowMessage('Erfolgreich eingelogt');
end;
end;
end;
end else
if fenster = True then begin
ShowMessage('Leider falsch. Versuch es bitte nochmal.');
zaehler:= zaehler + 1;
if zaehler >= 3 then begin
Form1.Close;
end;
end;
FileList.Free;
loginzeit:= TimeToStr(now);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
Form2.Show;
Form1.Visible:= False;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
Form4.Visible:= True;
Form1.Visible:= False;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
ShowMessage('Erfolgreich ausgelogt');
logoutzeit:= TimeToStr(now);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
zaehler:= 0;
Edit1.Text:= '';
Edit2.Text:= '';
end;

end.

p80286 12. Nov 2009 17:38

Re: vergleich mit einer txt datei
 
Zitat:

Zitat von Nero281084
sorry war der falsche. hier ist der richtige
Delphi-Quellcode:
unit Unit1;

interface

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

type
  TForm1 = class(TForm)
    Edit1: TEdit;
    Edit2: TEdit;
    Label1: TLabel;
    Label2: TLabel;
    Button1: TButton;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    procedure Button2Click(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure FormShow(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;
  zaehler: integer;
  loginzeit, logoutzeit: string;
  fenster: boolean;
  f: TextFile;
implementation

uses Unit2, Unit4;


{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var
   FileList: TStringList;
   i, j: integer;
begin
   fenster:= false;
   if fenster = false then begin
       FileList:= TStringList.Create;
       FileList.LoadFromFile('D:\Delphi\De2\Formular2.11\Login.txt');
       for j := 0 to FileList.Count - 1 do begin
           if form1.Edit2.Text = FileList[j] then begin
               for I := 0 to FileList.Count - 1 do begin
                   if form1.Edit1.Text = FileList[i] then
                       ShowMessage('Erfolgreich eingelogt');
               end;
           end;
       end;
   end else
   if fenster = True then begin
       ShowMessage('Leider falsch. Versuch es bitte nochmal.');
       zaehler:= zaehler + 1;
       if zaehler >= 3 then begin
           Form1.Close;
       end;
   end;
   FileList.Free;
   loginzeit:= TimeToStr(now);
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
   Form2.Show;
   Form1.Visible:= False;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin
   Form4.Visible:= True;
   Form1.Visible:= False;
end;

procedure TForm1.Button4Click(Sender: TObject);
begin
   ShowMessage('Erfolgreich ausgelogt');
   logoutzeit:= TimeToStr(now);
end;

procedure TForm1.FormShow(Sender: TObject);
begin
   zaehler:= 0;
   Edit1.Text:= '';
   Edit2.Text:= '';
end;

end.

Vielleicht hast Du es nicht mitbekommen, aber in einem anderen Thread ist sehr breit über die Benutzung von
Delphi-Quellcode:
if boolvar=true then
diskutiert worden.

Bitte nutze immer
Delphi-Quellcode:
if boolvar then
Das gleiche gilt entsprechend für false also
Delphi-Quellcode:
if not(boolvar) then
Für eine Fingerübung mag es ausreichend sein, aber wenn Du ernsthaft Passwörter in Dateien ablegen willst, solltest Du über Hashwerte und oder Verschlüsselung intensiv nachdenken.

Gruß
K-H

DeddyH 12. Nov 2009 18:16

Re: vergleich mit einer txt datei
 
Mir erscheint die ganze Logik etwas seltsam: wenn die Inhalte der Edits jeweils in einer Zeile der Datei enthalten sind, gilt der Login als erfolgreich :gruebel: (da schreib ich doch gleich in beide Edits dasselbe, dann muss ich nur einmal raten).


Alle Zeitangaben in WEZ +1. Es ist jetzt 11:46 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz