AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

INI File Schreiben und auslesen

Ein Thema von floppybe · begonnen am 13. Mär 2014 · letzter Beitrag vom 24. Mär 2014
Antwort Antwort
Seite 3 von 4     123 4      
Jumpy

Registriert seit: 9. Dez 2010
Ort: Mönchengladbach
1.736 Beiträge
 
Delphi 6 Enterprise
 
#21

AW: INI File Schreiben und auslesen

  Alt 14. Mär 2014, 11:46
Bei
Edit1.Text:=Ini.ReadString('Section', 'Schlüssel1', 'kein Wert');

ist "kein Wert" sowas wie der Default-Wert, den die Funktion nimmt, wenn Sie nix anderes fidnet. Könntest du dann so machen:

Edit1.Text:=Ini.ReadString('Section', 'Schlüssel1', 'Deutsch');

oder wenn Edit1.Text schon beim Start Standardmäßig auf Deutsch steht dann:

Edit1.Text:=Ini.ReadString('Section', 'Schlüssel1', Edit1.Text);


Das entscheidende, was dir aber alle sagen wollen ist, dass das bei dir nicht Section und Schlüssel1 heißt sondern language und last language, somit:

Edit1.Text:=Ini.ReadString('language', 'last language', Edit1.Text);

oder halt mit Variablen:
Delphi-Quellcode:
var Sektion,Eintrag:String;
...
Sektion:='language';
Eintrag:='last language';
...
Edit1.Text:=Ini.ReadString(Sektion, Eintrag, Edit1.Text);
Ralph
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#22

AW: INI File Schreiben und auslesen

  Alt 14. Mär 2014, 12:32
@floppybe

Nochmal zum Aufbau einer Ini-Datei
Code:
[Sektion1]
Itent1=Value1
Ident2=Value2
Ident3=Value3

[Sektion2]
Itent1=Value1
Ident2=Value2
Ident3=Value3

[SektionN]
Itent1=Value1
Ident2=Value2
Ident3=Value3
Wie du siehst ist die Ini in Sektionen unterteilt. Dadurch ist es möglich drei Mal den Ident mit dem gleichen Namen "Ident1" zu verwenden, ohne dass es zu Komplikationen kommt. Ohne Sektionen müsste man für jeden Ident einen anderen Namen nehmen.

Nun keine Gesetze, aber Regeln die das Leben erleichtern:

Es empfiehlt sich die Namen für Sektionen und Idents als Konstanten global zu nutzen. Grund: man kann sich immer leicht verschreiben. Ohne Konstanten fällt der Fehler nicht auf IniFile.ReadInteger('Sprachen', 'AktueleSprache', 0); . Hier fällt dem Compiler nicht auf, dass in 'AktueleSprache' ein L fehlt. Wenn man bei IniFile.ReadInteger(IniLangSection, IniCurrLang, 0); ein Fehler macht, fällt es auf, dass "IniCurrLang" mit zwei R geschrieben wurde, denn IniCurLang ist eine Konstante.

Das Gleiche gilt für den IniPfad. Wer den Pfad immer wieder aufs neue zusammensetzt, dem unterläuft garantiert irgendwann ein Fehler. Am besten den Namen übe reine Funktion holen.

Nun zu deiner Frage:
Code:
Ich habe nochmals gelesen im TUT, Edit1.Text:=Ini.ReadString('Section', 'Schlüssel1', 'kein Wert'); "Kein Wert" ist ja ein direkter Eintrag und nicht der Wert aus der INI oder verstehe ich das Falsch ?
'kein Wert' ist ein Defaultwert bei Read Methoden und kommt immer dann zum Einsatz wenn ein Fehler vorliegt. Ein Fehler kann immer dann vorliegen, wenn es z. B. keinen Eintrag gibt. Entweder fehlt die Sektion oder Ident, so dass an der Stelle keine Information vorliegt. Statt aber mit einer Fehlermeldung abzubrechen, wird ersatzweise der Defautwert genommen, in dem Fall 'kein Wert'. Ein weitere Grund für einen Fehler kann sein, dass zwar alles da ist, also Sektion und Ident, aber man einen Integer laden will und die Funktion erkennt, dass in der Ini als Wert ein String vorliegt (Selbst wenn es "1.0" ist).

Der Defaultwert ist also der Ersatz-Wert im Fall, dass ein Fehler vorkommt und der Wert nicht korrekt gelesen werden kann.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#23

AW: INI File Schreiben und auslesen

  Alt 14. Mär 2014, 12:41
@Popov

Hier würden sich Exceptions besser machen, denn nun gibt es auch einen Hinweis, warum der nicht erstellt werden konnte
Besser schon, ich weiß nur nicht ob TE RaiseLastOSError verstehen würde. Evtl. hätte man raise Exception.Create('Fehler. Es konnte kein Ini Ordner angelegt werden.'); nehmen können. In dem Fall könnte man auch ein String als Ergebnis liefern und dennoch eine eigene Fehlermeldung verfassen.
  Mit Zitat antworten Zitat
Benutzerbild von Sir Rufo
Sir Rufo

Registriert seit: 5. Jan 2005
Ort: Stadthagen
9.454 Beiträge
 
Delphi 10 Seattle Enterprise
 
#24

AW: INI File Schreiben und auslesen

  Alt 14. Mär 2014, 13:13
@Popov

Hier würden sich Exceptions besser machen, denn nun gibt es auch einen Hinweis, warum der nicht erstellt werden konnte
Besser schon, ich weiß nur nicht ob TE RaiseLastOSError verstehen würde. Evtl. hätte man raise Exception.Create('Fehler. Es konnte kein Ini Ordner angelegt werden.'); nehmen können. In dem Fall könnte man auch ein String als Ergebnis liefern und dennoch eine eigene Fehlermeldung verfassen.
Du hast Recht, dass die Fehlermeldung ruhig eindeutiger/informativer sein sollte. Hier also mit der OS-Meldung und dem Verzeichnis:
Delphi-Quellcode:
  if not ForceDirectories( Dir ) then
    RaiseLastOSError( GetLastError, Format(' "%s"', [Dir] ) );
Zitat:
EOSError: Systemfehler. Code: 3.
Das System kann den angegebenen Pfad nicht finden "X:\Test\Peter"
Zitat:
EOSError: Systemfehler. Code: 161.
Der angegebene Pfadname ist ungültig "\\192.168.0.1\Data\Test\Peter"
Und das mit dem Verstehen ist ja auch nicht so schwer, wenn er einen Blick auf Delphi-Referenz durchsuchenRaiseLastOSError wirft
Kaum macht man's richtig - schon funktioniert's
Zertifikat: Sir Rufo (Fingerprint: ‎ea 0a 4c 14 0d b6 3a a4 c1 c5 b9 dc 90 9d f0 e9 de 13 da 60)

Geändert von Sir Rufo (14. Mär 2014 um 13:36 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#25

AW: INI File Schreiben und auslesen

  Alt 14. Mär 2014, 16:29
Und das mit dem Verstehen ist ja auch nicht so schwer, wenn er einen Blick auf Delphi-Referenz durchsuchenRaiseLastOSError wirft
Also gegen Raise an sich ist ja nichts zu sagen, auf der anderen Seite ist die Frage seit zwei Seiten - was ist bei Ini ein Defaultwert?

Außerdem, was interessiert den Endnutzer, oder gar den TE der ErrorCode 5. Das ist fast so gut wie die Frage nach dem Sinn des Lebens mit der Antwort 42. Es sollte also immer ein Text da stehen.

Wo wir aber dabei sind, ich kenne die Schreibweise RaiseLastOSError( GetLastError, Format(' "%s"', [Dir] ) ); nicht, ist das neu > D7?
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#26

AW: INI File Schreiben und auslesen

  Alt 14. Mär 2014, 16:47
..., mit dem Unterschied, dass man nun keine Ini mitschleppten muss.
Zumindestens mir fällt es wesentlich einfacher mit "richtigen" Dateien umzugehen als in den Tiefen der Registry etwas zu überprüfen.
Und dann verbleibt der Schrott von allen möglichen Programmen auch noch da...
Man kann also durchaus geteilter Meinung über den Vorteil von INI-Dateien sein.

, auf der anderen Seite ist die Frage seit zwei Seiten - was ist bei Ini ein Defaultwert?
Hab ich etwas übersehen?
"Default" ist das was rauskommt wenn die INI aus welchen Gründen auch immer nichts liefert.




Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector

Geändert von p80286 (14. Mär 2014 um 16:51 Uhr)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#27

AW: INI File Schreiben und auslesen

  Alt 14. Mär 2014, 17:31
..., mit dem Unterschied, dass man nun keine Ini mitschleppten muss.
Zumindestens mir fällt es wesentlich einfacher mit "richtigen" Dateien umzugehen als in den Tiefen der Registry etwas zu überprüfen.
Und dann verbleibt der Schrott von allen möglichen Programmen auch noch da...
Man kann also durchaus geteilter Meinung über den Vorteil von INI-Dateien sein.
Du bist Programmierer, da sollte man die Registry positiv sehen. Die Aversion die einige hier (nicht nur du) gegen Einsatz von Registry haben, ist ja schon etwas beängstigend. Außerdem schreibt man nichts in die Tiefen der Registry, sondern nur in HKEY_CURRENT_USER, und da in den Zweig SOFTWARE (zumindest wenn man TRegIniFile mit dem Pfad nutzt). Das ist der Bereich für die Software, der ist extra dazu gedacht, dass man da seine Einstellungen speichert.

Natürlich hat die Ini seinen Vorteil, der Nachteil ist aber, dass man sie nicht überall speichern kann. Die Alternative mit dem Anwendungsdaten-Ordner ist ok, das Problem ist, dass man sich vorher immer erst verrenken muss um den Ordner zu finden. Selbst wenn man den Ordner nicht mit der Spezial-Ordner-Funktion sucht und die Umgebungsvariablen nutzt, es muss immer erst nachgeguckt werden wie der Code so ist.
Delphi-Quellcode:
var
  Str: array [0..1023] of Char;
  Len: Integer;
begin
  Len := ExpandEnvironmentStrings(PChar('%APPDATA%'), Str, 1024);
Kürzer geht es nicht, in der Regel ist der Code komplizierter, aber heute ist so ein schöner Tag, deshalb habe ich es einfach gehalten. Die dritte Alternative ist einfach die TIniFile gegen die TRegIniFile tauschen, und schon sind alle Probleme vergessen
  Mit Zitat antworten Zitat
Benutzerbild von p80286
p80286

Registriert seit: 28. Apr 2008
Ort: Stolberg (Rhl)
6.659 Beiträge
 
FreePascal / Lazarus
 
#28

AW: INI File Schreiben und auslesen

  Alt 14. Mär 2014, 18:44
Außerdem schreibt man nichts in die Tiefen der Registry, sondern nur in HKEY_CURRENT_USER, und da in den Zweig SOFTWARE (zumindest wenn man TRegIniFile mit dem Pfad nutzt). Das ist der Bereich für die Software, der ist extra dazu gedacht, dass man da seine Einstellungen speichert.
Hat den Nachteil, daß man nicht für Mehrere Benutzer die gleichen Parameter hat, falls notwendig.

Natürlich hat die Ini seinen Vorteil, der Nachteil ist aber, dass man sie nicht überall speichern kann.
Zumindestens Software die vom Stick und/oder einem Netzlaufwerk gestartet wird ist mit der INI besser bedient.

Übrigens habe ich nichts gegen die Registry, die Idee ist gut, die Umsetzung allerdings teilweise grausam.

Gruß
K-H
Programme gehorchen nicht Deinen Absichten sondern Deinen Anweisungen
R.E.D retired error detector
  Mit Zitat antworten Zitat
DateTimeError
(Gast)

n/a Beiträge
 
#29

AW: INI File Schreiben und auslesen

  Alt 14. Mär 2014, 23:35
Jupp. Neue Programme entwickle ich erstmal "portable" mit INIs mittels globalem INIFileName := ChangeFileExt(paramstr(0), '.ini'); im FormCreate.
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#30

AW: INI File Schreiben und auslesen

  Alt 14. Mär 2014, 23:49
Würde ich nicht machen. Besser dafür ist eine Funktion geeignet, auch wenn sie als Result den gleichen Wert liefert. Man hat dann immer die Möglichkeit den Pfad anzupassen.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 3 von 4     123 4      

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:00 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