Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   TIniFile.Readsectionvalues - Dokumentationsfehler (https://www.delphipraxis.net/193239-tinifile-readsectionvalues-dokumentationsfehler.html)

idefix2 9. Jul 2017 12:15

TIniFile.Readsectionvalues - Dokumentationsfehler
 
Eben bin ich über einen Fehler in der Dokumentation von ReadSectionvalues gestolpert.

Hat mich einige Zeit gekostet, weil ich vor dem Codieren extra in der Dokumentation nachgeschaut habe und dann den Grund für das unerwartete Verhalten meines Programms erst an allerlei anderen Stellen gesucht habe.

In der Doku steht:
Zitat:

Beschreibung
Liest die Werte aller Schlüssel eines Abschnitts der INI-Datei in eine String-Liste ein.

ReadSectionValues liest die Schlüssel und die Werte aller Schlüssel eines Abschnitts der INI-Datei in ein String-Listenobjekt (TStrings-Nachkomme) ein. Die Schlüsselnamen und die Werte werden der String-Liste hinzugefügt. Diese haben die folgende Form:

<Schlüsselwort> = <Wert> .

Das ist falsch. ReadSectionValues fügt der String-Liste die Werte nicht hinzu, sondern es werden zuerst alle Strings der String Liste gelöscht. Werte, die schon vorher in der String-Liste waren, sind nach ReadSectionValues weg.

himitsu 9. Jul 2017 12:23

AW: TIniFile.Readsectionvalues - Dokumentationsfehler
 
Naja, "hinzugefügt" werden sie dennoch, auch wenn vorher vieleicht gelöscht wird.

Alle StringListenFunktionen der INI-Klassen leeren vorher die Liste.
Aber warum hat es dich so viel Zeit gekostet?
Das Verhalten ist doch beim Debuggen sofort zu erkennen (ab dem zweiten Aufruf) :zwinker:


Pssst, wenn du dich auf der Embarcaderowebseite einloggst, dann kannst du selber zur besseren Hilfe beitragen.
http://docwiki.embarcadero.com/Libra...dSectionValues

idefix2 9. Jul 2017 15:33

AW: TIniFile.Readsectionvalues - Dokumentationsfehler
 
Zitat:

Zitat von himitsu (Beitrag 1376293)
Naja, "hinzugefügt" werden sie dennoch, auch wenn vorher vieleicht gelöscht wird.

So, wie es dort steht, ist es nicht bloß missverständlich, sondern ganz eindeutig falsch. "Hinzugefügt" bedeutet, dass das Bestehende erhalten bleibt.


Zitat:

Zitat von himitsu (Beitrag 1376293)
Alle StringListenFunktionen der INI-Klassen leeren vorher die Liste.
Aber warum hat es dich so viel Zeit gekostet?
Das Verhalten ist doch beim Debuggen sofort zu erkennen (ab dem zweiten Aufruf) :zwinker:

Das Programm ist an einer ganz anderen Stelle, sehr viel später, gecrasht. An die Möglichkeit, dass das Problem schon beim Einlesen des ini-Files entstehen könnte, weil diese Prozedur etwas anderes macht, als man laut Dokumentation erwarten sollte, habe ich recht lange nicht gedacht. Ich habe ja vorher extra noch in der Dokumentation nachgelesen, weil ich mir eben nicht sicher war, ob der Stringlisteninhalt vor dem Einlesen gelöscht wird oder nicht.
Das Debuggen von ereignisgesteuertem Code, noch dazu in Verbindung mit Timern, ist an sich recht mühsam, weil da eben nichts sequentiell abläuft. Nachdem ich dann irgend wann doch diese Routine verdächtigt habe, ist es ohnehin schnell gegangen. :wink:

Zitat:

Zitat von himitsu (Beitrag 1376293)
Pssst, wenn du dich auf der Embarcaderowebseite einloggst, dann kannst du selber zur besseren Hilfe beitragen.
http://docwiki.embarcadero.com/Libra...dSectionValues

Ich habe mir jetzt extra einen Account angelegt, aber wo ich da etwas beitragen kann, sehe ich nicht.

bnreimer42 9. Jul 2017 16:05

AW: TIniFile.Readsectionvalues - Dokumentationsfehler
 
Ich vermute, Du kannst den Text nicht selber ändern, aber es gibt die Lasche Diskussion.

Dort wäre ein Hinweis einzutragen. Dann kann ein qualifizierter Dokumensch von Embarcadero den Hinweis aufnehmen!

Uwe Raabe 9. Jul 2017 16:36

AW: TIniFile.Readsectionvalues - Dokumentationsfehler
 
Zitat:

Zitat von idefix2 (Beitrag 1376297)
So, wie es dort steht, ist es nicht bloß missverständlich, sondern ganz eindeutig falsch. "Hinzugefügt" bedeutet, dass das Bestehende erhalten bleibt.

Das ist offensichtlich der Übersetzung geschuldet, die das "Hinzufügen" in einen separaten Satz auslagert. Im Original steht da
Zitat:

The key names and values are added to the string list as strings of the form:
Diese Formulierung stellt direkt auf die Formatierung der "key names and values" ab und vermittelt somit eben nicht direkt den Eindruck, daß die bestehenden Einträge der Stringliste beibehalten werden. Andernfalls würde man statt added den Ausdruck appended verwenden.

Was hälst du von folgender Formulierung, die sich mehr an den Originaltext anlehnt:
Zitat:

Die Schlüsselnamen und die Werte werden in der Form
<Schlüsselname> = <Wert>
in die Stringliste eingetragen.
Wäre das in dieser Form nicht so missverständlich?

Ich habe dabei auch gleich die unterschiedliche Benennung der Names (Schlüsselnamen <> Schlüsselwort) vereinheitlicht. Zusätzlichen Text zur Klarstellung würde ich nur ungern aufnehmen, da ich den zwar noch in der Englischen Version, nicht mehr aber in der Französischen und Japanischen nachpflegen kann.

idefix2 9. Jul 2017 18:29

AW: TIniFile.Readsectionvalues - Dokumentationsfehler
 
Ja, ich denke, dann wäre es klar.

Ich hätte ja eigentlich sogar eher damit gerechnet, dass die Stringlist erst gelöscht wird, obwohl es m.E. anders herum sogar besser gewesen wäre: Wenn man gelöscht haben will, genügt der Befehl Clear, während es jetzt etwas umständlich ist, die Werte zu den vorhandenen einer bestehenden Liste hinzuzufügen. Andererseits braucht man das wahrscheinlich nicht so oft.

Ich habe jetzt noch nicht geschaut, aber aus Himitsus Bemerkung schließe ich, dass es auch in der Hilfe zu anderen TIni-Methoden ähnlich formuliert sein könnte.

Zitat:

Zusätzlichen Text zur Klarstellung würde ich nur ungern aufnehmen, da ich den zwar noch in der Englischen Version, nicht mehr aber in der Französischen und Japanischen nachpflegen kann.
Bei der französischen Version kann ich gerne aushelfen, aber bei der japanischen muss ich auch passen. :)


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