[gelöst] File2Memo

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
exc-jdbi
Beiträge: 64
Registriert: So 3. Aug 2014, 03:37

[gelöst] File2Memo

Beitrag von exc-jdbi »

Guten Tag Community

Ich möchte den Inhalt einer Datei in ein Memo einfügen. In der Datei ist normaler Text mit Sonderzeichen, wie wir es im Deutschen kennen.

Ich nutze folgenden Code. Es werden mir jedoch nur "??" in der Memo ausgegebe,

Code: Alles auswählen

 
Memo1.Lines.LoadFromFile(strPathFileName) ;  
 
Da es sich um einen sehr grossen Text handelt, wäre es mir lieber zuerst den Weg über ein TMemoryStream und nachher in das Memo gehen. In etwa so.

Code: Alles auswählen

 
//...
ms:= TMemoryStream.Create; 
ms.LoadFromFile(strPathFileName);
Memo1.Lines.LoadFromStream(ms) ;  
 
Aber auch das funktioniert nicht wie erwartet. Es werden wieder "??" im Memo ausgegeben.

Kann mir da bitte jemand einen Tip geben?

Danke und freundliche Grüsse

exc-jdbi
Zuletzt geändert von Lori am Mi 6. Aug 2014, 12:41, insgesamt 2-mal geändert.
Grund: richtiger Highlighter

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: File2Memo

Beitrag von Michl »

Zeigt es generell nur "??" an oder nur bei bestimmten Zeichen, wie "ÄÖÜ" (dann wäre es Problem mit dem Zeichensatz und Du müsstest den String konvertieren).
exc-jdbi hat geschrieben:Es werden mir jedoch nur "??" in der Memo ausgegebe,

Code: Alles auswählen

 
Memo1.Lines.LoadFromFile(strPathFileName) ;  
 
Das sollte eigentlich funktionieren. Kannst Du ein Minimalbsp erstellen und als .zip hier hochladen, was das fehlerhafte Verhalten zeigt?!

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

exc-jdbi
Beiträge: 64
Registriert: So 3. Aug 2014, 03:37

Re: File2Memo

Beitrag von exc-jdbi »

Guten Tag Michl

Danke für die Antwort.

Ich habe die Text-Datei jetzt in Utf8 gespeicher und so funktionierts.

Code: Alles auswählen

 
 Memo1.Lines.LoadFromFile(UTF8ToAnsi(strPathFileName)) ; 
 
Ich werde es aber trozdem noch umändern müssen, da alle Text-Dateien bei mir in UniCode gespeichert sind. Sorry das ich das vergessen habe zu erwähnen.


Der Zweite Teil wäre mir aber wichtiger.

Freundliche Grüsse

exc-jdbi
Zuletzt geändert von Lori am Mi 6. Aug 2014, 12:41, insgesamt 1-mal geändert.
Grund: richtiger Highlighter

Michl
Beiträge: 2511
Registriert: Di 19. Jun 2012, 12:54

Re: File2Memo

Beitrag von Michl »

exc-jdbi hat geschrieben:Ich habe die Text-Datei jetzt in Utf8 gespeicher und so funktionierts.

Code: Alles auswählen

 
 Memo1.Lines.LoadFromFile(UTF8ToAnsi(strPathFileName)) ; 
 
Wenn das so funktioniert, dann hattest Du ein Problem mit den Sonderzeichen im "strPathFileName" und nicht mit den Zeichen in der Textdatei.

Daher sollte das mit dem TMemoryStream identisch funktionieren:

Code: Alles auswählen

var
  MS: TMemoryStream;
begin
  MS:=TMemoryStream.Create;
  try
    MS.LoadFromFile(UTF8ToConsole(strPathFileName));
    Memo1.Lines.LoadFromStream(MS);
  except
  end;
  MS.Free;
end; 

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection;  

exc-jdbi
Beiträge: 64
Registriert: So 3. Aug 2014, 03:37

Re: File2Memo

Beitrag von exc-jdbi »

Danke Michl

Funktioniert mit Utf8 einwandfrei.

Um weiteren Text noch anzufügen.

Code: Alles auswählen

 
var strPathFileName: string =exepatch+ 'abcUtf8.txt';
     str:string;
....
....
ms.LoadFromFile(UTF8ToAnsi(strPathFileName));
SetString(str, PAnsiChar(ms.Memory), ms.Size);
Memo1.Lines.add(str);
 
Da bei mir jedoch alle Dateien in UniCode gespeichert sind, werde ich mir noch die andere Lösungen erarbeiten müssen.
Dazu habe ich aber schon sachen gefunden. Z.B. unter (noch nicht getestet)
http://www.delphipraxis.net/106590-unicode-ansi.html

Nochmals Danke für alles.

Freundliche Grüsse

exc-jdbi
Zuletzt geändert von Lori am Mi 6. Aug 2014, 12:42, insgesamt 1-mal geändert.
Grund: richtiger Highlighter

Antworten