Entwickler-Ecke

Sonstiges (Delphi) - Frage zu AssignFile (im weitesten Sinne)


Matclou - Do 17.12.09 17:13
Titel: Frage zu AssignFile (im weitesten Sinne)
Hallo Leute, ich hab mal wieder ne Verständnisfrage, die euch sicher langweilen wird, weil ich ein Anfänger bin, der eben noch lernt ;)

Bin gerade dabei mir anzulernen, wie man sachen vom Programm aus in eine Textdatei überträgt. Damit ich die Daten auch später wieder einlesen kann, müssen einzelne Eigenschaften (wie z.b. Erscheinungsjahr oder Komponist) in eine eigene Zeile geschrieben, wie auch dieser Ausschnitt von "schule.de" aussagt (http://www.schule.de/schulen/oszhdl/gymnasium/faecher/informatik/rechnerarchitektur/dateien/pascal_dateien.htm):

"Eine Textdatei ist eine Ansammlung von Zeichen, die in Zeilen angeordnet sind.
Die zu verwaltenden Daten werden jeweils als einzelne Textzeilen gespeichert, die durch Zeilenendemarken getrennt sind, i.d.R. CRT oder CRT + LF"


Die Frage ist: Wie kann ich eine solche Lehrzeile in den Editor einbauen vom Programm aus - denn der Text sagt was vom CRT oder CRT+LF aber ich habe keine Ahnung was das ist und wie man es einsetzt... Ich benutze überings das veraltete, aber einfache, AssignFile- Prinzip, ich möchte aber kein Gemecker hören :D ;)

Borland Delphi 6,

hier mein bisheriger Programmtext, so wie er - auf niedrigem Niveau - funktioniert:

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:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  TForm1 = class(TForm)
    Button1: TButton;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    Edit4: TEdit;
    procedure Button1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
var Datei : TextFile;
Name,Komponist,Jahr : string;
DauerMinuten : Integer;
begin
AssignFile(Datei,'C:\Dokumente und Einstellungen\Matthias\Desktop\test.txt');
Reset(Datei);
Readln(Datei, Name, Komponist, Jahr, DauerMinuten);
Rewrite(Datei);
Name:=Edit1.text;
Komponist:=Edit2.text;
Jahr:=Edit3.text;
DauerMinuten:=StrToInt(Edit4.text);
Writeln(Datei, Name, Komponist, Jahr, DauerMinuten);
CloseFile(Datei);
end;

end.


Ich danke schonmal für die Hilfe ;)

Moderiert von user profile iconGausi: Code- durch Delphi-Tags ersetzt


elundril - Do 17.12.09 17:39

CRT = Carriage Return
LF = Line feed

Das sind die Zeichen die einem Anzeigen das eine neue Zeile beginnt. Einfügen kannst du die wie normale Zeichen.


Delphi-Quelltext
1:
2:
3:
deinString := deinString + #10//fügt einen Linefeed ein
deinString := deinString + #13//fügt ein Carriage Return ein
deinString := deinString + #13#10//fügt LF + CRT ein


lg elundril


Matclou - Do 17.12.09 17:50

Ah, vielen Dank! ;)


Matclou - Do 17.12.09 18:05

Okay, neue Frage, gerade entdeckt:

Wie kann ich die sachen denn wieder rausziehen?

Sagen wir mal, dass wir folgende DATEI haben:

--
HARRY
WILLIAMS
2001
--

Als Beispiel - Harry ist Titel, Williams Komponist, 2001 ist das Jahr

Wie ziehe ich diese Infos aus der Datei heraus?


elundril - Do 17.12.09 18:11

naja, da immer nur die 3 sachen rauskommen aus der datei kannst du ja einfach mit readln arbeiten, oder?

bsp zu readln [http://www.delphibasics.co.uk/RTL.asp?Name=ReadLn]

lg elundril


Matclou - Do 17.12.09 18:24

mmh versteh ich nicht :D

Muss ich mich noch mal näher mit beschäftigen, aber bei mir klappts bisher nicht... VIelleicht hat jmd. Erfahrenes (auf dem Bereich)ja (netterweise) die Zeit, mir die paar Zeilen aufzuschreiben :(


elundril - Do 17.12.09 18:31

user profile iconMatclou hat folgendes geschrieben Zum zitierten Posting springen:
mmh versteh ich nicht :D


ich frag mich dann wie du das readln in deinem ersten Post hinbekommen hast??

lg elundril


Matclou - Do 17.12.09 18:32

user profile iconelundril hat folgendes geschrieben Zum zitierten Posting springen:
user profile iconMatclou hat folgendes geschrieben Zum zitierten Posting springen:
mmh versteh ich nicht :D


ich frag mich dann wie du das readln in deinem ersten Post hinbekommen hast??

lg elundril

Das ging i-wie noch^^
Aber ich möchte jetzt das ganze in die Edit-Felder bekommen und wenn ich Edit1.text:=name; hinschreibe klappt es nicht...


elundril - Do 17.12.09 19:51

Ok, basteln wir zusammen. *Elundril läutet zur fröhlichen Bastelstunde*

Also, wir brauchen ein AssignFile, ein ReadLn, ein Reset, eine String-Variable, ein EOF.

Also, zuerst Assignen wir einer TextFile-Variablen eine Datei. Dann Reseten wir damit wir zum Anfang kommen. Jetzt lesen wir solange aus bis das ende der Datei kommt (Danke an user profile iconMarc. an dieser Stelle).

Jetzt setzen wir das zu einem Sourcecode zusammen:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
var Datei: TextFile;
    Name, Komponist, Jahr: String;
    Dauer: Integer;
begin
  AssignFile(Datei, 'C:\Dokumente und Einstellungen\Matthias\Desktop\test.txt');
  Reset(Datei);
  while not EOF(Datei) do begin
    ReadLn(Datei, Name);
    Edit1.Text := Name;
    ReadLn(Datei, Komponist);
    Edit2.Text := Komponist;
    ReadLn(Datei, Jahr);
    Edit3.Text := Jahr;
    ReadLn(Datei, Dauer);
    Edit4.Text := IntToStr(Dauer);
  end;
  CloseFile(Datei);
end;


lg elundril


Matclou - Fr 18.12.09 12:21

ah, perfekt, werde das direkt, wenn ich zuhause bin ausprobierne ;)

Vielen Dank!