Delphi-PRAXiS
Seite 2 von 3     12 3      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi INI mit Schleife auslesen (https://www.delphipraxis.net/131080-ini-mit-schleife-auslesen.html)

Reinhardtinho 18. Mär 2009 14:40

Re: INI mit Schleife auslesen
 
Der Aufbau der Ini-Datei ist schon mal falsch:

Zitat:

Zitat von http://de.wikipedia.org/wiki/Initialisierungsdatei
Jeder Schlüssel darf nur einmal je Sektion vorkommen.


DevilsCamp 18. Mär 2009 14:43

Re: INI mit Schleife auslesen
 
Zitat:

Zitat von SoD
Nur bekomm ich jetzt "E2010 Inkompatible Typen: 'TStrings' und 'string'" bei

Delphi-Quellcode:
for I := 0 to VideoIni.ReadInteger('Videoindex','Videos',0) - 1 do
    begin
      MemoDesc.Text := VideoIni.ReadSection('Desc','Desc');                 //Hier und
      MediaPlayerControl.FileName := VideoIni.ReadSection('Paths','Path');  //Hier meldet Delphi Fehler
      MediaPlayerControl.Open;
    end;
Das sind die Fehler, von denen ich geredet hab. Er kompiliert es mir gar nicht erst, weil auf einmal Typen nicht mehr zusammenpassen.

ReadSection erwartet als zweiten Parameter eine Variable vom Typ TStrings. Also z.B. eine TStringList oder TListBox.Items

Blackheart 18. Mär 2009 14:48

Re: INI mit Schleife auslesen
 
Hier mal ein gutes Ini Tutorial

SoD 18. Mär 2009 14:55

Re: INI mit Schleife auslesen
 
Zitat:

Zitat von Blackheart
Hier mal ein gutes Ini Tutorial

Das Tutorial hab ich auch gelesen, als ich mit INIs angefangen hab. Das hat mir den Einstieg schon mal sehr erleichtert. :)

Zitat:

Zitat von DevilsCamp
ReadSection erwartet als zweiten Parameter eine Variable vom Typ TStrings. Also z.B. eine TStringList oder TListBox.Items

Und wenn ich versuch die ListBox.Items zu übergeben ist es auch wieder falsch.

Delphi-Quellcode:
ListBoxFiles.Items.Add(VideoIni.ReadSection('Name',ListBoxFiles.Items));
Dann heißt es "E2010 Inkompatible Typen: 'string' und 'procedure, untyped pointer or untyped parameter'". Eben wollte er doch nocht TStrings? :wiejetzt:

DevilsCamp 18. Mär 2009 15:01

Re: INI mit Schleife auslesen
 
ReadSection ist auch eine Prozedur. Keine Funktion.
Versuch es mal damit:

Delphi-Quellcode:
procedure Test;
var
  i: Integer;
  Sektionen: TStringList;
begin
  Sektionen := TStringList.Create;
  ListBoxFiles.Items.Clear;
  VideoIni.ReadSections(Sektionen); // Alle Sektionsnamen sind nun in Sektionen gespeichert.

  for i := 0 to Sektionen.Count - 1 do
  begin
    ListBoxFiles.Items.Add(VideoIni.ReadString(Sektionen[i], 'Name', Format('Unbekannter Name %d', [i])));
  end;
end;
[add]
Ich beziehe mich auf das INI-File Format aus Post #7

Blackheart 18. Mär 2009 15:02

Re: INI mit Schleife auslesen
 
Dann lies mal das Tutorial nochmal dann fällt dir auf was du falsch gemacht hast. :wink:

SoD 18. Mär 2009 15:27

Re: INI mit Schleife auslesen
 
Zitat:

Zitat von DevilsCamp
ReadSection ist auch eine Prozedur. Keine Funktion.
Versuch es mal damit:

Delphi-Quellcode:
procedure Test;
var
  i: Integer;
  Sektionen: TStringList;
begin
  Sektionen := TStringList.Create;
  ListBoxFiles.Items.Clear;
  VideoIni.ReadSections(Sektionen); // Alle Sektionsnamen sind nun in Sektionen gespeichert.

  for i := 0 to Sektionen.Count - 1 do
  begin
    ListBoxFiles.Items.Add(VideoIni.ReadString(Sektionen[i], 'Name', Format('Unbekannter Name %d', [i])));
  end;
end;
[add]
Ich beziehe mich auf das INI-File Format aus Post #7

Danke, der Code funktioniert schon ganz gut, aber er zeigt mir mehr Einträge an, als in der INI vorhanden sind. Woher kommt denn der 4. Eintrag auf einmal? Schimpft sich "Unbekannter Name 0".

Zitat:

Zitat von Blackheart
Dann lies mal das Tutorial nochmal dann fällt dir auf was du falsch gemacht hast. :wink:

Ich mach öfter was falsch :P Was genau meinst du denn?

nahpets 18. Mär 2009 15:44

Re: INI mit Schleife auslesen
 
Hallo,

Delphi-Quellcode:
for i := 0 to Sektionen.Count - 1 do
begin
  ListBoxFiles.Items.Add(VideoIni.ReadString(Sektionen[i], 'Name', Format('Unbekannter Name %d', [i])));
end;
Dir fehlt vermutlich auch das letzte Video :wink:
Deine Videos sind von 1 bis 3 nummeriert, die For-Schleife geht von 0 bis 2, Du musst also
Delphi-Quellcode:
ListBoxFiles.Items.Add(VideoIni.ReadString(Sektionen[i], 'Name', Format('Unbekannter Name %d', [i])));
durch
Delphi-Quellcode:
ListBoxFiles.Items.Add(VideoIni.ReadString(Sektionen[i + 1], 'Name', Format('Unbekannter Name %d', [i + 1])));
ersetzen.
Oder nummeriere die Video in der Ini-Datei auch mit 0 beginnend.

SoD 19. Mär 2009 11:06

Re: INI mit Schleife auslesen
 
OK, ich bin wieder auf das vorherige Schema für die INI zurückgegangen.

Code:
[Videoindex]
videos=3

[Video0]
Path=.\datei0.wmv
Name=Name 0
Desc=Beschreibung 0

[Video1]
Path=.\datei1.wmv
Name=Name 1
Desc=Beschreibung 1

[Video2]
Path=.\datei2.wmv
Name=Name 2
Desc=Beschreibung 2
Er zeigt mir aber dennoch einen Eintrag zu viel an.

Ich hab auch mit dem Konstrukt zum Auslesen der Dateieinträge versucht, die Videobeschreibungen zu laden, aber es kommt immer nur die Beschreibung der allerletzten Section dabei raus. Der Code:

Delphi-Quellcode:
procedure TForm1.ListBoxFilesClick(Sender: TObject);
var
  I: Integer;
  VideoFile : TStringList;
  VideoDesc : TStringList;
begin
  VideoIni := TIniFile.Create(PChar(ExtractFilePath(ParamStr(0)) + 'files.ini'));
  VideoFile := TStringList.Create;
  VideoDesc := TStringList.Create;
  VideoIni.ReadSections(VideoFile);
  VideoIni.ReadSections(VideoDesc);
  for i := 0 to VideoFile.Count -1 do
  begin
    MediaPlayerControl.FileName := VideoIni.ReadString(VideoFile[i],'Path','');
  end;
  for i := 0 to VideoDesc.Count - 1 do
  begin
    MemoDesc.Text := VideoIni.ReadString(VideoDesc[i],'Desc','');
  end;
Scheint so, als müsste ich etwas umformulieren?

nahpets 19. Mär 2009 11:12

Re: INI mit Schleife auslesen
 
Hallo,

na klar, Du überschreibst ja auch immer die Werte.

Statt
Delphi-Quellcode:
for i := 0 to VideoDesc.Count - 1 do
begin
  MemoDesc.Text := VideoIni.ReadString(VideoDesc[i],'Desc','');
end;
mal damit versuchen
Delphi-Quellcode:
MemoDesc.Lines.Clear;
for i := 0 to VideoDesc.Count - 1 do
begin
  MemoDesc.Lines.Add(VideoIni.ReadString(VideoDesc[i],'Desc',''));
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:03 Uhr.
Seite 2 von 3     12 3      

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