Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zeile aus INI-Datei lesen (https://www.delphipraxis.net/10076-zeile-aus-ini-datei-lesen.html)

Tifoso 11. Okt 2003 10:14


Zeile aus INI-Datei lesen
 
ich habe folgendes Problem, möchte aus einer INI-Datei einegwisse Zeile lesen um z.B. ein Passwort zu überprüfen.
bin noch ein anfänger darum entschuldigt die Frage!

Das Einlesen klappt aber beim Auslesen aus dem INI wird immer der INI-Eintrag gelöscht.

Delphi-Quellcode:
procedure TPasswordDlg1.OKBtnClick(Sender: TObject);
var F: TextFile;
     S: string;
     PWString: String;
     PWlst:TStringList;
     ini: TIniFile;
begin
  AssignFile(F, 'login.ini');
// Datei auswählen

  Reset(F);
  Readln(F, S);
// Erste Zeile der Datei lesen

  CloseFile(F);

     PWString:=NeuesPassword1.Text;
     PWlst:=TStringList.Create;


  IF AltesPassword.Text <> S THEN
  ShowMessage('Sie haben das alte Passwort falsch eingegeben');
  AltesPassword.Text:='';

  IF NeuesPassword.Text <> NeuesPassword1.Text THEN
  ShowMessage('Sie haben das neue Passwort falsch eingegeben');

  begin
  IF NeuesPassword.Text = NeuesPassword1.Text THEN
  IF AltesPassword.Text = S THEN
  PWString:=NeuesPassword1.Text;
  PWlst:=TStringList.Create;

  PWlst.Add(PWString);
  PWlst.SaveToFile('login.ini');

     PWlst.Free;
  end;

end;

kann mir bitte jemand helfen???


mfg



P.S: Die Verschlüsselung des Passworts folgt später

Alexander 11. Okt 2003 10:21

Re: Zeile aus INI-Datei lesen
 
Wenn du schon die Unit Inifiles eingebunden hast, dann nutze dir doch auch einfach :gruebl:
Versuch mal:
Delphi-Quellcode:
Ini.Readstring('deine Section', 'dein Key', 'dein Std-Wert');

Tifoso 12. Okt 2003 09:13

Re: Zeile aus INI-Datei lesen
 
danke schön aber ich habe es oben falsch geschrieben. das Auslesen klappt leider nicht richtig.

ok, das schreiben funktioniert gleich einfach mit:

Delphi-Quellcode:
 
 DelphiIni.WriteString(Section, Key, 'Ausgabe');
ich möchte jetzt aber die erste Zeile meines ini-Files auslesen, was muss nun also bei Section eingeben?? :?:
und was hat es mit dem Schlüssel so auf sich?
die Ausgabe ist klar!! :!:

noch eine andere Frage darf ich diese Bedingung so schreiben oder hat jemand eine andere Variante? Das ini-files sollte nur beschrieben werden, wenn die bei den if richtig sind.

Delphi-Quellcode:
  begin
  IF NeuesPassword.Text = NeuesPassword1.Text THEN
  IF AltesPassword.Text = S THEN

  ini := TIniFile.Create('login.Ini');
  ini.WriteString(Selection,Key, NeuesPassword1.Text);
  ini.Free;

  end;
Danke für eure Hilfe.

MFG

Daniel B 12. Okt 2003 09:21

Re: Zeile aus INI-Datei lesen
 
Zitat:

Zitat von Tifoso
ich möchte jetzt aber die erste Zeile meines ini-Files auslesen, was muss nun also bei Section eingeben?? :?:

Das was in der Ini in den [] steht.

[Section]
Name=Value

Mirilin 12. Okt 2003 09:22

Re: Zeile aus INI-Datei lesen
 
:hi:

Vielleicht kann dir dieses Tutorial helfen.

Alexander 12. Okt 2003 09:26

Re: Zeile aus INI-Datei lesen
 
Ich weiß jetzt nicht mehr ganz was du meinst, aber kuck dir auch mal ReadSections an, damit kannst du alle Section-Namen auslesen...

Tifoso 13. Okt 2003 19:37

Re: Zeile aus INI-Datei lesen
 
Also, ich erkläre noch einmal mein Problem.

Mit dem Befehl

Delphi-Quellcode:
ini.WriteString('Passwort-Abfrage','Benutzer','1234');
ini.WriteString('Passwort-Abfrage','Administrator','DELPHI');
schreibe ich ja in das ini-file aber wo ich nicht so ganz schlau werde ist bein auslesen des ini-files.
ich möchte jetzt zum Beispiel das Passwort des Benutzer wissen,
was muss ich im Ausgabefeld eingeben damit er mir den String-Wert ausliest??????

Delphi-Quellcode:
P:=ini.ReadString('Passwort-Abfrage','Benutzer',****************);
Danke für eure Hilfe

Daniel B 13. Okt 2003 19:56

Re: Zeile aus INI-Datei lesen
 
Zitat:

Zitat von Tifoso
Delphi-Quellcode:
P:=ini.ReadString('Passwort-Abfrage','Benutzer',****************);

Das war ja schonmal nicht schlecht, als dritten Parameter musst Du nur nen Standardwert angeben, der übergeben wird, falls das auslesen misslingt.
Delphi-Quellcode:
P:=ini.ReadString('Passwort-Abfrage', 'Benutzer', '');
Wenn das Auslesen nicht klappt, dann wird halt das zurückgeliefert was in den '' steht, in dem Fall also ein Leerstring.
Und falls das auslesen klappt, dann steht in P der gewünschter Wert...

kongreddgrass 13. Okt 2003 20:31

Re: Zeile aus INI-Datei lesen
 
Hi,
ich glaube das was du meinst wäre das...

Delphi-Quellcode:
var
res: String;
Ini: TIniFile;
i: integer;
begin
ini:=TIniFile.Create('C:MyIni.ini');
try
  res:=ini.ReadString('Section_1', 'Section_2', res);
  if Edit1.Text = res then {Vergleicht den Wert in der Ini-Datei mit dem Edit1-String...wenn stimmts, dann...} 
begin
  Form2.Show;
else {Wenns nicht stimmts, dann...}
ShowMessage('Passwort ist falsch!');
finally
ini.free;
Hoffentlich stimmts :angle2:

:gruebel:

Tifoso 13. Okt 2003 22:01

Re: Zeile aus INI-Datei lesen
 
ok, danke an alle. das mit dem ini hat geklappt. :-D

habe aber trotzdem noch eine Frage und zwar hab ich ein bisschen ein durcheinander mit if und else, wenn z.B. eine var meherere bedingungen einhalten muss wie in meinem Beispiel, dass der Fall ist.
wie löst ihr profis das am besten??

Delphi-Quellcode:
procedure TPasswordDlg1.OKBtnClick(Sender: TObject);
var ini: TIniFile;
     P: string;
begin
    ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+
    'test.ini');

    P:=ini.ReadString('Benutzer','Passwort',P);
   
    IF AltesPassword.Text <> P THEN
    IF AltesPassword.Text <> 'Administrator' THEN
    ShowMessage('Sie haben das alte Passwort falsch eingegeben');
    AltesPassword.Text:='';


    IF NeuesPassword.Text <> NeuesPassword1.Text THEN
    ShowMessage('Sie haben das neue Passwort falsch eingegeben');

    begin
         IF NeuesPassword.Text = NeuesPassword1.Text THEN
         IF AltesPassword.Text = P THEN
         IF AltesPassword.Text = 'Administrator' THEN

         ini.WriteString('Benutzer','Passwort',NeuesPassword.Text);
    end;

    ini.free;

end;
kann mir da vielleicht auch noch jemand auf die Sprünge helfen??

mit freundlichen Grüssen
silvan

Christian Seehase 13. Okt 2003 22:55

Re: Zeile aus INI-Datei lesen
 
Moin Silvan,

Zitat:

Zitat von Tifoso
habe aber trotzdem noch eine Frage

dann sei bitte so gut, und mache dafür einen neuen Thread auf.
Danke.

gustav 14. Okt 2003 09:14

Re: Zeile aus INI-Datei lesen
 
Ich glaube nicht, das dies hier in Deinem Sinne funktioniert, weil
das Passwort immer Administrator lauten muss. Ein OR in der IF Abfrage ist
hier mit Sicherheit angebrachter....
Delphi-Quellcode:
         IF NeuesPassword.Text = NeuesPassword1.Text THEN
           IF AltesPassword.Text = P THEN
             IF AltesPassword.Text = 'Administrator' THEN
               xxx
...
Es macht sich auch besser, wenn jeder Block ein wenig eingerückt ist. Zumindest kann man es dann besser lesen.

Bei jeder Abfrage kann man AND und OR beliebig kombinieren. Hierbei wird nach folgenden Muster
verfahren :
true AND true = true
true AND false = false

true OR true = true
true OR false = true
false OR true = true
false OR false = false

Die Wahrheitswerte werden normalerweise von den Bedingungen
( in Deinem Fall AltesPassword.Text = P usw.) gebildet.


Also
Delphi-Quellcode:
         IF (NeuesPassword.Text = NeuesPassword1.Text) THEN
          IF ((AltesPassword.Text = P) OR
             (AltesPassword.Text = 'Administrator')) THEN
            ....
oder

Delphi-Quellcode:
         IF ((NeuesPassword.Text = NeuesPassword1.Text) AND
             ((AltesPassword.Text = P) OR
              (AltesPassword.Text = 'Administrator'))) THEN
            ....
Ich neige dazu, die Bedingungen in Klammern zu setzen, was mitunter nicht gerade leserlich wird.
Allerdings akzeptieren nicht alle Programmiersprachen einen so freizügigen Umgang, weshalb eine
Umgewöhnung sinnlos ist :-)

Dein Routine würde ich wie folgt gestalten :

Delphi-Quellcode:
procedure TPasswordDlg1.OKBtnClick(Sender: TObject);
var ini: TIniFile;
     P: string;
begin
    ini:=TIniFile.create(ExtractFilePath(ParamStr(0))+
    'test.ini');

    P:=ini.ReadString('Benutzer','Passwort',P);

     // entweder das Passwort stimmt oder ich bin der Admin  
    IF ((AltesPassword.Text = P) OR (AltesPassword.Text = 'Administrator')) THEN BEGIN
      AltesPassword.Text:='';

      // stimmen Passwort und Sicherheitseingabe
     IF (NeuesPassword.Text = NeuesPassword1.Text) THEN BEGIN

       // fällt weg, weil oben bereits die Abfrage erfolgt ist
       //IF ((AltesPassword.Text = P) OR
       //    (AltesPassword.Text = 'Administrator')) THEN

       ini.WriteString('Benutzer','Passwort',NeuesPassword.Text);

     END ELSE
        ShowMessage('Sie haben das neue Passwort falsch eingegeben');
   
    END ELSE
      ShowMessage('Sie haben das alte Passwort falsch eingegeben');

    ini.free;
end;

Tifoso 14. Okt 2003 09:37

Re: Zeile aus INI-Datei lesen
 
@gustav

ich danke dir für die info und werden es einmal am Abend zu Hause in aller Ruhe ausprobieren.

Vielen Dank an alle

Grüsse aus der Schweiz

kongreddgrass 14. Okt 2003 14:49

Re: Zeile aus INI-Datei lesen
 
Hi,
er kann das mit dem Passwort oder Benutzername oder wie auch immer
im eingeloggten Modus machen. Ich meine, er logt sich selber ein
und erstellt dann mit Hilfe Edit-Komponenten und Buttons einen
neuen Benutzernamen.

Tifoso 14. Okt 2003 17:32

Re: Zeile aus INI-Datei lesen
 
@kongreddgrass

wie meinst du das?? kannst du das mir einmal aufzeigen??

Grüsse

kongreddgrass 15. Okt 2003 11:39

Re: Zeile aus INI-Datei lesen
 
Ich meine,
wenn er als Administrator im Programm ist, dann kann er doch mit seinen Administrator rechten einen neuen Acount zulegen. (Für andere Benutzer)

kongreddgrass 15. Okt 2003 12:54

Re: Zeile aus INI-Datei lesen
 
Hi,
ich habe gemeint, de rAdministrator hat ja alle Rechte. Und wenn der Administrator im Programm sich praktisch mit seinem Admin-Passwort und Namen eingeloggt oder wie auch immer eingeloggt ist, könnte er für einen anderen Benutzer einen Account einrichten.


Alle Zeitangaben in WEZ +1. Es ist jetzt 14:22 Uhr.

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