Autor |
Beitrag |
Silas
Beiträge: 478
Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
|
Verfasst: Fr 09.05.08 12:54
Regan 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
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: Fr 09.05.08 16:08
Silas hat folgendes geschrieben: | Regan 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 .
|
|
Heiko
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: 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" .
|
|
Silas
Beiträge: 478
Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
|
Verfasst: Fr 09.05.08 22:36
_________________ Religionskriege sind nur Streitigkeiten darüber, wer den cooleren imaginären Freund hat
|
|
Silas
Beiträge: 478
Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
|
Verfasst: 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 @ BenBE)
[+] 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
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: Di 13.05.08 20:43
Silas 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 .
|
|
Silas
Beiträge: 478
Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
|
Verfasst: So 18.05.08 14:31
Regan hat folgendes geschrieben: | Sehr gut . |
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
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: 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
Beiträge: 478
Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
|
Verfasst: So 18.05.08 19:48
Regan 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
Beiträge: 193
Win Vista HP 64bit
Delphi 2007 Pro
|
Verfasst: 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
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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
Beiträge: 478
Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
|
Verfasst: So 18.05.08 21:41
Gahero 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.
Gahero hat folgendes geschrieben: | Die neuen Features sind echt gelungen, das kann ich gut gebrauchen... Weiter so. |
Vielen Dank! Werd mich bemühen.
BenBE 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.
@ Regan: 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
Beiträge: 2157
Erhaltene Danke: 72
Java (Eclipse), Python (Sublimetext 3)
|
Verfasst: Di 20.05.08 17:22
Silas hat folgendes geschrieben: | @Regan: 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
Beiträge: 478
Windows XP Home
Delphi 2005, RAD Studio 2007, MASM32, FASM, SharpDevelop 3.0
|
Verfasst: Di 20.05.08 18:28
Hm...
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; |
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? 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.
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> .
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
Beiträge: 271
|
Verfasst: Mi 10.09.08 19:16
Ich kann die Unit in Delphi 2009 nicht compilen
Es scheitert an der Funktion CharPos, Zeile 1470:
Delphi-Quelltext
[DCC Fehler] FastIniFiles.pas(1470): E2107 Operandengröße stimmt nicht überein
Ich glaube da wurde was für Unicode Support geändert..
|
|
BenBE
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: Mi 10.09.08 19:19
Versuch mal
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
Beiträge: 271
|
Verfasst: Mi 10.09.08 19:55
|
|
dummzeuch
Beiträge: 593
Erhaltene Danke: 5
Delphi 5 ent, Delphi 6 bis Delphi XE8 pro
|
Verfasst: 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
Beiträge: 3169
Erhaltene Danke: 11
|
Verfasst: 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
Beiträge: 8721
Erhaltene Danke: 191
Win95, Win98SE, Win2K, WinXP
D1S, D3S, D4S, D5E, D6E, D7E, D9PE, D10E, D12P, DXEP, L0.9\FPC2.0
|
Verfasst: 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.
|
|
|