Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Daten in Datei schreiben. (https://www.delphipraxis.net/39188-daten-datei-schreiben.html)

smart 30. Jan 2005 08:47


Daten in Datei schreiben.
 
Wie kann man so Daten in einer Datei schreiben und wieder auslesen.

Date1 Date2 Date3
Date4 Date5 Date6

Also wie in einer Tabelle.

ereetzer 30. Jan 2005 09:35

Re: Daten in Datei schreiben.
 
Zitat:

Zitat von smart
Wie kann man so Daten in einer Datei schreiben und wieder auslesen.

Date1 Date2 Date3
Date4 Date5 Date6

Also wie in einer Tabelle.

Hallo,

ich würde vorschlagen, das ganze mit Assignfile, Readln, Writeln etc.. zu machen. Such mal in der OH bei Delphi, das ist ein Beispiel dazu.
Dazu überlegst Du dir, wie Du Date1 Date2 etc trennst (meinetwegen mit einem ";". Beim auslesen suchst Du dir dann das TRennzeichen und liest entsprechend die Daten aus.

Nikolas 30. Jan 2005 09:47

Re: Daten in Datei schreiben.
 
Wenn die Tabelle rechteckig ist [immer die gleiche Anzahl von Einträgen pro Zeile] könntest du dir ein eigenes Datenformat überlegen:
Delphi-Quellcode:
Tabelle:
1 2 3
a b c

Deine Datei:
2 //Anzahl der Spalten
3 //Anzahl der Einträge pro Spalte

1
2
3
a
b
c
So sparst du dir die Trennzeichen und ein aufwändiges rumgespiele mit pos/copy/delete. Wenn die Tabelle nicht rechteckig ist, kannst du ja einfach eine '0' oder '_' eintragen. Diese Dateien kannst du dann auch recht einfach mit einem normalen Editor anschauen und sie überprüfen.

Nils_13 30. Jan 2005 10:01

Re: Daten in Datei schreiben.
 
Hi,

z.B. Text kännte man doch eigentlich nehmen?!

jim_raynor 30. Jan 2005 10:14

Re: Daten in Datei schreiben.
 
Vielleicht reicht dir auch eine TStringList in Verbindung mit SaveToFile und LoadFromFile.

smart 30. Jan 2005 10:35

Re: Daten in Datei schreiben.
 
Ich möchte ganz einfach, Festertittel und Position, von 4 Fenstern in einer Datei schreiben. Möglichst 1 Zeile 1 Fenster. zB.

Fenster1 250 100
Fenster2 410 1255
Fenster3 45 125
...

Das schreiben bekomme ich hin, aber das lesen nicht mehr, bzw. das Auswerten (Trennen der Daten in einer Zeile).

edosoft 30. Jan 2005 10:45

Re: Daten in Datei schreiben.
 
warum wie ne tabelle muss das der user mit notepad oder so sehen/bearbeiten können?

Jelly 30. Jan 2005 10:49

Re: Daten in Datei schreiben.
 
Wenns dir nur drum geht, die Fensterpostionen bei einem neuen Start wieder herzustellen, kannst du dafür auch die JvFormStorage Komponente benutzen, aus der JVCL.

Hador 30. Jan 2005 10:55

Re: Daten in Datei schreiben.
 
Du kannst dafür auch einfach 'ne ini benutzen

edosoft 30. Jan 2005 11:00

Re: Daten in Datei schreiben.
 
machs doch mit nem tfilestream, des ists beste.

Delphi-Quellcode:
fs := tfilestream.create('dateiname', fmcreate);
fs.write(form1.left, sizeof(integer));
fs.write(form1.top, sizeof(integer));
fs.write(form2.left, sizeof(integer));
{usw.}
fs.free;


//lesen:
fs := tfilestream.create('dateiname', fmOpenRead or fmShareDenyNone);
fs.seek(0, soFromBeginning); //musst mal teste vielleicht isses auch beim öffnen schon an anfang gespult dann kannst des weglassen.
fs.read(form1.left, sizeof(integer));
fs.read(form1.top, sizeof(integer));
fs.read(form2.left, sizeof(integer));
  //ich habs net getestet, kann sein dass du so dem "form1.top" kein wert zuweisen kannst, in dem fall muss du halt:
  fs.read(I{<- integer-variable}, sizeof(integer));
  form1.left := I;
  //schreiben.
fs.free;
der vorteil hier ist natürlich der dasses erstens schnell ist und zweitens wenig speicherplatz braucht, für jeden integer-wert den du speicherst werden lediglich 4 byte belegt.
(man kanns dafür nur noch mit nem hex-editor gscheit lesen)

Jelly 30. Jan 2005 11:01

Re: Daten in Datei schreiben.
 
Zitat:

Zitat von edosoft
für jeden integer-wert den du speicherst werden lediglich 4 byte belegt.

Und für eine x-Postion von z.B. 803 werden als String nur 3 byte belegt ;-)

smart 30. Jan 2005 11:02

Re: Daten in Datei schreiben.
 
Es sollte übersichlich sein, damit dem User klar wird, was zu was gehört. Das ganze sollte deswegen in einer Datei, damit diese Datei bearbeiten, bzw. austauschen kann. Bei VB. konnte man einfach - ; - beim schreiben und lesen setzen.

edosoft 30. Jan 2005 11:03

Re: Daten in Datei schreiben.
 
also wen der user die datei bearbeiten soll dann würd ich ne ini nehmen.


/edit: such mal inner hilfe nach TIniFile. damit geht das gaanz einfach.(etwa so wie ne registrierung auslesen oder so)

edosoft 30. Jan 2005 11:06

Re: Daten in Datei schreiben.
 
@Jelly: ahja...
und wenn du dann 4 von den positionen speicherst heists halt 283628498308
wo hört die eine auf und fängt die andre an? du musst also einen terminator hinbauen, der braucht wieder ein byte platz und nachher musst auch noch umständlich danach scannen.


ach und sonst kanns ja auch ein 2-byte-integer nehmen der dürfte für screen-koordinaten vollkommen reichen.(damit könnte man immerhin werte bis 65535 speichern)

smart 30. Jan 2005 11:12

Re: Daten in Datei schreiben.
 
An einer Ini habe ich auch schon gedacht. Da habe ich fast das gleiche Probl. mit der Trennung. Ich müsse dann eine Trennung beim schreiben setzten und diese dann beim lesen scannen. Mit z.B copy usw. ist das sehr aufwendig. Ich dachte das es dafür vieleicht eine einfache Lösung gibt.

edosoft 30. Jan 2005 11:18

Re: Daten in Datei schreiben.
 
sagte ich doch schon:

TINIFILE!!

Delphi-Quellcode:
var inif: tinifile;
begin
inif:=tinifile.create(dateiname);
inif.writestring('position_der_form_1_X', inttostr(form1.left));
inif.free;
end;
kann natürlich sein dasses total falsch ist ich hab delphi grad net geöffnet aber irgendwie so ähnlich isses, gibst halt mal irgendwo "tinifile" ein, klickst auf das wort so dass der cursor halt in dem wort drin ist und drückst F1.
in dem ini file heists dann halt irgendwie so:
position_der_form_1_X = 123

/edit: "if" ist wohl kein guter variablenname O.o

smart 30. Jan 2005 11:40

Re: Daten in Datei schreiben.
 
Vielen Dank für die Antworten. Das schreiben klappt, aber ich bekomme das ganze nicht richtig eingelesen?

Delphi-Quellcode:
var
  GameIni: TIniFile;
begin
  Gameini := TIniFile.Create('C:\Dokumente und Einstellungen\Test\Desktop\FUNGAME.INI');
  with GameIni do
  begin
    WriteString('Fenster', 'Tittel', 'Fenster1');
    WriteInteger('Fenster', 'Top', 3);
    WriteInteger('Fenster', 'Left', 3);
    Free;
  end;
Ich mache da irgendwie ein Denkfehler, aber ich komme nicht darauf. Könntest Du mir mal ein Tipp geben, wie man das ganze wieder einlesen kann.

smart 30. Jan 2005 12:10

Re: Daten in Datei schreiben.
 
Vielen Dank nochmal. Ich bin doch darauf gekommen.

Delphi-Quellcode:
var
  GameIni: TIniFile;
begin
  Gameini := TIniFile.Create('C:\Dokumente und Einstellungen\Test\Desktop\FUNGAME.INI');
  with GameIni do
  begin
   Form2.Caption := ReadString('Fenster', 'Tittel','');
   Form2.Top := ReadInteger('Fenster', 'Top', 0);
   Form2.Left := ReadInteger('Fenster', 'Left', 0);
    Free;
  end;

Jelly 30. Jan 2005 15:03

Re: Daten in Datei schreiben.
 
Zitat:

Zitat von edosoft
und wenn du dann 4 von den positionen speicherst heists halt 283628498308
wo hört die eine auf und fängt die andre an? du musst also einen terminator hinbauen, der braucht wieder ein byte platz und nachher musst auch noch umständlich danach scannen.

Du willst nicht wirklich mit mir eine Diskussion über ein Byte Festplattenspeicher führen, oder! Meine Bemerkung war ironischer Natur, falls das nicht gemerkt wurde :zwinker:

edosoft 30. Jan 2005 16:45

Re: Daten in Datei schreiben.
 
:-D


Alle Zeitangaben in WEZ +1. Es ist jetzt 05:59 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz