![]() |
memo in ini speichern
wie kann ich den inhalt eines memofeldes in einer ini datei speichern? ich habe es bereits mit
memo1.lines.savetofile(filename); probiert aber dann speichert er das ganze memo am anfang der ini und es kann mit memo1.lines.loadfromfile(filename); nicht wieder geöffnet werden. wie würdet ihr dies lösen? |
Re: memo in ini speichern
Zitat:
Gar nicht in eine INI Datei sondern in eine Datei streamen. |
Re: memo in ini speichern
ohje das is glaub ich zu hoch für mich, knntest du mir das ma erklären??
|
Re: memo in ini speichern
Delphi-Quellcode:
Memo1.Lines.SaveToFile(...);
|
Re: memo in ini speichern
so hab ichs doch probiert, aber dann speichert er es an den anfang der ini, in der ich noch anderes speichere und ich kann es dann nicht mehr öffnen
|
Re: memo in ini speichern
Du sollst es ja auch nuicht in die Ini speichern. Da ist nach 64k Schluss und du bekommst auch nur die erste zeile rein, es sei denn du schreibst jede Zeile in einen Schlüssel mit TiniFile. Hinzukommt, dass Ini's sehr langsam sind und eingentlich nur dazu gedacht sind, um Programmeinstellungen zu sichern.
|
Re: memo in ini speichern
wie mach ich es denn sonst am besten??
|
Re: memo in ini speichern
In ne Textdatei speichern! :wink:
|
Re: memo in ini speichern
HI!
Du darfst nur keine Ini als Dateiendung angeben. Also so:
Delphi-Quellcode:
Ciao fkerber
Memo1.Lines.SavetoFile('datei1.txt');
|
Re: memo in ini speichern
kann ich das angeben dass er alles andere in der *.ini speichert und den inhalt des memo in der *.txt ??
|
Re: memo in ini speichern
Also, mit Memo1.SaveToFile speicherst du nur den Inhalt des Memos ab. Dieser muss in eine Textdatei. Ich versteh nur nicht, was du mit "alles andere" meinst? :gruebel:
|
Re: memo in ini speichern
ja ich hab noch mehr eingabefelder und ähnliches, das hab ich aber schon soweit fertig:
Delphi-Quellcode:
z.b.
if SaveDialog.Execute then
begin filename := SaveDialog.Filename; ini := TIniFile.Create(filename); try ini.writestring('seite1','name',edit124.text); kann man das dann auch so einrichten dass der inhalt des memos in ner text datei gespeichert wird die den selben namen als die ini trägt nur die endung .txt hat?? |
Re: memo in ini speichern
Ja, mit:
Delphi-Quellcode:
ChangeFileExt(SaveDialog.Filename,'.txt');
|
Re: memo in ini speichern
hey cool thx so funktionierts ;) jetzt hab ich nur noch das problem dass ich 2 memos habe und jedes gerne in ein extra file speichern würde besteht da die möglichkeit, dass wenn das ini file hase.ini heißt dass er dann die textfiles hase1.txt und hase2.txt nennt??.
und vor allem wie mache ich es dass er beim laden von hase.ini dann auch denn inhalt aus hase1.txt und hase2.txt in die memos wieder einfügt? |
Re: memo in ini speichern
das mit dem speichern hab ich volgendermaßen gelöst:
Delphi-Quellcode:
aber wie funktioniert daas laden??
memo1.lines.savetofile(ChangeFileExt(FileName,'1.txt'));
Delphi-Quellcode:
funktioniert nicht dann will er die ffile 1.txt öffnen
memo1.lines.loadfromfile(ChangeFileExt(FileName,'1.txt'));
|
Re: memo in ini speichern
1. Wieso verwendest du als Erweiterung 1.txt? Ist der 1er mit Absicht da?
2. Die Prozedur zum Laden heißt LoadFromFile, dann kommt es immer darauf an, welchen Dateinamen du hast. Wenn du wieder den Dateinamen der ini-Datei hast, dann stimmt dein Funktionsaufruf |
Re: memo in ini speichern
jop der 1er is mit absicht da ;) ich habs schon hinbekommen thx
|
Re: memo in ini speichern
Ich wollte mal an diesen Teil anknüpfen und fragen ob es grundsätzlich möglich ist mit einfachen Befehlen wie:
Delphi-Quellcode:
und:
if savedialog1.execute
then begin memo1.lines.savetofile(savedialog1.filename); end;
Delphi-Quellcode:
auch die Inhalte mehrerer Memo-Felder in einer Datei abzuspeichern und auch wieder in den einzelnen entsprechenen Memo-feldern auszugeben. Oder ist das überhaupt möglich und was für Befehle braucht man dafür, wenn es mit den oben genannten nicht geht?
var
f: textfile; text: string; begin if opendialog1.execute then begin assignfile(f, opendialog1.FileName); reset(f); while eof(f)=false do begin readln(f, text); memo1.lines.add(text); end; closefile(f); end; |
Re: memo in ini speichern
mal zur ursprünglichen Frage welche auch die antwort auf die neue frage beinhaltet. Die kannst auch den Inhalt des memos in Hex-Zeichen wandeln und dann in die Ini speichern. Allerdings solltest du dabei beachten das der HexString doppelt so lang ist wie der Inhalt des Memos in Klarschrift
|
Re: memo in ini speichern
Wie würde das denn konkret an nem Beispiel aussehen? Wenn man z.B. in memo1 die Namen und in memo2 die dazugehörigen Alter stehen hat. Ich habe ehrlich gesagt nicht viel Ahnung davon. Ich könnte zwar ein memo in einer Textdatei speichern, aber mit ini hatte ich noch nicht zu tun. Aber scheinbar geht es nur damit. Wäre es möglich mir ein Beispiel zu geben woraus ich erkennen kann, wie ich es auf mein Programm anwenden kann?
|
Re: memo in ini speichern
Ganz simple Lösung:
Datei sieht so aus:
Code:
Also
11
12 Hallo WeltIch bin da !
Code:
:wink:
Länge Memo1
Länge Memo2 <Inhalt Memo1><Inhalt Memo2> |
Re: memo in ini speichern
und falls man doch die memos in die ini packen will:
Hilfsfunktion
Delphi-Quellcode:
so wird in die Ini-Datei gespeichert
function ConvStrToHex(AStr: String): String;
var LGiveback, LStr: String; LCount: Integer; begin setlength(LGiveback, length(AStr) * 2); for LCount := 1 to length(AStr) do begin LStr := IntToHex(Byte(AStr[LCount]), 2); move(LStr[1], LGiveback[(LCount - 1) * 2 + 1], 2); end; result := LGiveback; end; function ConvHexToStr(AHex: String): String; var LGiveback: String; LCount: Integer; begin setlength(LGiveback, Trunc(length(AHex) / 2)); for LCount := 0 to length(LGiveback) - 1 do LGiveback[LCount + 1] := Char(StrToInt('$' + AHex[LCount * 2 + 1] + AHex[LCount * 2 + 2])); result := LGiveback; end;
Delphi-Quellcode:
und so wirds wieder ausgelesen
ini.WriteString('Section', 'MemoInhalt', ConvStrToHex(Memo1.Text));
Delphi-Quellcode:
Memo1.Text := ConvHexToStr(ini.ReadString('Section', 'MemoInhalt', ''));
|
Re: memo in ini speichern
Zitat:
Delphi-Quellcode:
uses
IniFiles; procedure TForm1.Button1Click(Sender: TObject); begin with TMemIniFile.Create(ChangeFileExt(Application.ExeName, '.ini')) do try WriteString('Test', 'Memo1', Memo1.Lines.CommaText); UpdateFile; finally Free; end; end; procedure TForm1.Button2Click(Sender: TObject); begin with TMemIniFile.Create(ChangeFileExt(Application.ExeName, '.ini')) do try Memo1.Lines.CommaText := ReadString('Test', 'Memo1', EmptyStr); finally Free; end; end; |
Re: memo in ini speichern
@NicoDE: Da muss ich dich leider enttäuschen. Zum Beispiel sind in einer Ini führende Leerzeischen nicht erlaubt und auch einige Sonderzeischen nicht. Wenn ich mich recht entsinne werden auch mehrere Leerzeischen hintereinander zu einem Leerzeichen.
Wenn du also den Inhalt des Memos speicherst wo 2 Leerzeischen hintereinander auftreten kannst du dann beim laden das pech haben das nur noch eines der beiden leerzeischen vorhanden ist. |
Re: memo in ini speichern
Zitat:
Code:
Memo1=" foo","bar "
|
Re: memo in ini speichern
probiere mal
Delphi-Quellcode:
wenn in Memo1 folgendes steht
LIni.WriteString('Section', 'memotext', Memo1.Lines.CommaText);
Memo1.Lines.CommaText := LIni.ReadString('Section', 'memotext', '');
Code:
danach steht in Memo1 bischen was anderes, und zwar genau dieser Text aber jedes wort auf einer neuen zeile
textteil1 textteil nach 3 leerzeichen
|
Re: memo in ini speichern
Nö, mein Code funktioniert mit dem Text (Delphi 6 PE, Delphi 9 PE).
|
Re: memo in ini speichern
stimmt, da ist in meinem Testprojekt wohl irgendwas schief gegangen :oops:
|
Re: memo in ini speichern
So sollte es auf jeden Fall gehen:
Delphi-Quellcode:
//zum speichern:
//ini.writestring('Name','Schlüssel',MemoToHexString(memo1); //und zum laden: //Memo1.lines.commatext := HexStringToMemo(ini.readstring('Name', 'Schlüssel', 'Fehler')) function MemoToHexString(MEMO: TMemo): string; function StrToHexString(const s : string):string; begin if s = '' then Result := '' else begin SetLength(Result, Length(s)*2); BinToHex(PChar(s), PChar(Result), Length(s)); end; end; begin Result := StrToHexString(MEMO.Lines.CommaText); end; function HexStringToMemo(HS: String):string; function HexStringToStr(s : string):string; begin if s = '' then Result := '' else begin if Odd(length(s)) then s := '0'+s; SetLength(Result, Length(s) div 2); HexToBin(Pchar(s), PChar(Result), Length(Result)); end; end; begin result := hexstringtostr(hs); end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:39 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