Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Zeilenumbruch in ini dateien (https://www.delphipraxis.net/42674-zeilenumbruch-ini-dateien.html)

Tigermoon 22. Mär 2005 12:52


Zeilenumbruch in ini dateien
 
Hallo

ich gebe text in ein memofeld ein und speichere es in einer ini datei

beim auslesen werden zeilenumbrüche nicht mit ausgelesen

kann mir einer helfen

Luckie 22. Mär 2005 12:56

Re: Zeilenumbruch in ini dateien
 
Ini dateien unterstzützen keinen Zeilenumbruch.

Bernhard Geyer 22. Mär 2005 12:57

Re: Zeilenumbruch in ini dateien
 
Du kannst versuchen die Daten z.B. Base64-Codiert zu speichern. Aber Ini-Dateien über die WinAPI gehen eh nur bis 64 kByte - also Achtung!

Pr0g 22. Mär 2005 13:06

Re: Zeilenumbruch in ini dateien
 
Ich mache es so, dass ich alle Zeilen mit einem Trennzeichen zu einem String zusammenfügen:
Delphi-Quellcode:
function GetIniString(const ABreak: String; const AStrings: TStrings): String;
var
  i: Integer;
begin
  Result := '';
  for i := 0 to AStrings.Count - 1 do
  begin
    if i > 0 then
      Result := Result + ABreak;
    Result := Result + AStrings[i];
  end;
end;

procedure GetIniStringList(const ABreak: String; AString: String; var AStrings: TStrings);
var
  p: Integer;
begin
  AStrings.Clear;
  while Pos(ABreak, AString) > 0 do
  begin
    p := Pos(ABreak, AString) - 1;
    AStrings.Add(Copy(AString, 1, p));
    Delete(AString, 1, p + Length(ABreak));
  end;
  AStrings.Add(AString);
end;
Und hier der Aufruf:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  s: String;
begin
  s := GetIniString('[~#~]', Memo1.Lines);

  //s in Ini Speichern
end;

procedure TForm1.Button2Click(Sender: TObject);
var
  s: String;
  SL: TStrings;
begin
  //s aus Ini auslesen

  SL := TStringList.Create;
  try
    GetIniStringList('[~#~]', s, SL);
    Memo1.Lines := SL;
  finally
    SL.Free;
  end;
end;
MfG Pr0g

Hansa 22. Mär 2005 17:35

Re: Zeilenumbruch in ini dateien
 
Hi,

eine INI Datei zu benutzen, um ein Memo abzuspeichern ist schon recht krass. 8) Was soll denn das werden ? Ist das Memo immer gleich, oder was ? Ich habe die Vermutung, daß hier INI-Dateien mit Textdateien verwechselt werden, was sie allerdings auch sind.

INI Dateien sind allerdings eher zeilenorientiert. D.h. in jeder Zeile steht ein Wert. Da es sich ja um einen einfachen einzugebenden Text handelt und wie Luckie bereits gesagt hat, die Zeilenumbrüche höchstens Ärger machen, frage ich mich, warum, der eingegenene Text nicht einfach mit :

Delphi-Quellcode:
TStrings.SaveToFile (Dateiname);
behandelt wird. 8)

Aenogym 22. Mär 2005 17:47

Re: Zeilenumbruch in ini dateien
 
hi,

ich habs zwar schonmal irgendwo in der DP geschrieben, aber für dich extra nochmal :zwinker:

Delphi-Quellcode:
var ini: TIniFile;
begin
  ini := tinifile.create;
  try
    //kompletten memo-inhalt als einen string speichern (zeilenumbrüche werden konvertiert)
    ini.writestring('section', 'key', memo1.lines.commatext);

    //string wieder in ini laden (zeilenumbrüche sind wieder da)
    memo1.lines.commatext := ini.readstring('section', 'key', 'default');
  finally
    ini.free;
  end;
end;
aenogym

Airblader 22. Mär 2005 18:02

Re: Zeilenumbruch in ini dateien
 
Wieso nicht einfach:

Delphi-Quellcode:
Memo1.Lines.SaveToFile(ParamStr(0) + 'datei.txt');
ini.WriteString('bla','textdatei',(ParamStr(0) + 'datei.txt'));


....
s := ini.ReadString('bla','textdatei','');
if s <> '' then
   Memo1.Lines.LoadFromFile(s);

Hansa 22. Mär 2005 18:23

Re: Zeilenumbruch in ini dateien
 
Ich befürworte neues Thema : "Kriege ich einen Nagel besser in die Wand gehauen mit einem Kreuzschraubenzieher, mit einer Gabel oder doch mit einer CD-Hülle ? ". :gruebel: 8) :lol:

IngoD7 22. Mär 2005 21:16

Re: Zeilenumbruch in ini dateien
 
Zitat:

Zitat von Hansa
eine INI Datei zu benutzen, um ein Memo abzuspeichern ist schon recht krass.

Dem stimme ich schon mal pauschal zu.

Ansonsten wäre es mal interessant zu erfahren, wie Tigermoon das Abspeichern und Einlesen überhaupt bewerkstelligt.

Hansa 23. Mär 2005 00:01

Re: Zeilenumbruch in ini dateien
 
Zitat:

Zitat von IngoD7
...Ansonsten wäre es mal interessant zu erfahren, wie Tigermoon das Abspeichern und Einlesen überhaupt bewerkstelligt.

[Läster-Modus ein]Das ist doch egal. Ich schlage noch die BOOT.INI vor. Die wäre sicherlich geeignet. Oder wie wäre es, gleich eine EXE zu nehmen, diese in INI umzubenennen und das Memo da drin als INI zu speichern ? [Läster-Modus aus]

:mrgreen:

Nene, im Ernst : wie gesagt, es geht um die Auswahl des richtigen Werkzeuges für eine bestimmte Aufgabe. Eine INI Datei zu vergewaltigen und der dafür nicht vorgesehene Zeilenumbrüche beizubringen ist einfach nur leichtsinnig und vor allem total überflüssig. Ich verstehe ehrlich gesagt nicht, daß dafür hier sogar noch Lösungsvorschläge kommen, obwohl die ganze Lösungsstrategie von vorneherein in die falsche Richtung geht. 8)

Eine INI - Datei heißt deshalb so, weil sie dafür gedacht ist, gewisse Voreinstellungen einzulesen. Also eine Initialisierung von Variablen z.B. beim Programmstart vorzunehmen (Fensterkoordinaten, Maximale Eingabewerte) usw. Hierbei handelt es sich in der Regel um Konstanten. Da es um die Eingabe in ein Memo geht, also Daten, die sich schnell verändern, ist das aber nicht der Sinn einer INI Datei und deshalb nicht geeignet. Wie es mit TStrings geht habe ich bereits gesagt.


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