Autor Beitrag
Unzi
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 57



BeitragVerfasst: Sa 05.10.02 20:02 
Hallo,

ich möchte einen String aus einer Datei auslesen (BlockRead) und wieder
hineinschreiben (BlockWrite). Wie mache ich das genau? Dake für eine Antwort schon im voraus.

Gruß, Martin
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Sa 05.10.02 21:45 
Reicht dir das Beispiel in der Delphi-Hilfe denn nicht aus? :?
Anstelle der "array[1..2048]of char"-Variablen benutzt du eben einen String.
Unzi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 57



BeitragVerfasst: So 06.10.02 11:59 
und wo finde ich dieses beispiel?
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 06.10.02 14:20 
Das hatte ich zwar schon gesagt, aber man muss ja nicht alles sehen ... :roll:

Aber mal so nebenbei -
"BlockRead/BlockWrite" eignen sich am besten für untypisierte Dateien. Was weiß ich, wenn du z.B. ein Record speichern willst, das aus Bytes, Strings mit fester Länge, Dwords usw. besteht:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
type
  Chaotica =
    record
      dwType : dword;
      name : string[32];
      bFlag : byte;
      iLen : integer;
    end;

Für typisierte Dateien (wie auch Textdateien) eignen sich "Read(Ln)" und "Write(Ln)". Das dürfte mit den Strings am einfachsten sein.
Unzi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 57



BeitragVerfasst: So 06.10.02 16:12 
Ich habe schon nicht übersehen, dass es in der Delphi-Hilfe liegt, aber die Delphi-Hilfe ist groß... Aber das ist jetzt erstmal unwichtig. Ich bin deinem Rat gefolgt und wollte es mit einem Array of char probieren. Ich möchte aber keine Ressourcen vergeuden und den char-Arrray nur so groß machen wie die Datei. Dafür müsste ich allerdings in der Funktion den Array expandieren. In C++ gibt es dafür realloc(), in Delphi gibt es sowas sicher auch, ich weiß nur nicht, wie das heißt. Weißt du es vielleicht?

Danke im voraus, Martin
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: So 06.10.02 21:15 
Unzi hat folgendes geschrieben:
Ich habe schon nicht übersehen, dass es in der Delphi-Hilfe liegt, aber die Delphi-Hilfe ist groß...

Also, wenn ich etwas über einen bestimmten Befehl wissen will, dann benutze ich dazu den Index und tippe den Begriff dort ein. Oder ich schreib´s in den Delphi-Editor, geh mit dem Cursor drauf und drücke F1. - Aber das jetzt erst einmal unwichtig.

Zitat:
Ich bin deinem Rat gefolgt und wollte es mit einem Array of char probieren.

Ich kann mich nicht erinnern, dir diesen Rat gegeben zu haben. Ich sagte:
MathiasSimmack hat folgendes geschrieben:
Anstelle der "array[1..2048]of char"-Variablen benutzt du eben einen String.
Unzi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 57



BeitragVerfasst: Mo 21.10.02 16:05 
Danke für deinen Tipp mit F1. Ich habe Auch ein Beispiel gefunden, dass ich für's Auslesen nehmen konnte. Nun möchte ich aber einen String wieder in eine Datei zurückschreiben. Hättest du Beispielcode für mich?
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 21.10.02 18:14 
Na ja, das Prinzip ist doch das gleiche - nur eben "BlockWrite".
Du müsstest nur die tatsächliche Länge deines Strings benutzen, evtl. die Position (mit "Seek") in der Datei anpassen und dann losschreiben.

Die Hilfe enthält ja auch ein entsprechendes Beispiel zur Ansicht.
Das mit dem Beispielcode ist so eine Sache, weil du ja nicht sagst, was du eigentlich vorhast. Oder ich schnall´s gerade nicht so.
Zitat:
Ich habe Auch ein Beispiel gefunden, dass ich für's Auslesen nehmen konnte. Nun möchte ich aber einen String wieder in eine Datei zurückschreiben.

In die selbe Datei?
An die selbe Position, von der du ihn evtl. gelesen hast?
Oder generell?
Unzi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 57



BeitragVerfasst: Mo 21.10.02 18:41 
Ich habe bei Read nachgeschaut, weil du gesagt hast:

Zitat:
Für typisierte Dateien (wie auch Textdateien) eignen sich "Read(Ln)" und "Write(Ln)". Das dürfte mit den Strings am einfachsten sein.
.

Ich möchte zuerst Einstellungen für ein Programm aus einer Datei in ein Edit-Feld lesen. Dazu nehme ich folgenden Code:
ausblenden Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
var Datei:file of char;zwbuffer:char;endbuffer:string;
begin
AssignFile(Datei,'settings.dat');
Reset(Datei);
while not eof(Datei) do begin
Read(Datei,zwbuffer);
endbuffer:=endbuffer+zwbuffer;
end;
Edit1.Text:=endbuffer;
CloseFile(Datei);


Danach möchte ich nach Buttondruck (Button1Click) die Einstellungen wieder in dieselbe Datei an dieselbe Position schreiben. Weißt du jetzt, was ich meine?
MathiasSimmack
Ehemaliges Mitglied
Erhaltene Danke: 1



BeitragVerfasst: Mo 21.10.02 19:39 
Ja, aber da wäre IMHO ein TMemo besser.
Mit dem enormen Vorteil, Dateien laden und speichern zu können.
ausblenden Quelltext
1:
2:
Memo1.Lines.LoadFromFile
Memo1.Lines.SaveToFile
Unzi Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic star
Beiträge: 57



BeitragVerfasst: Di 22.10.02 08:47 
Genial! Dumm ist nur, dass ich wirklich nur EINE Zeile brauche!

Wer weiß mehr darüber? Ich stelle meine Frage an alle auf dem Forum!