Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Algorithmen, Datenstrukturen und Klassendesign (https://www.delphipraxis.net/78-algorithmen-datenstrukturen-und-klassendesign/)
-   -   meminifiles, inifiles , einlesen scheitert (https://www.delphipraxis.net/209072-meminifiles-inifiles-einlesen-scheitert.html)

bernhard_LA 21. Okt 2021 13:54

meminifiles, inifiles , einlesen scheitert
 
ich habe schon wieder ein Probleme beim Einlesen von *.ini files,
der Code wurde auf TMemInifile umgestellt, allerdings das Einlesen klappt nur bei ~50 % alles Infiles,
Im Notepad sehen alle Files
sinnvoll aus, die Files werden aus einer Delphi Anwendung heraus geschrieben mit der Klasse TInifile.



Delphi-Quellcode:
function ReadINIString(filename: string; SectionStr: string;
  IdentStr: String): string;
var
  IniFile: TMemIniFile;
begin
  if FileExists(filename) then
  begin
    IniFile := TMemIniFile.Create(filename);
    try
      Result := IniFile.ReadString(SectionStr, IdentStr, '<none>');
    finally
      IniFile.Free;
    end;
  end
  else
  begin
    Result := '<no file found>';
  end;
end;


Frage : hat jemand eine Anwendung / Code mit der ich eine *.ini Datei prüfen kann ob sie erfolgreich gelesen werden kann ?

Uwe Raabe 21. Okt 2021 14:00

AW: meminifiles, inifiles , einlesen scheitert
 
Zitat:

Zitat von bernhard_LA (Beitrag 1496411)
allerdings das Einlesen klappt nur bei ~50 % alles Infiles,

Dann häng doch mal so eine Datei an, die nicht eingelesen wird.

bernhard_LA 21. Okt 2021 14:17

AW: meminifiles, inifiles , einlesen scheitert
 
leider unmöglich ... Firmen interne Daten :-(

Der schöne Günther 21. Okt 2021 14:20

AW: meminifiles, inifiles , einlesen scheitert
 
Ini-Dateien sind echt kein Hexenwerk, das TMemIniFile ist im Endeffekt nur eine StringList. Schau doch im Debugger einfach ob er den Kram richtig einliest oder ob z.B. beim Encoding was quer hängt.

venice2 21. Okt 2021 14:25

AW: meminifiles, inifiles , einlesen scheitert
 
Vor allem prüfe das Daten Format mit dem die Ini Dateien geschrieben wurden.
Mit UltraEdit geht das gut. Steht unten in der Status Zeile.

DOS, UNIX oder what ever

Delphi.Narium 21. Okt 2021 14:42

AW: meminifiles, inifiles , einlesen scheitert
 
Wie groß sind die Dateien?

5 Zeilen?
50 Zeilen?
5000 Zeilen?
50000000 Zeilen?

Dateigröße in Byte, KByte, ... TByte?

Zeichensatz:
Schreiben OEM Lesen UTF8?
Schreiben ANSI Lesen UTF8?
...
Schreiben UTF8 Lesen ANSI?
Schreiben UTF8 Lesen OEM?

Oder was auch immer?

Klappt es einfach nur nicht oder gibt es auch 'ne Fehlermeldung?

Wo ist die Fehlerbehandlung? Außerhalb von ReadINIString?

Würde da mal noch ein Try Except end mit einbauen.

BerndS 21. Okt 2021 15:38

AW: meminifiles, inifiles , einlesen scheitert
 
Bis zu einer bestimmten Version wurde beim Einlesen abgebrochen, wenn in der Datei /Stream ein #0 vorkommt.
In XE7 ist das so und bei 10.4 nicht mehr.
Erkennbar ist das in der System.Classes in der Methode
Delphi-Quellcode:
procedure TStrings.SetTextStr
...
while P^ <> #0 do
...
Ich würde da mal einen Haltepunkt setzen oder mit dem Hex-Editor (HxD) nach #0 suchen.

bernhard_LA 22. Okt 2021 10:07

AW: meminifiles, inifiles , einlesen scheitert
 
das Problem liegt vlt. doch nicht an den Files ....
ich habe eine Mini-Testprogramm geschrieben , in diesem Falle klappt das einlesen der Sections, welches in der echten Anwendung fehlschlägt



Delphi-Quellcode:
procedure TForm2.ReadPointlist3Dfile(filename: string);
var
  AptList: TPointList3DAlign;
begin
  AptList := TPointList3DAlign.Create;

  AptList.LoadfromFile(filename);

  CopyPointList2Memo(AptList, 'debug 3D', Memo3);
end;

procedure TForm2.ReadPointlistfile(filename: string);
var
  AptList: TPointlist;
begin
  AptList := TPointlist.Create;

  AptList.LoadfromFile(filename);

  CopyPointList2Memo(AptList, 'debug 2D ', Memo3);

  AptList.SavetoFile(filename);
end;

procedure TForm2.ReadInifile(filename: string);
var
  aini: TInifile;
  Sections: TStringlist;
begin
  aini := TInifile.Create(filename);

  Sections := TStringlist.Create;

  aini.ReadSections(Sections);

  Memo2.Lines.AddStrings(Sections);

  aini.Free;

  Sections.Free;
end;

procedure TForm2.Button1Click(Sender: TObject);
begin
  if OpenDialog1.Execute() then
  begin
    Memo1.Lines.LoadfromFile(OpenDialog1.filename);

    ReadInifile(OpenDialog1.filename);

    ReadPointlistfile(OpenDialog1.filename);

    ReadPointlist3Dfile(OpenDialog1.filename);
  end;
end;

end.

Das nun existierende Problem, die eigentliche Anwendung führt auch nur diese 3 Schritte aus (und natürlich viele anderr ...) schlägt weiterhin fehl.

Delphi-Quellcode:
 
  AptList := TPointList3DAlign.Create;

  AptList.LoadfromFile(filename);

  CopyPointList2Memo(AptList, 'debug 3D', Memo3);
im Debugging zeigt sich , daß bei AptList.LoadfromFile(filename); keine Sections gefunden werden .....

Uwe Raabe 22. Okt 2021 10:35

AW: meminifiles, inifiles , einlesen scheitert
 
Vielleicht ist die Datei noch von einer anderen Anwendung gesperrt oder sowas in der Art.

himitsu 22. Okt 2021 11:46

AW: meminifiles, inifiles , einlesen scheitert
 
Da hier sämtliche Ressourcenschutzblöche fehlen, kann er es auch selber sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:50 Uhr.
Seite 1 von 2  1 2      

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