Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Ini Readsection begrenzt? (https://www.delphipraxis.net/138268-ini-readsection-begrenzt.html)

gogl1985 6. Aug 2009 10:23


Ini Readsection begrenzt?
 
Hallo,

ich habe folgendes Problem:

Delphi-Quellcode:
Ini:=TIniFile.Create('C:\liste.ini');
Ini.ReadSection('04.08.2009', Listbox1.items);
Ini.Free;
Die Ini-Datei:

[04.08.2009]
....
....
....
und weitere 200 Zeilen Strings

In der Listbox wird allerdings nur bis Zeile 100 ausgegeben, die restlichen >100 fehlen - warum?

Nachtrag: Wenn ich oberhalb der 100. Zeile Zeichen entferne, wird es entsprechend Länger ausgelesen.

Das Problem tritt auf, sobald es mehr als 16580 Zeichen sind.

HeikoAdams 6. Aug 2009 10:55

Re: Ini Readsection begrenzt?
 
Ich weiss zwar nicht genau, was Du mit der Ini-Datei vor hast, aber ich vermute, das Du mit einer XML-Datei oder Datenbank besser bedient bist. Zumal AFAIR die maximale Größe von Ini-Datein auf 64 K(?)B begrenzt ist.

gogl1985 6. Aug 2009 11:38

Re: Ini Readsection begrenzt?
 
Die Ini Datei dient als Protokoll. Die Dateigröße sollte kein Problem darstellen, da ich auch schon mehrere MegaByte als Größe einer Datei hatte und es funktionierte super. Das Problem scheint die Zeichenberenzung einer Section an irgendeiner Stelle zu sein.

Vielleicht kann ReadSection nur begrenzt lesen oder Listbox nur begrenzt aufnehmen?

Uwe Raabe 6. Aug 2009 11:44

Re: Ini Readsection begrenzt?
 
Welche Delphi-Version und welches Betriebssystem verwendest du?

gogl1985 6. Aug 2009 11:47

Re: Ini Readsection begrenzt?
 
Es handelt sich um Delphi 5 Professional und Windows XP SP3

TeronG 6. Aug 2009 12:39

Re: Ini Readsection begrenzt?
 
Zitat:

Zitat von HeikoAdams
... die maximale Größe von Ini-Datein auf 64 K(?)B begrenzt ist.

JUP! Die INI ist Definitiv begrenzt! (Durfte ich am eigenen leibe erleben (D7)) EDIT: ich damals


Wenn du nur was mitloggen möchtest könntest du ja auch ne .txt Datei nehmen. (AppendStringToFile)
Oder du versuchst mal BigINIFile.

Uwe Raabe 6. Aug 2009 12:41

Re: Ini Readsection begrenzt?
 
Zitat:

Zitat von gogl1985
Es handelt sich um Delphi 5 Professional

In Delphi 5 ist der Puffer für ReadSection auf 16kByte beschränkt. Versuch stattdessen mal TMemInifile.

HeikoAdams 6. Aug 2009 13:14

Re: Ini Readsection begrenzt?
 
Zitat:

Zitat von gogl1985
Die Ini Datei dient als Protokoll.

Für sowas würde ich immer entweder eine Tabelle in einer Datenbank oder eine Textdatei nehmen, aber niemals nienicht eine Ini-Dateien. Die sind als reine Konfiguratiosdateien konzipiert. Daher wohl das Limit von 64 KB.

TeronG 6. Aug 2009 13:27

Re: Ini Readsection begrenzt?
 
bissel OT:
Zitat:

Zitat von HeikoAdams
...Daher wohl das Limit von 64 KB.

Naja. Ich glaube mal nicht, dass das Limit deswegen absichtlich eingebaut wurde. :P
Aber evtl. wurde es deswegen noch nie beseitigt/berichtigt. :gruebel:
Und es ist ja auch "alte Technologie". (aber fein und einfach für kleine Configs)

himitsu 6. Aug 2009 13:32

Re: Ini Readsection begrenzt?
 
Zitat:

Zitat von HeikoAdams
Daher wohl das Limit von 64 KB.

das Limit stammt wohl eher daher, daß nur ein Speicher von 64 KB reserviert wird (eine Speicherseite von Windows).
da wird die INI dann reingeladen, die Änderung vorgenommen und alles neu gespeichert.

WInfo 6. Aug 2009 14:09

Re: Ini Readsection begrenzt?
 
Zitat:

Zitat von TeronG
bissel OT:
Zitat:

Zitat von HeikoAdams
...Daher wohl das Limit von 64 KB.

Naja. Ich glaube mal nicht, dass das Limit deswegen absichtlich eingebaut wurde. :P
Aber evtl. wurde es deswegen noch nie beseitigt/berichtigt. :gruebel:

Hatte ja damals auch dicke ausgereicht, bis alle Programme damit anfingen allen möglichen Schrott in die .INI zu schreiben. Dann wurde es halt recht eng und M$ hat dann das Update (Registry) auf dem Markt gebracht, welches noch einiges mehr an Daten ermöglicht. Was leider auch nicht so glücklich war...

gogl1985 6. Aug 2009 14:19

Re: Ini Readsection begrenzt?
 
Vielen Dank, also mit TMemIniFile funktioniert es!

Ist nur die Frage wieviel Speicher TMemIniFile unterstützt.

Uwe Raabe 6. Aug 2009 14:22

Re: Ini Readsection begrenzt?
 
Zitat:

Zitat von gogl1985
Ist nur die Frage wieviel Speicher TMemIniFile unterstützt.

Die Ini-Datei kann bis 2GB groß werden - theoretisch...

Luckie 7. Aug 2009 00:20

Re: Ini Readsection begrenzt?
 
Zitat:

Zitat von himitsu
Zitat:

Zitat von HeikoAdams
Daher wohl das Limit von 64 KB.

das Limit stammt wohl eher daher, daß nur ein Speicher von 64 KB reserviert wird (eine Speicherseite von Windows).
da wird die INI dann reingeladen, die Änderung vorgenommen und alles neu gespeichert.

Ich hatte bisher immer 8 KB im Kopf.

Zitat:

Zitat von WInfo
Hatte ja damals auch dicke ausgereicht, bis alle Programme damit anfingen allen möglichen Schrott in die .INI zu schreiben. Dann wurde es halt recht eng und M$ hat dann das Update (Registry) auf dem Markt gebracht, welches noch einiges mehr an Daten ermöglicht. Was leider auch nicht so glücklich war...

Das war wohl nur ein Grund von vielen. Viel wichtiger wahr wohl, dass man in der Registry Daten strukturierter ablegen kann.

Trotzdem halte ich es nicht für gut Ini-Dateien als Protokolldateien einzusetzen, dafür sind sie einfach nicht gedacht.

himitsu 7. Aug 2009 01:26

Re: Ini Readsection begrenzt?
 
das, was Windows intern verwaltet könnten 8 KB sein (oder 4 bzw. 16 KB weis es grad auch nicht),
aber das was Windows weiterreicht, ist an 64 KB-Grenzen ($0001xxxx) ausgerichtet.

Maik81ftl 5. Apr 2011 20:24

AW: Ini Readsection begrenzt?
 
Habe da auch mal eine Frage, ich verwende in dem sinne keine wirkliche ini-Datei, allerdings die Systematik dieser Datei.

Wenn ich nun Werte auslese werden bei mir ebendfalls alle einträge "Verschluckt"

an der Größe kann es auf jedenfall nicht liegen, da ich in diesem programm schon mit einer File von 1,0 KB erfolgreich daten innerhal des Programmes verwalte. Die datei, welche ich verwalte hat selbst eine Größe von 62 Byte.

Hier der entsprechende Code für die verwaltung

Delphi-Quellcode:
function TUser.GetUserList: TStringlist;
var s, _s: String;
    Count: Byte;
begin
  fStringList2:= TStringList.Create;
  Count:= 0;
  fFilename:= Format('%s%s', [fPath, fExt2+'.'+fList]);
  if FileExists(fFilename) then begin
    // Userliste Laden
    fStringlist2.LoadFromFile(fFileName);
    with TIniFile.Create(fFilename) do try
      S:= Format('%s', [fList]);
      ReadSection(s, fStringList);
{      for Count:= 1 to fStringList2.Count do
        begin
        _S:= ReadString(s, fList+intToStr(Count), ' ');
        fStringList.Add(_S);
        end; }
      finally
        Free;
      end;
    end;
  TempS:= IntToStr(fStringList.Count);
  Result:= fStringList;
end;

Delphi-Quellcode:
      S:= Format('[%s]', [fList]);
Delphi-Quellcode:
      S:= Format('%s', [fList]);

rollstuhlfahrer 5. Apr 2011 22:38

AW: Ini Readsection begrenzt?
 
Den übermäßigen Gebrauch von Format brauchst du gar nicht. Um 2 Strings aneinander zu pappen kann man auch ganz einfach machen: String1 + String2. (Nur so als Hinweis). Und ein
Delphi-Quellcode:
Format('%s', [String1])
hat keine andere Wirkung als die Variable selber.

Zu dem anderen Teil aus deinem Code: Du verwendest mehr oder weniger 2 Stringlisten, die irgendwo als globale Variablen vorliegen. Das finde ich höchst fraglich, da du eine der beiden auch noch als Rückgabewert deiner Funktion verwendest.
Was ich nicht verstehe ist, warum du eine StringList aufmachst, dort den gesamten Inhalt reinlädst und diese dann als Memory-Leak frei rumlaufen lässt. -> Erst mal aufräumen.

Außerdem muss man eine Variable vor einer FOR-Schleife nicht initialisieren. Das kontert Delphi nur mit einer Warnung auf eine überflüssige Zuweisung.

Bernhard

himitsu 9. Apr 2011 07:32

AW: Ini Readsection begrenzt?
 
Was heißt "Verschluckt"?
Ist fStringList danach noch leer? (und wurde fStringList auch irgendwo erstellt? )

Wie sieht deine "es ist keiner, aber sieht fast wie eine INI-Datei aus"-Datei denn aus? (also was ist da drin)

Maik81ftl 9. Apr 2011 08:58

AW: Ini Readsection begrenzt?
 
Zitat:

Zitat von rollstuhlfahrer (Beitrag 1093322)
Den übermäßigen Gebrauch von Format brauchst du gar nicht. Um 2 Strings aneinander zu pappen kann man auch ganz einfach machen: String1 + String2. (Nur so als Hinweis). Und ein
Delphi-Quellcode:
Format('%s', [String1])
hat keine andere Wirkung als die Variable selber.

Ähmmm in der File, welche in der TStringlist2 liegen befinden sich Mehrere Zeilen. *mal anmerk*

Zitat:

Zitat von rollstuhlfahrer (Beitrag 1093322)
Zu dem anderen Teil aus deinem Code: Du verwendest mehr oder weniger 2 Stringlisten, die irgendwo als globale Variablen vorliegen. Das finde ich höchst fraglich, da du eine der beiden auch noch als Rückgabewert deiner Funktion verwendest.
Was ich nicht verstehe ist, warum du eine StringList aufmachst, dort den gesamten Inhalt reinlädst und diese dann als Memory-Leak frei rumlaufen lässt. -> Erst mal aufräumen.

Die TStringlisten sind einzig und allein in der klasse definiert. Das mit dem Speicherleak hat sich schon lange erledigt.

Zitat:

Zitat von rollstuhlfahrer (Beitrag 1093322)
Außerdem muss man eine Variable vor einer FOR-Schleife nicht initialisieren. Das kontert Delphi nur mit einer Warnung auf eine überflüssige Zuweisung.

Was das angeht, ist das noch ein Überbleibsel aus der Fehlersuche unter verwendung einer Repeat Until- Schleife.
und wenn du dir mein Profil richtig anschauen würdest, würdest du sehen, das ich kein geld aufgeben muß, um Pascal-Programme zu schreiben

Zitat:

Zitat von himitsu (Beitrag 1094042)
Was heißt "Verschluckt"?
Ist fStringList danach noch leer? (und wurde fStringList auch irgendwo erstellt? )

Wie sieht deine "es ist keiner, aber sieht fast wie eine INI-Datei aus"-Datei denn aus? (also was ist da drin)

Ähmmm Siehst du diese Befehlszeile???
Delphi-Quellcode:
fStringList2:= TStringList.Create;
was in der File drinne steht???

Code:
[[UserList]]
UserList1=Maxim Mustermann
UserList2=Maik Geßner
da ich aber den fehler schon gefunden habe spielt das nun mehr oder weniger keine rolle mehr...

Sir Rufo 9. Apr 2011 09:06

AW: Ini Readsection begrenzt?
 
Zitat:

Zitat von Maik81ftl (Beitrag 1094052)
Zitat:

Zitat von himitsu (Beitrag 1094042)
Was heißt "Verschluckt"?
Ist fStringList danach noch leer? (und wurde fStringList auch irgendwo erstellt? )

Ähmmm Siehst du diese Befehlszeile???
Delphi-Quellcode:
fStringList2:= TStringList.Create;

ja und? Ist bei FreePascal fStringList2 das gleiche wie fStringList?
Seltsam, da bleib ich doch bei Delphi ;)

Maik81ftl 9. Apr 2011 09:12

AW: Ini Readsection begrenzt?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1094053)
Zitat:

Zitat von Maik81ftl (Beitrag 1094052)
Zitat:

Zitat von himitsu (Beitrag 1094042)
Was heißt "Verschluckt"?
Ist fStringList danach noch leer? (und wurde fStringList auch irgendwo erstellt? )

Ähmmm Siehst du diese Befehlszeile???
Delphi-Quellcode:
fStringList2:= TStringList.Create;

ja und? Ist bei FreePascal fStringList2 das gleiche wie fStringList?
Seltsam, da bleib ich doch bei Delphi ;)

Ähmmm da fStringList : TStringlist und fStringsList2 : TStringlist deklariert ist würde ich sagen ja.

wie sich schon daher erkennen lässt, verwende ich in dem Sinne eine die TStringlist, wie diese auch in einem(r) TMemo, TComboBox, und co zu einsatz kommen.

Sir Rufo 9. Apr 2011 09:15

AW: Ini Readsection begrenzt?
 
Zitat:

Zitat von Maik81ftl (Beitrag 1094056)
Zitat:

Zitat von Sir Rufo (Beitrag 1094053)
Zitat:

Zitat von Maik81ftl (Beitrag 1094052)
Zitat:

Zitat von himitsu (Beitrag 1094042)
Was heißt "Verschluckt"?
Ist fStringList danach noch leer? (und wurde fStringList auch irgendwo erstellt? )

Ähmmm Siehst du diese Befehlszeile???
Delphi-Quellcode:
fStringList2:= TStringList.Create;

ja und? Ist bei FreePascal fStringList2 das gleiche wie fStringList?
Seltsam, da bleib ich doch bei Delphi ;)

Ähmmm da fStringList : TStringlist und fStringsList2 : TStringlist deklariert ist würde ich sagen ja.

wie sich schon daher erkennen lässt, verwende ich in dem Sinne eine die TStringlist, wie diese auch in einem(r) TMemo, TComboBox, und co zu einsatz kommen.

Aha, also du meinst dass es reicht für fStringList2 eine Instanz zu erzeugen und dann hast du automatisch in fStringList auch eine Instanz? :roll:

Maik81ftl 9. Apr 2011 09:22

AW: Ini Readsection begrenzt?
 
Zitat:

Zitat von Sir Rufo (Beitrag 1094057)
Zitat:

Zitat von Maik81ftl (Beitrag 1094056)
Zitat:

Zitat von Sir Rufo (Beitrag 1094053)
Zitat:

Zitat von Maik81ftl (Beitrag 1094052)
Zitat:

Zitat von himitsu (Beitrag 1094042)
Was heißt "Verschluckt"?
Ist fStringList danach noch leer? (und wurde fStringList auch irgendwo erstellt? )

Ähmmm Siehst du diese Befehlszeile???
Delphi-Quellcode:
fStringList2:= TStringList.Create;

ja und? Ist bei FreePascal fStringList2 das gleiche wie fStringList?
Seltsam, da bleib ich doch bei Delphi ;)

Ähmmm da fStringList : TStringlist und fStringsList2 : TStringlist deklariert ist würde ich sagen ja.

wie sich schon daher erkennen lässt, verwende ich in dem Sinne eine die TStringlist, wie diese auch in einem(r) TMemo, TComboBox, und co zu einsatz kommen.

Aha, also du meinst dass es reicht für fStringList2 eine Instanz zu erzeugen und dann hast du automatisch in fStringList auch eine Instanz? :roll:

Ne des selber, habe ich im Constructor schon mit der Zeile
Delphi-Quellcode:
fStringList:= TStringList.Create;
erzeugt. also von daher hab ich auch schon meine erfahrungen machen müßen.

DeddyH 9. Apr 2011 14:52

AW: Ini Readsection begrenzt?
 
Und was ist mit fStringlist2? Die wird jedesmal neu erzeugt, wenn GetUserList aufgerufen wird, die alte Instanz verbleibt im Speicher und kann nicht mehr freigegeben wurde, weil die Variable ja nun auf die neue Instanz zeigt. Deshalb auch die Hinweise auf Speicherlecks.

himitsu 9. Apr 2011 18:43

AW: Ini Readsection begrenzt?
 
Zitat:

Code:
[[UserList]]

Das ist eben kein gültiger Bezeichner für eine Sektion ... da braucht man sich also nicht wundern, wenn etwas nicht geht. :stupid:


Alle Zeitangaben in WEZ +1. Es ist jetzt 02:37 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