Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi in Ini Datei mehrzeiligen text schreiben (https://www.delphipraxis.net/70521-ini-datei-mehrzeiligen-text-schreiben.html)

thetrue 31. Mai 2006 12:59


in Ini Datei mehrzeiligen text schreiben
 
moin,

wie kann man in eine Ini datei einen Mehrzeiligentext schreiben?

Der_Unwissende 31. Mai 2006 13:03

Re: in Ini Datei mehrzeiligen text schreiben
 
Hi,
denke das wird nicht direkt unterstützt. Aber du kannst einfach alle Zeilenumbrüche durch ein anderes Zeichen (z.B. chr(26) = Substitute) ersetzen, was wiederum sehr einfach mittels String-Replace klappt.

Natürlich nach dem Laden andersrum ;-)

Gruß Der Unwissende

thetrue 31. Mai 2006 13:04

Re: in Ini Datei mehrzeiligen text schreiben
 
Öhm, joa, wäre ne möglichkeit, aber ich kenne die Replacce Function von Delphi nicht ^^

chaosben 31. Mai 2006 13:05

Re: in Ini Datei mehrzeiligen text schreiben
 
Indem man die Datei öffnet (TFileStream, TStrings) und den Text reinschreibt. :)
Natürlich ist es dann keine Ini-Datei mehr, sondern eine ehemalige Ini-Datei mit mehrzeiligem Text.
Oder du nutzt die WriteStream Methode von TIniFile und speicherst dir den Text als "binär" Daten ab. Aber Achtung: Hier gibt es eine Längenbegrenzung.

Zacherl 31. Mai 2006 13:52

Re: in Ini Datei mehrzeiligen text schreiben
 
Oder den Text vorher Base64 kodieren und beim laden dekodieren.
Dann kannst du mehrzeiligen Text in einer Zeile speichern.

Robert Marquardt 31. Mai 2006 14:05

Re: in Ini Datei mehrzeiligen text schreiben
 
In der JCL gibt es dazu die Funktionen StrStringToEscaped und StrEscapedToString.
Ich glaube uebrigens das die INI-Funktionen eine Laengenbegrenzung bei den Strings haben. Zumindest erinnere ich mich schwach an so etwas.
Relativ sicher bin ich mir das es eine 64K-Grenze fuer das gesamte INI-File gibt bzw. gab.

_frank_ 31. Mai 2006 15:41

Re: in Ini Datei mehrzeiligen text schreiben
 
alternativ kannst du auch eine solche ini-datei anlegen:

Delphi-Quellcode:
linecount=5
line1="erste"
line2="zweite"
line3="dritte"
...
und dann halt einlesen:

Delphi-Quellcode:
memo1.lines.clear;
c:=readInteger('section','linecount',0);
for i:=1 to c do
begin
  Memo1.Lines.Add(ini.ReadString('section','line'+IntToStr(i),''));
end;
oder so, wie ich es in meine Sprachdateien mache:

Delphi-Quellcode:
function ConvertLineBreak(s:string):string;
var p:integer;
begin
  p:=pos('\n',s);
  while p>0 do
  begin
    s[p]:=#13;
    s[p+1]:=#10;
    p:=pos('\n',s);
  end;
  result:=s;
end;

s:='erste\nzweite\ndritte';
s:=ConvertLineBreak(s);
Gruß Frank

SirThornberry 31. Mai 2006 16:23

Re: in Ini Datei mehrzeiligen text schreiben
 
Zitat:

Zitat von thetrue
Öhm, joa, wäre ne möglichkeit, aber ich kenne die Replacce Function von Delphi nicht ^^

Aber doch spätestens nach dem die "StringReplace" Funktion genannt wurde solltest du Sie doch jetzt kennen (schließlich kennst du auch die anderen Lösungen nicht)

Zacherl 31. Mai 2006 16:25

Re: in Ini Datei mehrzeiligen text schreiben
 
Wenns schnell gehen soll verwende ich eine StringList, speichere den Text darin und schreibe StringList.DelimitedText in die INI und lade den DelimitedText hinterher wieder.
Sonst kodiere ich den String wie gesagt vorher Base64.

Beispiel:
Delphi-Quellcode:
//Text speichern (Text ist in Memo1)
var
  Tmp: TStringList;
begin
  Tmp := TStringList.Create;
  Tmp.Text := Memo1.Lines.Text;
  Ini.WriteString('Section', 'Value', Tmp.DelimitedText);
  Tmp.Free;
end;

//Text laden (In Memo1)
var
  Tmp: TStringList;
begin
  Tmp := TStringList.Create;
  Tmp.DelimitedText := Ini.ReadString('Section', 'Value', '');
  Memo1.Lines.Text := Tmp.Text;
  Tmp.Free;
end;


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