Entwickler-Ecke

Dateizugriff - Datensatzbeschreibung auf Textdatei anwenden


Stoffel1984 - Mo 01.09.03 14:50
Titel: Datensatzbeschreibung auf Textdatei anwenden
Hallo!

Ich habe hier eine Datensatzbeschreibung für Textdateien. Gibt es in Delphi eine Write Funktion für Textdateien, die ähnlich dem Copy Befehl arbeitet? Das Problem ist das ich eine Schnittstelle programmieren soll, die z.B. ab Stelle 15 3 Zeichen in einen String schreibt. Der Rest sind blanks. Und so weiter. Ich möchte also expliziet auf die Stellen in der Textdatei zugreifen. Ich denke mal ihr wisst was ich meine und habt auch schonmal sowas gesehn ;)

Viele Grüße,

Stoffel


FeG - Mo 01.09.03 15:31

Hallo,

dazu müsstest du die Datei komplett einlesen, eine Befehl, der nur einen Teil einer Datei verändert, gibt es IMHO nicht...

Zwei Möglichkeiten zum Öffnen von Dateien fallen mir spontan ein:

1) Komfortabel über TStringList... mit F1 erklärt die sich von selbst...
2) Über AssignFile(), Rewrite/Reset, Read/Write, etc.

Und dann halt mit dem normalen Copy-Befehl arbeiten...

MfG,
FeG


Stoffel1984 - Mo 01.09.03 15:47

Danke,

aber du hast mich glaube ich falsch verstanden. Ist aber kein Problem bin nicht so das große Erklärungsgenie ;)

Ich möchte eine Datei Neu erstellen. In diese Textdatei möchte ich dann an die einzelnen Stellen der Textdatei den Datensatz schreiben.

Verstanden? Ich hoffe es mal für.......mich ;)

Grüße, Stoffel


FeG - Mo 01.09.03 18:45

Stoffel1984 hat folgendes geschrieben:
Verstanden?

Glaub' schon :lol:

Also du willst eine Textdatei haben, in der Datensätze abgespeichert sind. Und der Rest der Datei soll mit irgendwas anderem gefüllt werden, also die Lücken mein ich...

Wieso sollen die Datensätze nur an bestimmten Stellen stehen?

Als Beispiel mal mit einer TStringList:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
procedure {irgendwas}
var List: TStringList; i: integer;
begin
List:=TStringList.Create;
try
  for i:=0 to 1000 {gesamt-Zeilenanzahl...} do
    List.Add('XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX'); //irgendein Zeichen halt...
  //Datensätze eintragen... z.B.:
  List[0]:='XXXX'+'MaierMüllerWasWeißIchWas'+'XX...X' {Rest-X'e});
  List.SaveToFile('C:\Datensätze.dat'//oder halt txt oder was auch immer...
finally
  List.Free
end;


War das das, was du wolltest??

Ansonsten - ich bin auch net grad das "Versteh-Genie" :wink:

... also dann vielleicht nochmal 'n bissl ausführlicher... :roll:

MfG,
FeG


Stoffel1984 - Di 02.09.03 09:04

Hallo und Danke!

Hast mir etwas weitergeholfen. Allerdings meinte ich nicht 1000 Zeilen sondern 1000 Stellen in einer Zeile. Hab mir jetzt mal was zusammengebastelt:


Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
function TEST(Name: string; Strasse: string; PLZ: string; Ort: string): string;
var
  List: TStrings; i: integer;
begin
  List:=TStringList.Create;
  try
    List.Add(' ');
    for i := 0 to 998 do
    begin
      List[0]:= List[0] + ' ';
    end;
    List.SaveToFile('test.dat')
  finally
    List.Free
  end;
end;


Allerdings habe ich das Problem das ich expliziet eine Stelle in dieser Zeile ansprechen muss. Also Stringzeile[255] z.B.

Da in der Spezifikation von der ich es hatte eine Textdatei mit einer Zeile erwartet wird in der die div. Datensätze hintereinander stehen, also ab Stelle 1-15 z.B. Name dann ab 16-35 Adresse usw.

Kannst mir folgen?


Gruß,

Stoffel


Delete - Di 02.09.03 09:14

Datensätze, Datei, keine DB. Das klingt für mich nach typisierten Dateien.


barfuesser - Di 02.09.03 09:20

Hi,

wenn Du aus irgendeinem Grund keine typisierten Dateien, wie Luckie vorschlug, benutzen willst, dann sieh Dir mal DupeString an:

Delphi-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
function TEST(Name: string; Strasse: string; PLZ: string; Ort: string): string
var 
  List: TStrings; i: integer; 
begin 
  List:=TStringList.Create; 
  try 
    List.Add(DupeString(' '1000)); 
    List.SaveToFile('test.dat'
  finally 
    List.Free 
  end
end;


barfuesser