Entwickler-Ecke

Dateizugriff - INI lesen ganz einfach bitte.


Constan - Do 17.11.05 00:12
Titel: INI lesen ganz einfach bitte.
Falls wieder jemand meckert ja ich habe gesucht.

Ich habe eine INI mit den Inhalten

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
[IP]
192.168.1.10
192.168.1.11
192.168.1.14
[Name]
Dennis
Georg
Peter


so mein Code sieht so aus

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
function Get_Ini(IniFile:string):tstringlist;
begin
Result:=Tstringlist.Create;
Result.LoadFromFile(IniFile);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
OpenDialog1.Filter:='Ini-File (*.ini)|*.ini';
OpenDialog1.Execute;
Memo1.ScrollBars:=ssVertical;
Memo1.Clear;
Memo1.lines:=Get_Ini(OpenDialog1.FileName);
end;

end.


so nun zu meinen beiden fragen :
1. wie sage ich ihm das er bestimmte werte lesen soll beispiel die erste IP 192.168.1.10 mit dem namen dennis und dies dann in ein label beispielsweise laden tut.
2. Der Opendialog gefällt mir nicht wie sage ich ihm das die datei da und da liegt


Vielleicht so?

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var   
  sl: TStringList;   
begin   
  sl := TStringList.Create;    
  sl.LoadFromFile('c:\test.ini');    
      Label1.Caption := sl.Strings;  
    end;     
    sl.Free;   
  end;   
end;


Bitte helft mir ein wenig.

Wenn ihr noch Infos braucht poste ich gerne.


Sprint - Do 17.11.05 00:38
Titel: Re: INI lesen ganz einfach bitte.
user profile iconConstan hat folgendes geschrieben:
Ich habe eine INI mit den Inhalten

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
[IP]
192.168.1.10
192.168.1.11
192.168.1.14
[Name]
Dennis
Georg
Peter

1. wie sage ich ihm das er bestimmte werte lesen soll beispiel die erste IP 192.168.1.10 mit dem namen dennis und dies dann in ein label beispielsweise laden tut.


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
uses
  IniFiles;

procedure TForm1.Button1Click(Sender: TObject);
var
  IniFile: TMemIniFile;
  IP: TStringList;
  Name: TStringList;
  I: Integer;
begin

  if OpenDialog1.Execute then
  begin
    try
      IniFile := TMemIniFile.Create(OpenDialog1.FileName);
      IP := TStringList.Create;
      Name := TStringList.Create;
      try
        IniFile.ReadSectionValues('IP', IP);
        IniFile.ReadSectionValues('Name', Name);
        if (IP.Count > 0and (IP.Count = Name.Count) then
          for I := 0 to IP.Count - 1 do
            ShowMessage(Name[I] + ' hat die IP: ' + IP[I]);
      finally
        IP.Free;
        Name.Free;
        IniFile.Free;
      end;
    except
    end;
  end;

end;


Zitat:
2. Der Opendialog gefällt mir nicht wie sage ich ihm das die datei da und da liegt

In dem du den Dateinamen direkt in den Quelltext schreibst.


Constan - Do 17.11.05 18:22

Aha ok nur mal zum verständnis


Delphi-Quelltext
1:
2:
        if (IP.Count > 0and (IP.Count = Name.Count) then
          for I := 0 to IP.Count - 1 do


wenn ich also einen anderen Wert auslesen möchte muss ich in diesen Zeilen was ändern oder?
Dort sind ja 3 zahlen 0 0 1 ist dann
0 der erste wert?
1 der zweite wert?
2 der dritte wert?

woführ steht dann die - 1


sry für meine frage würde es aber gerne voll und ganz begreifen damit das für mich abgeschlossen ist.


stifflersmom - Do 17.11.05 18:55

Na ja, IP ist eine Stringlist und die Items in einer StringList sind "0"-basierend wie Du schon festgestellt hast.
Die Count-Eigenschaft ist allerdings NICHT "0"-basierend und deshalb zählt man mit

Delphi-Quelltext
1:
for i :=0 to MeinerStringlist.Items.Count -1                    


Alles klar?


Constan - Do 17.11.05 19:10

Mein Quelltext sieht jetzt so aus nur liest er den dritten wert aus und nicht den ersten. welche eigenschaft muss man da ändern um andere auszulesen? und wie kommt er auf 3?


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
procedure TForm1.Button1Click(Sender: TObject);
var
  IniFile: TMemIniFile;
  IP: TStringList;
  Name: TStringList;
  I: Integer;
begin
    try
      IniFile := TMemIniFile.Create('C:\e.ini');
      IP := TStringList.Create;
      Name := TStringList.Create;
      try
        IniFile.ReadSectionValues('IP', IP);
        IniFile.ReadSectionValues('Name', Name);
        if (IP.Count > 0and (IP.Count = Name.Count) then
          for I := 0 to IP.Count - 1 do
            Label1.Caption :=(Name[I] + ' hat die IP: ' + IP[I]);
      finally
        IP.Free;
        Name.Free;
        IniFile.Free;
      end;
    except
    end;
  end;


stifflersmom - Do 17.11.05 19:26

Ganz einfach, mit Deinem Code


Delphi-Quelltext
1:
2:
 for I := 0 to IP.Count - 1 do  
            Label1.Caption :=(Name[I] + ' hat die IP: ' + IP[I]);

wird der Inhalt des Labels immer ÜBERSCHRIEBEN, und so bleibt eben nur der letzte Wert stehen.

Moin


Constan - Do 17.11.05 20:13

und wie muss ich es schreiben das er exakt wert X nehmen soll und diesen auch dann ins label einträgt ohne weiterzu laufen?


Constan - Fr 18.11.05 16:09

sry aber bei mir kommt immer 3 raus und wenn ich eine andere zahl änder zb die 1 dann stürtzt alles ab.


stifflersmom - Fr 18.11.05 18:18

Tut mir leid, ich verstehe jetzt nicht genau, was Du eigentlich willst.
Du kannst doch den Index des Elements, das Du ahebn willst, direkt angeben.


Soll in Label1 der erste Wert stehen, dann schreibst Du eben:

Delphi-Quelltext
1:
Label1.Caption :=(Name[0] + ' hat die IP: ' + IP[0]);                    

und das war's.

Moin


MSCH - Fr 18.11.05 19:37

hmmm,
ad 1 deine Ini-Datei ist keine :-),
da diese immer dem Schema-Folgt:
[Abschnitt]
Variable=Wert

In deinem Falle wäre
[IP]
0=192.168.1.10
1=192.168.1.11
2=192.168.1.14
[Name]
0=Dennis
1=Georg
2=Peter

die korrekte Darstellung. Sei's drum.

Anschließend nur ReadSektion() draufgehen und fertig.
like

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
var Sec,List:TStringList;
    I:Integer;
begin
  S:= TStringList.Create;
  Ini.ReadSection('IP',S);
  List:= TStringList.Create;
  for I:=0 to S.Count-1 do
    List.add(Ini.ReadString('IP',S[i],''));
  S.Free;
  // List enhält jetzt alle Einträge 0..2 der IPs
  ...


grez
msch