Autor Beitrag
Silas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: Fr 09.05.08 12:54 
user profile iconRegan hat folgendes geschrieben:
Aber eine StringList mit den Namen würde mir eigentlich schon zureichen.

Ach so, ich hätte gedacht du meinst nicht die Namen, sondern die Werte. Das kommt auf jeden Fall mal so rein, vielleicht auch noch Methoden fürs Auslesen der Werte, mal sehen, ob mir was ordentliches einfällt. :)

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Fr 09.05.08 16:08 
user profile iconSilas hat folgendes geschrieben:
user profile iconRegan hat folgendes geschrieben:
Aber eine StringList mit den Namen würde mir eigentlich schon zureichen.

Ach so, ich hätte gedacht du meinst nicht die Namen, sondern die Werte. Das kommt auf jeden Fall mal so rein, vielleicht auch noch Methoden fürs Auslesen der Werte, mal sehen, ob mir was ordentliches einfällt. :)

Nur nochmal zur Absicherung:
Ini hat folgendes geschrieben:
[testSection]
testName=testWert

Die meine ich :wink: .
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Fr 09.05.08 19:29 
Hallo Silas,

kannst bitte in dem Threadtitel die aktuelle Versionsnummer mit einbauen? Denn bei Thunderbird denke ich immer: "nicht schon wieder nen Post dort", wenn dagegen auf einmal ne neue Versionsummer auftaucht, denke ich immer: "Ah mal schaun, was es neues gibt" :mrgreen: .
Silas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: Fr 09.05.08 22:36 
user profile iconRegan hat folgendes geschrieben:
Nur nochmal zur Absicherung:
Ini hat folgendes geschrieben:
[testSection]
testName=testWert

Die meine ich :wink: .
Gut. Ich auch ;) .


user profile iconHeiko hat folgendes geschrieben:
kannst bitte in dem Threadtitel die aktuelle Versionsnummer mit einbauen?
Bitteschön! ;)

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
Silas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: Di 13.05.08 17:08 
Dieses Release ist doch deutlich dicker geworden, als ich es ursprünglich geplant hatte. Das Feature mit der Werteliste habe ich auch auf Sektionen ausgedehnt, und in Verbindung damit könnt ihr auf die Einträge auch über Indizes zugreifen (Das gilt sowohl für EnterSection als auch für ReadValue und DeleteEntry). Die Funktion zum Wiederherstellen einzelner Einträge könnte für den einen oder anderen ganz interessant sein, der alle Werte bis auf einige wenige löschen will.

Neue Version 3.1
[+] Es gibt nun die Möglichkeit, die Sektions- und Wertenamen in eine Stringliste zu exportieren
[+] Im Zusammenhang ist es nun möglich, sowohl die Sektionen als auch die Werte mit Indizes anzusprechen
[*] Ein Bug in den Binary-En/Decode-Methoden wurde beseitigt (Danke @ user profile iconBenBE)
[+] Im Destruktor kann jetzt angegeben werden kann, ob Änderungen gespeichert werden sollen
[+] Gelöschte Sektionen und Werte können wiederhergestellt werden.
[*] Ein Bug, der Empty falsch zurückgegeben hat, wurde gefixt
[+] Die betretene Sektion kann jetzt verlassen werden (hat im Moment noch nicht viel Sinn)
[*] Und noch ein paar unwichtige Änderungen

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Di 13.05.08 20:43 
user profile iconSilas hat folgendes geschrieben:
Dieses Release ist doch deutlich dicker geworden, als ich es ursprünglich geplant hatte. Das Feature mit der Werteliste habe ich auch auf Sektionen ausgedehnt, und in Verbindung damit könnt ihr auf die Einträge auch über Indizes zugreifen (Das gilt sowohl für EnterSection als auch für ReadValue und DeleteEntry). Die Funktion zum Wiederherstellen einzelner Einträge könnte für den einen oder anderen ganz interessant sein, der alle Werte bis auf einige wenige löschen will.

Da bringt mir die neue Version ja gleich doppelt etwas. Sehr gut :zustimm: .
Silas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: So 18.05.08 14:31 
user profile iconRegan hat folgendes geschrieben:
Sehr gut :zustimm: .

Vielen Dank! Da schieb ich doch gleich noch ein Release nach: :)

Version 3.2
[+] Die Unit arbeitet jetzt mit einer eigenen, schnelleren Char-Pos-Funktion
[+] Die Read-/WriteBinary-Methoden arbeiten jetzt auch mit Streams
[*] Alle Assembler-Methoden wurden überarbeitet
[*] Ein Fehler, der bei Read-/WriteBinary Probleme mit einigen Bytecodes verursacht hat, wurde behoben
[+] Der Parser/Writer arbeitet jetzt mit einem MemoryStream als Zwischenspeicher
[+] Stringlisten (TStrings) lassen sich nun über ReadStringList/WriteStrinList lesen/schreiben
[+] WriteValue-Methoden akzeptieren jetzt ebenfalls Indizes
[*] Die Read-/WriteBool-Methoden verwenden nun Standardmäßig Boolean-Strings ('true', 'false') anstatt von 0 und 1
[*] WriteFloat schreibt Floats jetzt standardmäßig mit '.' als DecimalSeparator


Mit dem Stream-Handling haben jetzt alle Geeks unter euch, die schon immer mal Screenshots und DVD-Rips in INIs speichern wollten, endlich die Möglichkeit dazu ;).

Die Boolean-Methoden sind trotz dem, dass sie ab jetzt Strings schreiben, zu 0 und 1 abwärtskompatibel. Bei der Erkennung true/false wird, wie unter C üblich, alles, was nicht false ist, als true angenommen.

Natürlich freu' ich mich weiterhin über Feedback :)

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: So 18.05.08 14:37 
Mir ist noch was aufgefallen: Bei der procedure ListValues, könntest du da bitte als ersten Parameter auch eine Sektion angeben, sonst muss ich die immer vorher aufrufen?
Silas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: So 18.05.08 19:48 
user profile iconRegan hat folgendes geschrieben:
Bei der procedure ListValues, könntest du da bitte als ersten Parameter auch eine Sektion angeben, sonst muss ich die immer vorher aufrufen?

Hm, ich glaube, das würde mir mein Konzept ein wenig durcheinanderwerfen :? . Das ist doch auch nur eine Zeile mehr.

Für welchen Zweck brauchst du's denn? Wenn man eine Werteliste abruft, dann doch meistens, um nachher darauf zuzugreifen.

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
Gahero
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starofftopic star
Beiträge: 193

Win Vista HP 64bit
Delphi 2007 Pro
BeitragVerfasst: So 18.05.08 20:24 
Ich würde das so lassen, da grenzt du dich mehr von der normalen TInifile noch mehr ab und der Code wird (finde ich) übersichtlicher. Die neuen Features sind echt gelungen, das kann ich gut gebrauchen... Weiter so.
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: So 18.05.08 20:57 
Könnte man doch mit drei Befehlen machen:

1. einer ohne Parameter (aktuelle Sektion)
2. per Index (öffnet die Sektion intern, ruft die parameterlose Version auf und schließt die Sektion nachher wieder)
3. per Name (halt wie 2., nur mit Name statt Index zur Identifikation der Sektion)

Damit sollte jeder seinen Lieblingsweg haben.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Silas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: So 18.05.08 21:41 
user profile iconGahero hat folgendes geschrieben:
Ich würde das so lassen, da grenzt du dich mehr von der normalen TInifile noch mehr ab und der Code wird (finde ich) übersichtlicher.
Ich finde auch, dass die Änderung hier nicht wirklich sinnvoll ist, weil sie keine neue Funktionalität enthält und damit IMHO zu einem schlechten Design führt.

user profile iconGahero hat folgendes geschrieben:
Die neuen Features sind echt gelungen, das kann ich gut gebrauchen... Weiter so.
Vielen Dank! Werd mich bemühen. :)

user profile iconBenBE hat folgendes geschrieben:
Könnte man doch mit drei Befehlen machen:

1. einer ohne Parameter (aktuelle Sektion)
2. per Index (öffnet die Sektion intern, ruft die parameterlose Version auf und schließt die Sektion nachher wieder)
3. per Name (halt wie 2., nur mit Name statt Index zur Identifikation der Sektion)
So hätte ich das denke ich auch gelöst.


@user profile iconRegan: In welchem Zusammenhang bzw. warum lässt du eine Werteliste erstellen ohne nachher auf die Werte zuzugreifen? Wie sieht in dem Fall das Design-Konzept von deiner INI aus?

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
Regan
ontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic starofftopic star
Beiträge: 2157
Erhaltene Danke: 72


Java (Eclipse), Python (Sublimetext 3)
BeitragVerfasst: Di 20.05.08 17:22 
user profile iconSilas hat folgendes geschrieben:
@user profile iconRegan: In welchem Zusammenhang bzw. warum lässt du eine Werteliste erstellen ohne nachher auf die Werte zuzugreifen? Wie sieht in dem Fall das Design-Konzept von deiner INI aus?

Ic glaube ich habe mich da etwas falsch ausgedrückt. Ich wollte noch zusätzlich den Parameter Sectionname.
Also dann so: procedure ListValues(const nName: String; Dest: TStrings);.
Sonst muss ich vorher immer die Section betreten. Das ist aber manchmal echt bescheuert sehr ungünstig, da ich manchmal nur einen Wert abfragen will, oder, wie bei ListValues, nur die Werte auslesen will und im Endeffekt in dem weiteren Codeabschnitt nichts mehr damit anfange.

Ich hoffe das war verständlicher ausgedrückt.
Silas Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 478

Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
BeitragVerfasst: Di 20.05.08 18:28 
Hm...

ausblenden Ohne Änderung
1:
2:
3:
4:
5:
for i := 0 to 255 do 
  if SectionExists('MySection' + IntToStr(i)) then begin
    EnterSection;
    ListValues(MySectionValues[i]);
  end;

ausblenden Mit Änderung
1:
2:
3:
for i := 0 to 255 do
  if SectionExists('MySection' + IntToStr(i)) then
    ListValues('MySection' + IntToStr(i), MySectionValues[i]);

Wo ist beim ersten Code der Mehraufwand? :gruebel:   Es fällt gerade mal ein begin-end-Block raus.

Code- oder Geschwindigkeitstechnisch würde sich auch nichts ändern, weil diese Version einfach nur die Aufrufe nacheinenader ausfürhen würde... Bin mir jetzt aber nicht sicher, ob ich dein Problem richtig verstanden hab. :nixweiss:


Vielleicht noch ein Tipp zur Strukturierung einer INI:
Ich hab mir da eine Methode angewöhnt, mit der ich eigentlich immer recht zufrieden bin. Die Sektionen sind immer eindeutig einer Funktion zugeordnet, eine z.B. für die Einstellungen, eine als "Datenbank", usw. Die meinsten meiner INIs haben deswegen auch nur eine einzige Sektion.
Die Werte leg ich immer im "OOP-Style" an, d.h. bei mehreren, durchnummerierten a la <Nummer>.[<Kategorie>.]<Wertname> .

ausblenden Ein Beispiel
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
[items]
count=3
0.id=57a3e1425
0.name=myitem1
0.pos.left=20
0.pos.top=15
1.id=f9f2315ab
1.name=myitem2
1.pos.left=35
1.pos.top=10
2.id=a163c057d
2.name=myitem3
2.pos.left=85
2.pos.top=110

So lässt sich der Inhalt auch recht schnell und sauber in schleifen auslesen.

_________________
Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat ;-)
Hendi48
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 271



BeitragVerfasst: Mi 10.09.08 19:16 
Ich kann die Unit in Delphi 2009 nicht compilen :(
Es scheitert an der Funktion CharPos, Zeile 1470:
ausblenden Delphi-Quelltext
1:
mov al, Chr             // Chr suchen					

[DCC Fehler] FastIniFiles.pas(1470): E2107 Operandengröße stimmt nicht überein
Ich glaube da wurde was für Unicode Support geändert..
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 10.09.08 19:19 
Versuch mal
ausblenden Quelltext
1:
MOV AL, BYTE PTR [Chr]					

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.
Hendi48
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 271



BeitragVerfasst: Mi 10.09.08 19:55 
Danke, so geht es!
dummzeuch
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 593
Erhaltene Danke: 5


Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
BeitragVerfasst: Mi 10.09.08 20:38 
Eine Funktion, die ich fuer .ini Files haeufiger brauche, ist der Vergleich von zwei Dateien. Prinzipiell ginge das auch mit einem File-Differ, aber leider funktioniert das nur, wenn sich die Reihenfolge der Eintraege nicht geaendert hat.

Kann man vielleicht mit Deiner Klasse die Eintraege in einer bestimmten Reihenfolge abspeichern, so dass man zwei .ini Files damit in eine vorgegebene Reihenfolge bringen kann, um sie anschliessend zu vergleichen?

(Oder kennt vielleicht jemand ein Tool, was zwei .ini Files vergleicht?)
Heiko
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 3169
Erhaltene Danke: 11



BeitragVerfasst: Mi 10.09.08 20:45 
ToroiseSVN kann Textdateien vergleichen. Und nix weiter ist ja eine INI. Probier es mal damit. Vlt reicht es dir (sortieren tut der natürlich nicht).
BenBE
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 8721
Erhaltene Danke: 191

Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
BeitragVerfasst: Mi 10.09.08 21:15 
Dann sollte er aber nicht TortoiseMerge nehmen, sondern WinMerge; der erkennt auch verschobene Blöcke korrekt.

_________________
Anyone who is capable of being elected president should on no account be allowed to do the job.
Ich code EdgeMonkey - In dubio pro Setting.