Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Hilfe mit Dateien (https://www.delphipraxis.net/69515-hilfe-mit-dateien.html)

qb-tim 16. Mai 2006 12:05


Hilfe mit Dateien
 
Ich habe schon mal eine Frage über den allgemeinen Dateiumgang gestellt aber ich finde mich nicht im Dschungel der Befehle zurecht! :(

Ich habe folgendes Problem:

Mein Ziel ist:

Ich möchte genau 81 Zahlen (von 0 bis 9) in eine Textdatei speichern damit ich sie später laden kann

Delphi-Quellcode:
var Zahl : array [1..9, 1..9] of Integer;

begin
  //Befehl zum Öffnen der Datei
  for x := 1 to 9 do
    for y := 1 to 9 do
      Zahl[x, y] := //Befehl die nächste Zahl aus der Datei zu laden
  //Befehl zum Schließen der Datei
end;
Meine Fragen:

1. Welche drei Befehle muss ich da einsetzten?
2. Wie muss ich die Zahlen in der TXT Datei schreiben, damit Delphi sie lesen kann?

KrasserChecker 16. Mai 2006 12:15

Re: Hilfe mit Dateien
 
Hi, Du solltest es dir einfach machen und über eine Stringliste gehen.
Dort kannst Du erst alle Zahlen eintragen (oder auch aus einer Datei laden) und dann einfach auslesen.
Dadurch sparst Du dir auch das ganze Dateihandling.

Speichern:
Delphi-Quellcode:
var SL: TStringList; Zahl : array [1..9, 1..9] of Integer;

begin
  SL := TStringList.Create;
  try
    for x := 1 to 9 do
      for y := 1 to 9 do
        SL.Add(IntToStr(Zahl[x, y]));
   
    SL.SaveToFile('c:\temp\test.txt');
  finally
    SL.Free;
  end;
end;
Laden:
Delphi-Quellcode:
var SL: TStringList; Zahl : array [1..9, 1..9] of Integer; Index: Integer;

begin
  SL := TStringList.Create;
  try
    SL.LoadFromFile('c:\temp\test.txt');
    Index := 0;

    for x := 1 to 9 do
      for y := 1 to 9 do
      begin
        Zahl[x, y] := StrToInt(SL[Index]);
        inc(Index);
      end;
  finally
    SL.Free;
  end;
end;

qb-tim 16. Mai 2006 13:00

Re: Hilfe mit Dateien
 
Cool! :???:

Danke - das kann ich sehr gebrauchen! :thumb:

:wink:

qb-tim 16. Mai 2006 18:38

Re: Hilfe mit Dateien
 
Hmm...

Irgendwie klappt das nicht... :(

Wenn ich meine Textdatei öffne sehe ich nir föllig falsche Zahlen...

Klaus01 16. Mai 2006 18:40

Re: Hilfe mit Dateien
 
wie sehen denn die Zahlen aus, wenn Du die Datei mit dem Notepad öffnest.

Wie schreibst Du die Zahlen in die Datei, als Integer oder String?

Grüße
Klaus

RavenIV 16. Mai 2006 18:46

Re: Hilfe mit Dateien
 
Zitat:

Zitat von qb-tim
Hmm...

Irgendwie klappt das nicht... :(

Wenn ich meine Textdatei öffne sehe ich nir föllig falsche Zahlen...

wie und wo generierst du die Zahlen?
lass mal ein bisschen quellcode sehen...

himitsu 16. Mai 2006 18:59

Re: Hilfe mit Dateien
 
Und was ist, wenn du die Datei mit der obrigen Methode ausliest?

PS: wenn di die Zahlen nicht im Textformat (in der Datei) benötigst ...
(damit wird die Datei genau 76 Byte groß, was wohl kleiner ist, als es meistens der Fall ist)
Delphi-Quellcode:
Type TZahl = packed Array[1..9, 1..9] of Integer;

Var Zahl: TZahl;



Var myFile: File of TZahl;

//schreiben
AssignFile(myFile, ...);
Rewrite(myFile);
Write(myFile, Zahl);
CloseFile(myFile);

//lesen
AssignFile(myFile, ...);
Reset(myFile);
Read(myFile, Zahl);
CloseFile(myFile);

Hawkeye219 16. Mai 2006 23:22

Re: Hilfe mit Dateien
 
Zitat:

Zitat von himitsu
damit wird die Datei genau 76 Byte groß, was wohl kleiner ist, als es meistens der Fall ist

Mit der folgenden Deklaration komme ich auf 81 Bytes:

Delphi-Quellcode:
type
  TZahl = packed array [1..9, 1..9] of 0..9;
Also raus mit der Sprache, wie hast du noch 5 Bytes eingespart?

Gruß Hawkeye

nat 16. Mai 2006 23:54

Re: Hilfe mit Dateien
 
da er nur zahlen von 0-9 verwendet könnte er sogar noch 50% der dateigröße sparen, wenn
er prob byte 2 zahlen abspeichert. um die 9 darzustellen braucht man 4 bits, daher kann
man in einem byte 2 zahlen unterbringen. aber ich denke das würde in diesem zusammenhang
hier das ganze nur unnötig verkomplizieren! ;)

qb-tim 17. Mai 2006 14:37

Re: Hilfe mit Dateien
 
Danke himitsu :thumb:

Die Befehle habe ich gesucht!

Mein Programm sieht jetzt so aus:

Delphi-Quellcode:
procedure TForm1.FormActivate(Sender: TObject);
var x, y : Integer;
begin
  for x := 1 to 9 do
    for y := 1 to 9 do
    begin
      Edit[x, y] := TEdit.Create(Self);
      Edit[x, y].Parent := Form1;
      Edit[x, y].Height := 25;
      Edit[x, y].Width := 25;
      Edit[x, y].Text := '0';
    end;
  for x := 1 to 9 do
  begin
    Edit[x, 1].Top := 8;
    Edit[x, 2].Top := 32;
    Edit[x, 3].Top := 56;
    Edit[x, 4].Top := 88;
    Edit[x, 5].Top := 112;
    Edit[x, 6].Top := 136;
    Edit[x, 7].Top := 168;
    Edit[x, 8].Top := 192;
    Edit[x, 9].Top := 216;
  end;
  for y := 1 to 9 do
  begin
    Edit[1, y].Left := 8;
    Edit[2, y].Left := 32;
    Edit[3, y].Left := 56;
    Edit[4, y].Left := 88;
    Edit[5, y].Left := 112;
    Edit[6, y].Left := 136;
    Edit[7, y].Left := 168;
    Edit[8, y].Left := 192;
    Edit[9, y].Left := 216;
  end;
end;

procedure TForm1.Button1Click(Sender: TObject);
Var x, y, z : Integer;
Var tmp : String;
Var myFile: File of Integer;

begin

tmp := Edit1.Text;

//schreiben
AssignFile(myFile, tmp);
Rewrite(myFile);
for x := 1 to 9 do
  for y := 1 to 9 do
  begin
    z := StrToInt(Edit[x,y].Text);
    Write(myFile, z);
  end;
CloseFile(myFile);

//lesen
AssignFile(myFile, tmp);
Reset(myFile);
for x := 1 to 9 do
  for y := 1 to 9 do
  begin
    Read(myFile, z);
    Edit[x,y].Text := IntToStr(z);
    if z = 0 then
      Edit[x,y].Text := '';
  end;
CloseFile(myFile);

end;
Es ist nur ein Testprogramm also ist es nichts Bewundernswertes...

:cheers:


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:09 Uhr.
Seite 1 von 2  1 2      

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