Entwickler-Ecke

Dateizugriff - Textdokument in Memo einlesen


Mausii - Mi 19.05.10 17:53
Titel: Textdokument in Memo einlesen
Hallo zusammen,

ich habe ein kleines Problem und zwar möchte ich wenn ich auf einen Button drücken, dass sich dort ein OpenDialog öfnnet und ich ein Textdokument in ein Memo einlesen kann. Es funktioniert eigentlich... Bis auf, dass ich nur Dokumente mit der Endung .txt ein
lesen kann. Außerdem soll er das Ganze zeilenweise einlesen und nicht buchstabenweise. Könnt ihr mir helfen?

Hier mein Quellcode

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
procedure TData.LoadFromFile;
var
  iFileHandle : Integer;
  iFileLength : Integer;
  iBytesRead  : Integer;
  Buffer      : PChar;
  i           : Integer;
  sTimeStamp  : string;
begin
  if FU_ASTM_Sender.FrmASTM_Sender.OpenDialog1.Execute then
  begin
    try
      iFileHandle := SysUtils.FileOpen(FU_ASTM_Sender.FrmASTM_Sender.OpenDialog1.FileName, fmOpenRead);
      iFileLength := SysUtils.FileSeek(iFileHandle,0,2);
      FileSeek(iFileHandle,0,0);
      Buffer := PChar(System.AllocMem(iFileLength + 1));
      iBytesRead := SysUtils.FileRead(iFileHandle, Buffer^, iFileLength);
      sTimeStamp := FormatDateTime('YYYYMMDDHHNNSS',now);
      FU_ASTM_Sender.FrmASTM_Sender.ASTM.lines.Clear;
      FileClose(iFileHandle);
      for i := 0 to iBytesRead-1 do
      begin
      if i = 0 then
        FU_ASTM_Sender.FrmASTM_Sender.ASTM.lines.Add(StringReplace(Buffer[i],'#TS#',sTimeStamp,[rfIgnoreCase]))
      else
        FU_ASTM_Sender.FrmASTM_Sender.ASTM.lines.Add(Buffer[i]);
  end;
    finally
      FreeMem(Buffer);
    end;
  end;
end;


Moderiert von user profile iconNarses: Delphi-Tags hinzugefügt
Moderiert von user profile iconNarses: Topic aus Delphi Language (Object-Pascal) / CLX verschoben am Mi 19.05.2010 um 23:31


Delete - Mi 19.05.10 17:57

Wie wäre es mit der Methode LoadFromFile von TMemo? Und was für Dateien außer Textdateien willst du noch laden? Kommen in der Datei Steuerzeichen vor, wird an der Stelle das Laden bzw. das anzeigen abgebrochen, weil ein Memo keine Steuerzeichen darstellen kann.


Georg08 - Mi 19.05.10 18:22

Also so spontan würde mir die Lösung von Luckie [http://www.delphi-forum.de/user_Luckie.html] einfallen oder die umständlichere AssignFile-Methode

EDIT:
Ich habe mal beide Methoden in ein PRogramm gepackt... (Dateianhang)


Xion - Mi 19.05.10 19:09

user profile iconMausii hat folgendes geschrieben Zum zitierten Posting springen:
ich habe ein kleines Problem und zwar möchte ich wenn ich auf einen Button drücken, dass sich dort ein OpenDialog öfnnet und ich ein Textdokument in ein Memo einlesen kann. Es funktioniert eigentlich... Bis auf, dass ich nur Dokumente mit der Endung .txt ein lesen kann.


Zu der Auswahl von nur .txt (googlen hilft):

http://www.delphibasics.co.uk/RTL.asp?Name=TOpenDialog hat folgendes geschrieben:
Filter property
This allows only certain file types to be displayed and selectable. The filter text is displayed in a drop down below the file name field. The following example selects for text files only:

openDialog.Filter := 'Text files only|*.txt';

The drop down dialog shows the description before the | separator. After the separator, you define a mask that selects the files you want.

openDialog.Filter := 'Text and Word files only|*.txt;*.doc';

Above we have allowed two different file types, separated by a ;.

openDialog.Filter := 'Text files|*.txt|Word files|*.doc';

Above we have allowed text and Word files as two options in the drop down list.