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
floppybe

Registriert seit: 24. Dez 2008
Ort: Belp
65 Beiträge
 
Delphi XE5 Architect
 
#1

AW: INI File Schreiben und auslesen

  Alt 14. Mär 2014, 10:33
Hallo Volker Z.,

leider übersteigt das ganze mein Verständnis, nein, ich habs nicht so ganz verstanden.
Dass ich es lieber Global mache verstehe ich noch, aber wesshalb dann statt "Eintrag"
direkt "language" setzen verstehe ich noch nicht so ganz.

Und wesshalb übernimmt er mir den Wert nicht aus der INI ? In der INI Stehts ja.
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 ?
Was muss ich dann einfügen bei "Wert" resp. "kein Wert" dass es klappt ? Muss ich doch noch eine Const. für "Wert" hinterlegen ?

Aber ich habe leider völligen Bahnhof.
Sorry für meine lange Leitung.

Chris

Hallo,

nochmal: Beim Schreiben der Daten in die INI nutzt Du die Konstante Sektion='language'; ; Du legst also im Abschnitt 'language' den Schlüssel 'last language' an und hinterlegst dort einen bestimmten Wert ('Französisch'). Soweit passt alles.

Beim Lesen aus der INI greifst Du aber auf den Abschnitt 'Sektion' zu - und eben nicht auf 'language'. Oder: Du liest etwas, was gar nicht 'da' ist.

Ein ComboBox1.Text := Ini.ReadString ('language', 'last language', 'Default'); würde funktionieren, ein ComboBox1.Text := Ini.ReadString ('Sektion', 'Eintrag', 'Wert'); wird es nicht tun.

Deshalb: Nimm die Konstanten aus FormClose und FormCreate raus, definiere Dir die Dinger "global" und greife beim Lesen/Schreiben auf diese Konstanten zu.

Groschen nun gefallen?

Gruß
Christian Schär
  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
 
#2

AW: INI File Schreiben und auslesen

  Alt 14. Mär 2014, 10:44
@floppybe

Wenn du dem Nachbarn Meier (Ident) im Haus zu deiner Linken (Sektion) einen Apfel gibts (Value)
Delphi-Quellcode:
begin
  Ini.WriteString( 'HausLinks', 'Meier', 'Apfel' );
end;
und dann den Nachbarn Müller (Ident) im Haus zu deiner Rechten (Sektion) fragst, was du ihm gegeben hast
Delphi-Quellcode:
if Ini.ReadString( 'HausRechts', 'Müller', 'normal nix' ) = 'Apfelthen
  ShowMessage( 'Juhu, Apfel essen :-)' )
else
  ShowMessage( 'In die Röhre schauen :-(' );
erwartest du dann den Apfel (Value)?

Nö, du musst schon genau den fragen, dem du den Apfel gegeben hast
Delphi-Quellcode:
if Ini.ReadString( 'HausLinks', 'Meier', 'normal nix' ) = 'Apfelthen
  ShowMessage( 'Juhu, Apfel essen :-)' )
else
  ShowMessage( 'In die Röhre schauen :-(' );
Es ist auch immer hilfreich sich die Dokumentation durchzulesen (anschauen reicht nicht)
Delphi-Referenz durchsuchenTCustumIniFile.WriteString und Delphi-Referenz durchsuchenTCustomIniFile.ReadString
dann siehst du auch, wann bei ReadString der Default-Wert zurückgeliefert wird.
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)
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#3

AW: INI File Schreiben und auslesen

  Alt 14. Mär 2014, 11: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
Jumpy

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

AW: INI File Schreiben und auslesen

  Alt 14. Mär 2014, 10: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
floppybe

Registriert seit: 24. Dez 2008
Ort: Belp
65 Beiträge
 
Delphi XE5 Architect
 
#5

AW: INI File Schreiben und auslesen

  Alt 16. Mär 2014, 08:33
Hallo Jumpy und Popov,

jetzt wird es mir auch wieder etwas klarer mit der INI. OK.
Ich mache es mal Global und versuche den Test wieder auszulesen.

Ich erlaube mir das Resultat hier wieder zu Präsentieren.

Habt vielen Dank für Alle Eure Ausführungen.


Chris
Christian Schär
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.667 Beiträge
 
Delphi 12 Athens
 
#6

AW: INI File Schreiben und auslesen

  Alt 17. Mär 2014, 10:00
Ich hatte es im DT schon angedeutet, trotzdem scheint es trotz mehrfacher Hinweise auch in diesem Thread immer noch nicht angekommen zu sein. Was wird in diesem Testcode jeweils ausgegeben?
Delphi-Quellcode:
const
  Blubb = 'Hallo Welt';
begin
  ShowMessage('Blubb');
  ShowMessage(Blubb);
Wenn man das weiß, muss man sich nur das Schreiben und Lesen noch einmal ganz genau anschauen.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
floppybe

Registriert seit: 24. Dez 2008
Ort: Belp
65 Beiträge
 
Delphi XE5 Architect
 
#7

AW: INI File Schreiben und auslesen

  Alt 17. Mär 2014, 18:54
Hallo Guten Abend,

ich habe den Code vom Einlesen der INI so umgeschrieben dass ich statt der Const
direkt den "Wert" genommen habe.

Delphi-Quellcode:
  filename := ExtractFilePath(ParamStr(0)) + 'ini/einstellungen.ini'; //???
  ini := TIniFile.Create(filename);

  silang1.Language := Ini.ReadString('language', 'last language', 'Deutsch' );
Wenn ich "language" und "last language" nehme gehts. Ich verstehe das noch nicht so ganz,
binn aber froh dass ich nun weiter gekommen bin.

Danke an alle welche geholfen haben bei der Lösung.

Chris
Christian Schär
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#8

AW: INI File Schreiben und auslesen

  Alt 17. Mär 2014, 19:54
Man merkt, dass du gegen gute Tipps schon klein wenig abgeneigt bist. Es ist nun mal so, dass es die typischen Fehler gibt. Anscheinend möchtest du die selbst erleben. Kann man aber auch gut verstehen - no Risk, no Fun

Du verstehst nicht was da passiert? Dabei ist das Ganze eigentlich nicht so schwer. Aber vielleicht sollte man nicht alles auf einmal durchnehmen. Wenn du Lust hast, können wir es noch mal in kleinen Schritten durchgehen:

silang1.Language := Ini.ReadString('language', 'last language', 'Deutsch' );

Was sagt dieser Parameter aus. Welchen Teil der Ini repräsentiert er?
  Mit Zitat antworten Zitat
floppybe

Registriert seit: 24. Dez 2008
Ort: Belp
65 Beiträge
 
Delphi XE5 Architect
 
#9

AW: INI File Schreiben und auslesen

  Alt 20. Mär 2014, 05:01
Hallo Popov,

vielen Hertzlichen Dank dass Du Dir Zeit nimmst mir das ganze etwas besser zu Erklähren. Ich nehme das Angebot gerne an.

Language ist der Einstig der Werte Wo die Daten abgelegt sind, denke ich.
Wenn ich also "Sektion" nehmen würde sucht er mir nach Sektion und nicht nach Language. Wenn ich das Richtig verstehe.

Ich bin es mir gewohnt immer noch den Code selber zusammen zu basteln, als dass ich fertige Infos bekomme. Was
ich sehr Gut verstehen kann aber bei mir manchmal eben zu verwirrungen führt. Ich bin froh, einen Code zu bekommen
den mann verstehen kann. Ich habe einfach bei Euren Ausführungen falsch gelesen und miss verstanden.


Gruss

Chris

Man merkt, dass du gegen gute Tipps schon klein wenig abgeneigt bist. Es ist nun mal so, dass es die typischen Fehler gibt. Anscheinend möchtest du die selbst erleben. Kann man aber auch gut verstehen - no Risk, no Fun

Du verstehst nicht was da passiert? Dabei ist das Ganze eigentlich nicht so schwer. Aber vielleicht sollte man nicht alles auf einmal durchnehmen. Wenn du Lust hast, können wir es noch mal in kleinen Schritten durchgehen:

silang1.Language := Ini.ReadString('language', 'last language', 'Deutsch' );

Was sagt dieser Parameter aus. Welchen Teil der Ini repräsentiert er?
Christian Schär
  Mit Zitat antworten Zitat
Antwort Antwort

 

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 08:42 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