Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Delphi [INI] Wie lange darf ein Key sein? (https://www.delphipraxis.net/158361-%5Bini%5D-wie-lange-darf-ein-key-sein.html)

Muellermilchtrinker 14. Feb 2011 17:29

[INI] Wie lange darf ein Key sein?
 
Hallo DP,

habe hier mal gelesen, dass ein Key in einer INI-Datei nur eine bestimmte Länge haben darf. Habe dazu leider nichts mehr gefunden, deswegen wollte ich euch fragen.
Code:
[ID]
101=Wie lang darf das hier sein?
Vielleicht weiß ja jemand die Antwort. Danke euch.

Assarbad 14. Feb 2011 17:31

AW: [INI] Wie lange darf ein Key sein?
 
Moin,

also erstmal wäre das der Wert und nicht der Schlüssel (Key), aber die Antwort auf deine Frage hängt komplett davon ab was benutzt wird um die INI zu lesen. Also sei doch mal etwas spezifischer ;)

Muellermilchtrinker 14. Feb 2011 17:33

AW: [INI] Wie lange darf ein Key sein?
 
zum lesen die normale mitgelieferte Inifiles

WM_CLOSE 14. Feb 2011 17:44

AW: [INI] Wie lange darf ein Key sein?
 
Du könntest mal das ausprobieren:
Delphi-Quellcode:
var
  i:Integer;
  s:String;
  ini:TIniFile;
  iTemp:Integer;//damit uns i nicht bei einer exception flöten geht
begin
  ini:=TIniFile.Create('C:\Temp\test.ini');
  try
    for i:=0 to maxint do
    begin
      iTemp:=i;
      s:=StringOfChar('a', i);
      ini.writeString('new-section', 'newKey', s);
    end;
  except
    ShowMessage(Inttostr(iTemp));
  end;
end;
Ich kanns mangels Delphi nicht testen

Namenloser 14. Feb 2011 17:49

AW: [INI] Wie lange darf ein Key sein?
 
Zitat:

Zitat von WM_CLOSE (Beitrag 1081680)
Du könntest mal das ausprobieren:
Delphi-Quellcode:
...

So dauert das doch ewig... da würd ich eher ne binäre Suche vorschlagen.

himitsu 14. Feb 2011 17:58

AW: [INI] Wie lange darf ein Key sein?
 
In älteren Windows-Versionen gab es mal eine 64 KB-Grenze, für die ganze Datei.

Ansonsten sollten in dem Wert (Value) besser keine Sonderzeichen < 32 (Leerzeichen) enthalten sein, vorallem keine Zeilenumbrüche (#10, #13) oder die #0.

PS: Bei TIniFile wird für jeden einzelnen Schreib/Lesezugriff, ala ini.ReadString oder ini.WriteString, die komplette Datei ausgelesen und dann eventuell der eine Wert verändert und alles neu abgespeichert.
Das ist auch der Grund, warum das Teil so langsam ist und weswegen es eigentlich nicht für große Datenmengen geeignet ist. :stupid:


und jupp
Delphi-Quellcode:
for i := 0 to 31 do
begin
  iTemp := i;
  s := StringOfChar('a', $1 shl i);
  ini.writeString('new-section', 'newKey', s);
end;

WM_CLOSE 14. Feb 2011 17:59

AW: [INI] Wie lange darf ein Key sein?
 
Ich schätze es wird bei 255 eh aufhören oder?

Muellermilchtrinker 14. Feb 2011 18:00

AW: [INI] Wie lange darf ein Key sein?
 
Also ich habs mal ne kurze Zeit laufen gehabt. Bin auf 22,7 MB gekommen. Das ist auf jedenfall genug. Würd mich aber trotzdem interessieren was die absolute Grenze ist. :stupid:

WM_CLOSE 14. Feb 2011 18:05

AW: [INI] Wie lange darf ein Key sein?
 
Eigentlich lag doch die Grenze bei Inis bei 64 kb??:?:

himitsu 14. Feb 2011 18:09

AW: [INI] Wie lange darf ein Key sein?
 
Das wurde von Microsoft zwischen Win98 und XP/Vista geändert.
Die absolute Grenze wird aktuell irgendwo zwischen 0 und 1 GB liegen. (Grenze von 2 GB virtuellem Speicher ... und eventuell noch einer Arbeitskopie der INI, also nur die Hälfte)

Luckie 14. Feb 2011 19:15

AW: [INI] Wie lange darf ein Key sein?
 
Also wenn ich schon so eine Frage stellen muss, dann stimmt was mit meinem Konzept nicht.

WM_CLOSE 14. Feb 2011 19:48

AW: [INI] Wie lange darf ein Key sein?
 
Luckie hat Recht (natürlich)
Wenn du große Daten Ablegen willst, speicere sie lieber in einer Typisierten Datei ö.Ä, denn für Rohdaten ist die Ini nicht gemacht. Außerdem ist es nicht sonderlich performant.

Natürlch kann es auch sein, dass du die Frage nur Interressehalber gestellt hast. Das ist dann was anderes

Assarbad 14. Feb 2011 21:03

AW: [INI] Wie lange darf ein Key sein?
 
Zitat:

Zitat von WM_CLOSE (Beitrag 1081704)
Natürlch kann es auch sein, dass du die Frage nur Interressehalber gestellt hast. Das ist dann was anderes

Siehe:
Zitat:

Zitat von Muellermilchtrinker (Beitrag 1081687)
Also ich habs mal ne kurze Zeit laufen gehabt. Bin auf 22,7 MB gekommen. Das ist auf jedenfall genug. Würd mich aber trotzdem interessieren was die absolute Grenze ist. :stupid:


Dezipaitor 14. Feb 2011 23:37

AW: [INI] Wie lange darf ein Key sein?
 
Was sagt Raymond Chen dazu?

http://blogs.msdn.com/b/oldnewthing/...6/6523907.aspx

himitsu 14. Feb 2011 23:53

AW: [INI] Wie lange darf ein Key sein?
 
Zitat:

Zitat von Raymond Chen
INI files don't support Unicode.

falsch.
Zitat:

Zitat von Raymond Chen
INI files are limited to 32KB in size.

Ich bin mir eigentlich relativ sicher, daß es ein ganzer 64 KB-Speicherblock (Arbeitspuffer) war, da der Speicher wohl bedingt durch die alten 16 Bit so gruppiert wurde (2^16 Byte * 2^16 = 4 GB aka 32 Bit). :gruebel:

(nja, zumindestens sein erster Punkt ist definitiv falsch)

Aber sonst kann ich ihm zustimmen.

Assarbad 15. Feb 2011 00:12

AW: [INI] Wie lange darf ein Key sein?
 
Zitat:

Zitat von himitsu (Beitrag 1081750)
(nja, zumindestens sein erster Punkt ist definitiv falsch)

Falsch ist so ein absolutes Wort: "There is a wacked out way you can create a Unicode INI file, but you have to step outside the API in order to do it."

Du verstehst schon Englisch, oder? :zwinker:

himitsu 15. Feb 2011 00:40

AW: [INI] Wie lange darf ein Key sein?
 
Es sind eigentlich keine externen Schritte nötig, die WinAPI, welche in TIniFile gekapselt ist, kann das von sich aus.
Zitat:

Zitat von WritePrivateProfileString
If the file was created using Unicode characters, the function writes Unicode characters to the file. Otherwise, the function writes ANSI characters.

Ist eine INI erstmal erstellt, kann man (mit Hausmitteln der INI-WinAPI) dieses nicht mehr umstellen.

Getestet mit Delphi2009 und WinXP.
Vor Delphi2009 bekommt man kein Unicode da rein, aber wenn die INI einmal Unicode ist, dann sollte auch Delphi 7 damit zurechtkommen (auch wenn es selber nur ANSI rausgekommt).

Assarbad 15. Feb 2011 01:12

AW: [INI] Wie lange darf ein Key sein?
 
Zitat:

Zitat von himitsu (Beitrag 1081754)
Vor Delphi2009 bekommt man kein Unicode da rein, aber wenn die INI einmal Unicode ist, dann sollte auch Delphi 7 damit zurechtkommen (auch wenn es selber nur ANSI rausgekommt).

Das klingt ja genau wie in dem von Raymond verlinkten Beitrag hier :stupid: ... denn im Gegensatz zu dir hat Raymond seine Aussage relativiert, während du einen Teil seiner Aussage (zumal den Teil welchen er relativiert hat) genommen hast, nur um die Diskussion in den Augen der Leser zu deinen Gunsten zu entscheiden (die ersten drei Absätze reichen ggf. schon) ...

Verdammt noch eins, die von Schopenhauer beschriebenen Tricks haben sich in den über hundertfünfzig Jahren seit Niederschrift wohl doch weiter rumgesprochen als anzunehmen war ... :zwinker:

himitsu 15. Feb 2011 07:27

AW: [INI] Wie lange darf ein Key sein?
 
Wo ist da ein Link? :shock:
Nja, Das zeigt dann wenigstens, daß er den selben Beitrag zitiert hat und Microsoft seit 7 Jahren nicht mehr viel dort dran gemacht hat. :stupid:
( irgendwo dort drin http://msdn.microsoft.com/en-us/library/ms725501.aspx )

Ist aber och böse, wenn er sowas gleich als ersten Punkt schreibt und da nicht gleich das Richtige verlinkt. :angle2:

Gausi 15. Feb 2011 07:58

AW: [INI] Wie lange darf ein Key sein?
 
Wenn man die Werte UTF8-kodiert, klappt es auch mit alten Delphi-Versionen und Unicode in Inis. Vor Delphi 2009 war ein UTF8String ja auch nichts anderes als ein AnsiString. D.h. man muss nur vor dem Schreiben bzw. nach dem Lesen die Werte umkodieren. :-D

Große Datenmengen gehören da natürlich trotzdem nicht rein. Aber für einen Dateinamen mit Unicode-Zeichen reicht das allemal.

Assarbad 15. Feb 2011 11:32

AW: [INI] Wie lange darf ein Key sein?
 
Liste der Anhänge anzeigen (Anzahl: 1)
Zitat:

Zitat von himitsu (Beitrag 1081760)
Wo ist da ein Link? :shock:
Nja, Das zeigt dann wenigstens, daß er den selben Beitrag zitiert hat und Microsoft seit 7 Jahren nicht mehr viel dort dran gemacht hat. :stupid:

Laß mich mit einem Bild antworten ;)

Anhang 33366


Alle Zeitangaben in WEZ +1. Es ist jetzt 23:03 Uhr.

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