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 1 von 4  1 23     Letzte »    
floppybe

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

INI File Schreiben und auslesen

  Alt 13. Mär 2014, 19:44
Liebes Forum,

als Neuling mit Delphi versuche ich es bei Euch um eine Antwort zu bekommen was ich falsch mache.
Ich möchte in eine INI Datei die letzte Eingestellte Sprache eintragen und weis leider beim besten
willen nicht wie ich das gebacken kriege.

Ich habe dsa TUT bem Delphi-Treff genommen und adaptiert.
Ich habe auch dort schon einen Beitrag um Hilfe geschrieben. Leider aber nicht die Hilfe bekommen
die ich mir erhoffte.

Ich habe folgenden Code geschrieben um die INI Datei zu schreiben:

Delphi-Quellcode:
procedure TForm1.FormClose(Sender: TObject; var Action: TCloseAction);
 const
  Sektion='language';
  Eintrag='last language';
var
  ini: TIniFile;
  filename: String;

begin
  SiLang1.Language := ComboBox1.Items.Strings[ ComboBox1.ItemIndex ];

filename := ExtractFilePath(ParamStr(0)) + './ini/einstellungen.ini'; //???
  ini := TIniFile.Create(filename);
  try
  ini.WriteString(Sektion,Eintrag,ComboBox1.Text);

  finally
Ini.Free;
  end;
und den Code um die Sprache wieder zum auslesen:

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
const
 Sektion='language';
 Eintrag='last language';
var
  ini: TIniFile;
  filename: String;
begin

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

  ComboBox1.Text := Ini.ReadString('Sektion', 'Eintrag', 'Wert');
finally
  ini.Free;
Bitte macht mich nicht fertig wenn ich es nicht verstehe, aber bei mir funktioniert es nicht.

Kann mir jemand von Euch hier aus dem Forum etwas behilflich sein ? Ich wäre sehr dankbar.

Herzliche Grüsse aus der Schweiz

Chris
Christian Schär
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#2

AW: INI File Schreiben und auslesen

  Alt 13. Mär 2014, 19:57
filename := ExtractFilePath(ParamStr(0)) + 'ini\einstellungen.ini';
  Mit Zitat antworten Zitat
floppybe

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

AW: INI File Schreiben und auslesen

  Alt 13. Mär 2014, 20:08
Vielen Dank Björk,

ok, dann muss ich also doch nicht "./" eingeben.

filename := ExtractFilePath(ParamStr(0)) + 'ini\einstellungen.ini';
Ich bin noch am versuchen die INI auszu lesen, das klappt nun aber leider noch gar nicht,
ich denke ich mache im Code:

ComboBox1.Text := Ini.ReadString('Sektion', 'Eintrag', 'Wert'); irgend was falsch.

Es steht nun in der INI Datei "language" als Sektion 1 und in Sektion 2 steht nun der Wert "last language"
Und als Wert steht nun Englisch oder Deutsch oder so. Aber wenn ich die Applikation starte steht da immer
nur Wert in der Combobox.

Leider verstehe ich nicht so viel dass ich mir den Code einfach zusammenbauen kann.
eigentlich möchte ich ja schreiben aus Eintrag Sektion1 (Sektion) und Sektion 2 (Eintrag) den Wert,
ausgeben in Combobox1.Text. Das steht nun bei mir aber immer "Wert"

Danke dass Du Dir für mich Zeit nimmst.

Chris
Christian Schär
  Mit Zitat antworten Zitat
Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: INI File Schreiben und auslesen

  Alt 13. Mär 2014, 20:14
Hallo Chris,
bist du mit Verzecihnis C:\...\ini\ sicher ?

BTW:
Inifile Format:
[Section]
Indent = Value

Ini.WriteInteger('A','B',1) ergibt:

[A]
B = 1
  Mit Zitat antworten Zitat
zeras

Registriert seit: 11. Mär 2007
Ort: Saalkreis
1.618 Beiträge
 
Delphi 12 Athens
 
#5

AW: INI File Schreiben und auslesen

  Alt 13. Mär 2014, 20:22
filename := ExtractFilePath(ParamStr(0)) + 'ini\einstellungen.ini'; bedeutet, dass du möglicherweise in ein Unterverzeichnis des Programme Ordners schreiben willst, was in der Regel nicht geht, wenn man kein Admin ist.

ComboBox1.Text := Ini.ReadString('Sektion', 'Eintrag', 'Wert'); bedeutet, dass du den Text der Combobox mit dem Text 'Wert' beschreiben willst. Das soll doch nicht deine Absicht sein.
Du willst doch bestimmt, dass die Comboxbox mehrere Einträge hat und ein Eintrag gewählt wird. Das machst du mit "IndexOf".
Matthias
Es ist nie falsch das Richtige zu tun!
- Mark Twain
  Mit Zitat antworten Zitat
Popov
(Gast)

n/a Beiträge
 
#6

AW: INI File Schreiben und auslesen

  Alt 13. Mär 2014, 20:29
Beispiel:

Delphi-Quellcode:
uses
  IniFiles;

procedure TForm1.Button1Click(Sender: TObject);
var
  Path, FileName: String;
  IniFile: TIniFile;
  s: String;
begin
  Path := ExtractFilePath(ParamStr(0)); //hat schon ein Backslash am Ende
  Path := IncludeTrailingPathDelimiter(Path); //braucht man hier nicht, wenn man sich aber unsicher ist, ist es nicht falsch
  FileName := 'Einstellungen.ini';

  //Erstellt falls nötig den Unterordner
  if not ForceDirectories(Path + 'INI') then
  begin
    MessageDlg('Es wurde kein Unterordner angelegt', mtError, [mbOK], 0);
    Exit;
  end;

  //Alternative: Prüft auf Unterordner
  {if not DirectoryExists(Path + 'INI') then
  begin
    MessageDlg('Es wurde kein Unterordner gefunden', mtError, [mbOK], 0);
    Exit;
  end; }


  IniFile := TIniFile.Create(Path + FileName);
  try
    IniFile.WriteString('Sektion', 'Ident', 'Wert');

    s := IniFile.ReadString('Sektion', 'Ident', 'Ersatzwert bei Fehler');
  finally
    IniFile.Free;
  end;

  ShowMessage(s);
end;
Ini ist eine ganz normale Klasse, sie unterschiedet sich von den meisten vielleicht dadurch, dass man in Create ein Pfad angeben muss. Experimentiere nicht mit dem Pfad, sondern liefere etwas mit Hand und Fuß. Wenn du keine Ahnung hast was für ein Pfad du angibst, dann weißt du auch nicht wo die Ini landet.

Das sieht nicht gut aus: ExtractFilePath(ParamStr(0)) + './ini/einstellungen.ini'; ExtractFilePath liefert immer ein Backslash am Ende, also z. B. c:\Temp\Übungen\Projekt1\. Du brauchst also nach ExtractFilePath keinen Backslash angeben (schon gar nicht ein Slash).

Bist du nicht sicher ob am Ende ein Backslash ist, überprüfe es oder verwende die Funktion IncludeTrailingPathDelimiter . Sie macht nichts kaputt, man kann sie zur Not also immer verwenden. Wenn da bereits ein Backslash am Ende ist, wird nichts gemacht, sonst Backslash angefügt.

Willst du es in einen Ordner schrieben, dann in der Form: ExtractFilePath(ParamStr(0)) + 'ini/einstellungen.ini'; . Wie gesagt, ExtractFilePath liefert am ende immer einen Backslash.
Fehlt der Ordner "Ini\", gibt es eine Fehlermeldung. Also vorher vergewissern ob der Ordner existiert. Oder mit ForceDirectories erstellen.

Der Rest ist üblich wie bei anderen Klassen: Objekt deklarieren und erstellen, mit Objekt arbeiten, zuletzt IniFile Objekt freigeben.
  Mit Zitat antworten Zitat
nuclearping

Registriert seit: 7. Jun 2008
708 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#7

AW: INI File Schreiben und auslesen

  Alt 13. Mär 2014, 20:49
Das was du in '...' setzt, wird von Delphi auch als String interpretiert. Also hat er in der Ini eine Sektion "Sektion" gesucht, um dort den Eintrag "Eintrag" lesen zu können.
Wenn du die Konstanten (const Sektion='language'; ... ) verwenden willst, dann darfst du das nicht in '...' setzen.

Delphi-Quellcode:
procedure TForm1.FormCreate(Sender: TObject);
const
 Sektion='language';
 Eintrag='last language';
var
  ini: TIniFile;
  filename: String;
begin

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

  // ComboBox1.Text := Ini.ReadString('Sektion', 'Eintrag', 'Wert');
  ComboBox1.Text := Ini.ReadString(Sektion, Eintrag, 'Standardwert');
finally
  ini.Free;
  Mit Zitat antworten Zitat
floppybe

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

AW: INI File Schreiben und auslesen

  Alt 13. Mär 2014, 21:05
Hallo Björk, nuclearping, Popov, und alle die Mit Lesen,

Ja, es ist eigentlich so angedacht, dass ich das Programm frei
wählbar Installieren möchte, das bedeutet, dass es überall
geladen werden kann so auch die INI Datei, deshalb keinen
Direkten Pfad.

Ich habe gelesen dass mann über den Parameter:
ExtractFilePath(ParamStr(0)) den Programm Ordner
auslesen kann, und dann soll es einfach ins Verzeichnis INI abgelegt
werden.

Nun ja, ich möchte nicht nur den Wert aus der Combobox verwenden,
den habe ich gefunden in:
ComboBox1.Items sondern ich möchte den Wert aus der INI Datei in die Combobox
einlesen.

Ich habe ein Programm, dass ich Mehrsprachig machen möchte.

Grüsse all denen die mir da so tatkräftig Helfen.

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

n/a Beiträge
 
#9

AW: INI File Schreiben und auslesen

  Alt 13. Mär 2014, 21:27
Hier noch ein Tipp. Delphi bietet für Ini Nutzer den einfachen Zugriff auf Registry über die TRegIniFile. Die funktioniert genauso wie die TIniFile. Es muss einfach nur die Unit und die Klasse getauscht werden. Der Rest bleibt. Was also bei Ini funktionierte, funktioniert dann auch in der Registry, mit dem Unterschied, dass man nun keine Ini mitschleppten muss.

Delphi-Quellcode:
uses
  Registry; //Änderung Registry

procedure TForm1.Button2Click(Sender: TObject);
var
  Path: String;
  IniFile: TRegIniFile; //Änderung TRegIniFile
  s: String;
begin
  //Dem Pfad sollte 'Software\' vorangestellt sein, damit es richtig im Ordner
  //für Software abgeleht wird. Dann noch einen Dateinamen. Der Rest wie bei Ini.
  Path := 'Software\' + 'MeinProgramm';

  //Alternativ einfach den Namen der Datei nehmen
  //Path := 'Software\' + ExtractFileName(ChangeFileExt(ParamStr(0), ''));

  IniFile := TRegIniFile.Create(Path); //Änderung TRegIniFile
  try
    IniFile.WriteString('Sektion', 'Ident', 'Wert');

    s := IniFile.ReadString('Sektion', 'Ident', 'Ersatzwert bei Fehler');
  finally
    IniFile.Free;
  end;

  ShowMessage(s);
end;
  Mit Zitat antworten Zitat
Perlsau
(Gast)

n/a Beiträge
 
#10

AW: INI File Schreiben und auslesen

  Alt 13. Mär 2014, 23:53
Crosspost Delphitreff
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 4  1 23     Letzte »    

 

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:12 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