Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Zahlen von x bis y direkt in Datei speichern (https://www.delphipraxis.net/100531-zahlen-von-x-bis-y-direkt-datei-speichern.html)

Al Ex 29. Sep 2007 19:59


Zahlen von x bis y direkt in Datei speichern
 
Hallo Leute, hab folgendes Problem:

Ich kann nur in ein Memo-Feld die Zahlen eintragen lassen und dann in eine Datei abspeichern lassen.
Für das direkte Abspeichern bin ich zu dumm :wall:
Wie lautet dazu der Code??
Außerdem dauert meine Metode ewig lange für Zahlen von 100000000 bis 999999999.

Vielen Dank im Voraus und Grüße

Alex


Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);

 var x :integer;
   begin
 memo1.Lines.clear;
 for x := 100000000 to 100000009 do Begin
 memo1.lines.Add(IntToStr(x));
 Memo1.Lines.SaveToFile('Datei.plr');
 End;
end;


end.

3_of_8 29. Sep 2007 20:02

Re: Zahlen von x bis y direkt in Datei speichern
 
Kein Wunder, dass das lange dauert - es sind auf 8 GB an Daten.

silver-moon-2000 29. Sep 2007 20:05

Re: Zahlen von x bis y direkt in Datei speichern
 
Zitat:

Zitat von Al Ex
Außerdem dauert meine Metode ewig lange für Zahlen von 100000000 bis 999999999.

Hallo,

das dürfte ziemlich lang dauern, da es sich um mehrere GigaByte handeln dürfte..., aber
nur so als kurze Anmerkung :zwinker: :
Es reicht, einmal ganz am Ende zu speichern. Du Speichert die Datei in jedem Zyklus der for-Schlefe, das dürfte auch ziemlich viel Zeit verbraten.

Delphi-Quellcode:
 
for x := 100000000 to 100000009 do
  memo1.lines.Add(IntToStr(x));
Memo1.Lines.SaveToFile('Datei.plr');

Dax 29. Sep 2007 20:08

Re: Zahlen von x bis y direkt in Datei speichern
 
Delphi-Quellcode:
procedure blubb(left, right: integer; file: string);
var stream: tfilestream; s: string; i: integer;
begin
  if right < left then exit;
  stream := tfilestream.create(file);
  try
    for i := left to right do
    begin
      s := inttostr(i) + #13#10;
      if length(s) > 4*1024 then
      begin
        stream.write(s[1], length(s));
        s := '';
      end;
    end;
    if length(s) > 0 then
      stream.write(s[1], length(s));
  finally  
    stream.free();
  end;
end;
Ungetestet, sollte aber (so in der Art) recht schnell funktionieren, vor allem ohne den Umweg über Memos...

dominikkv 29. Sep 2007 20:28

Re: Zahlen von x bis y direkt in Datei speichern
 
Delphi-Quellcode:
procedure Speichern(Von, Bis: Integer; FileName: String);
var
  MyFile: File of Integer;
  I: Integer;
begin
  AssignFile(MyFile, FileName);
  ReWrite(MyFile);
  try
    for i := Von to Bis do
      Write(MyFile, I);
  finally
    CloseFile(MyFile);
  end;
end;

Dax 29. Sep 2007 20:30

Re: Zahlen von x bis y direkt in Datei speichern
 
Er will (soweit ich das sehe) die Zahlen als Zeilen einer Datei, also wäre es nicht nur WriteLn, sondern sogar WriteLn(IntToStr(I)).

Hador 29. Sep 2007 21:15

Re: Zahlen von x bis y direkt in Datei speichern
 
Zitat:

Zitat von Dax
Er will (soweit ich das sehe) die Zahlen als Zeilen einer Datei, also wäre es nicht nur WriteLn, sondern sogar WriteLn(IntToStr(I)).

Annahme: Dein erstes WriteLn sollte Write heißen.

Das IntToStr() kannst du dir dann auch sparen. WriteLn kann auch direkt mit ints umgehen

DP-Maintenance 29. Sep 2007 21:19

DP-Maintenance
 
Dieses Thema wurde von "Matze" von "Die Delphi-IDE" nach "Sonstige Fragen zu Delphi" verschoben.

3_of_8 29. Sep 2007 21:52

Re: Zahlen von x bis y direkt in Datei speichern
 
Aber nicht in einem typisierten file of Integer. Dann wird der Integer in binärer Form in die Datei geschrieben und nicht - wie gewünscht - als Text. Dafür braucht man dann ein TextFile.

Im übrigen sind diese Datei-Routinen aus System doch schon seit einiger Zeit als veraltet anzusehen, wenn ich mich nicht irre, und man sollte besser auf den TFileStream zurückgreifen.

dominikkv 29. Sep 2007 21:56

Re: Zahlen von x bis y direkt in Datei speichern
 
hmmm, ich sehe nirgens dass die zahl als text gespeichert werden soll...
ich würd sagen der threadersteller sagt mal genauer was er will.

und nur weil meine methode veraltet ist (ist sie das ?!?) heißt das noch nicht dass sie schlecht ist :cyclops:

Khabarakh 29. Sep 2007 22:08

Re: Zahlen von x bis y direkt in Datei speichern
 
Zitat:

Zitat von dominikkv
hmmm, ich sehe nirgens dass die zahl als text gespeichert werden soll...

Naja, was macht denn der Code im ersten Post?
Zitat:

und nur weil meine methode veraltet ist (ist sie das ?!?) heißt das noch nicht dass sie schlecht ist :cyclops:
Welche Sinn ergäbe es, eine neue Methode einzuführen, wäre sie der alten nicht überlegen? Vor allem dem Anfänger sollte man dann nicht noch die unterlegene Methode beibringen.

SirTwist 30. Sep 2007 07:07

Re: Zahlen von x bis y direkt in Datei speichern
 
Zitat:

Zitat von Khabarakh
Welche Sinn ergäbe es, eine neue Methode einzuführen, wäre sie der alten nicht überlegen? Vor allem dem Anfänger sollte man dann nicht noch die unterlegene Methode beibringen.

Nur weil TFileStream mehr Möglichkeiten hat als AssignFile/WriteLn/... heißt das ja nicht, dass für ganz einfache Dateioperationen letzteres nicht genau das richtige ist. Wenn es einfach nur ums Einlesen/Abspeichern von Text geht, verwende ich nur die klassischen Pascal-Funktionen.

Gruß,
SirTwist

Khabarakh 30. Sep 2007 11:37

Re: Zahlen von x bis y direkt in Datei speichern
 
Zitat:

Zitat von SirTwist
Nur weil TFileStream mehr Möglichkeiten hat als AssignFile/WriteLn/... heißt das ja nicht, dass für ganz einfache Dateioperationen letzteres nicht genau das richtige ist.

Ein Anfänger soll also deiner Meinung nach zwei verschiedene Methoden zu beherrschen lernen, dann muss es aber wirklich gute Gründe für beide Methoden geben. Die sehe ich aber nicht, abgesehen von der von dir bereits erwähnten generell höheren Mächtigkeit der Streams sehe ich lediglich zwei große Nachteile der File-Typen, die beide mit ihrem Alter zu tun haben:
  • Keine Objektorientierung. Und damit meine ich nicht nur die generellen Vorteile von OOP, wie oft wurde hier im Forum schon ein Befehl der AssignFile-Rewrite-CloseFile-Triade vergessen? Mit Streams kann das nicht passieren, die werden wie jedes andere Objekt erzeugt und zerstört.
  • Pseudo-Exception-Handling durch eine einzige Exception-Klasse mit Error-Codes. Streams bieten verschiedene Exception-Klassen mit einem gemeinsamen Vorfahren, wie es sich eben nach OOP gehört.
Und kürzer ist der File-Code ebenfalls nicht ;) (dominikkvs Code mit Streams: 13 LOC statt 14).


Alle Zeitangaben in WEZ +1. Es ist jetzt 09:23 Uhr.

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