Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Programmieren allgemein (https://www.delphipraxis.net/40-programmieren-allgemein/)
-   -   Dateien nummeriert speichern? (https://www.delphipraxis.net/59756-dateien-nummeriert-speichern.html)

mlspider 28. Dez 2005 10:36


Dateien nummeriert speichern?
 
Moin,

Das Speichern einer Datei mit oder ohne Save Dialog ist eigentlich kein Thema. Nun stehe ich aber vor dem Problem, Dateien mit fortlaufender Nummer (zb. Daten01.txt, Daten02.txt usw.) zu speichern. Vorher sollte aber die letzte laufende Nummer geeprüft werden, um logischer Weise um eine Stelle zu erhöhen.

Wie könnte man vorgehen?

Danke.

heiopei 28. Dez 2005 10:53

Re: Dateien nummeriert speichern?
 
hallo, hab da mal für ne firmensoftware das gleiche problem gehabt.
ich hab das ganze in eine schleife gepackt, etwa so:

Delphi-Quellcode:

begin
  result := 1;
  while fileexists('datei' + IntToStr(result) + '.txt') do
  Inc(result);
end;
die funktion gibt also aus, welche datei mit index i noch nicht existiert - allerdings wird hierbei statt 01, 02, also alle zahlen < 10 nur 1, 2... erkannt!


mfg,
heiopei


//edit: sorry i und result vermischt ;-)

mlspider 28. Dez 2005 11:00

Re: Dateien nummeriert speichern?
 
Eigentlich ist es völlig egal, ob es mit einer 0 angeführt wird, oder nicht.

himitsu 28. Dez 2005 11:06

Re: Dateien nummeriert speichern?
 
Statt IntToStr kann man ja auch mal Format verwenden, da läßt sich dann auch 01, 02... realisieren.


Oder für 00 bis 99, kann man auch selber was zusammenstellen:
Delphi-Quellcode:
'datei' + IntToStr(i div 10) + IntToStr(i mod 10) + '.txt'
und Efektiver geht's so (is sogar "besser" als Format)
Delphi-Quellcode:
'datei' + Chr(i div 10 + 48) + Chr(i mod 10 + 48) + '.txt'

[add]
Na wenn's egal ist, dann halt nur IntToStr(i), wie bereits gesagt -.-''

mlspider 28. Dez 2005 11:09

Re: Dateien nummeriert speichern?
 
Alles klar. Danke.

marabu 28. Dez 2005 11:51

Re: Dateien nummeriert speichern?
 
Hallo Mario,

einen Ansatz hätte ich noch:

Delphi-Quellcode:
// uses QFileCtrls;
function CountFiles(filespec: string): integer;
var
  d: TDirectory;
begin
  d := TDirectory.Create(nil);
  d.BeginUpdate;
  d.FileMask := ExtractFileName(fileSpec);
  d.Location := ExtractFilePath(fileSpec);
  d.FileType := [ftArchive];
  d.EndUpdate;
  Result := d.Count;
  d.Free;
end;
Wenn die Dateien fortlaufend und lückenlos nummeriert sind, dann liefert dir CountFiles('Daten*.txt') die letzte vergebene Dateinummer im Arbeitsverzeichnis.

Grüße vom marabu

zebrafalke 2. Mär 2006 19:17

Re: Dateien nummeriert speichern?
 
Zitat:

'datei' + IntToStr(i div 10) + IntToStr(i mod 10) + '.txt'
Bei mir sagt er "Undefinierter Bezeichner 'i'

ich muss i also erst noch als was definieren, aber als was? :gruebel:


zebrafalke

turboPASCAL 2. Mär 2006 19:27

Re: Dateien nummeriert speichern?
 
Klar musst du i erst noch definieren.

Als was ? Integer oder Word wäre angebracht.

Delphi-Quellcode:
var i: Integer;

ichbins 2. Mär 2006 19:29

Re: Dateien nummeriert speichern?
 
i ist IMMER eine Integer-Variable, zumindest nennt jeder seine Integervariablen i. Wenn die Variable dann auch noch in einer for-Schleife vorkommt gibt es ja gar keine andere Möglichkeit mehr als dass i eine Integervariable ist.

himitsu 3. Mär 2006 10:07

Re: Dateien nummeriert speichern?
 
Zitat:

Zitat von ichbins
i ist IMMER eine Integer-Variable, zumindest nennt jeder seine Integervariablen i. Wenn die Variable dann auch noch in einer for-Schleife vorkommt gibt es ja gar keine andere Möglichkeit mehr als dass i eine Integervariable ist.

Der "beste" Datentyp für sowas wird wohl der Integer sein, denn er ist ja direkt auf die CPU / das Betriebssystem zugeschnitten ... und in einem 32-Bit-Betriebssystem und auf 'ner 32-Bit-CP wird es wohl ein LongInt sein ... und in den aktuellen Delphi-Versionen ist zufällt der Integer als LongInt definiert ^_^

PS: das IMMER solltest'e lieber klein schreiben ... klar nennen viele ihre Schleifen-, oder sonstigen variablen i, i2, i3, oder wie auch immer, dennoch MUß es nicht ein Integer sein ;)
Und in 'ner For-Schleife kannst du auch andere ordinale Datentypen verwenden :zwinker:


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:24 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