Delphi-PRAXiS

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:

turboPASCAL 3. Mär 2006 11:01

Re: Dateien nummeriert speichern?
 
Noch mal Senf dazu... ;)

Zitat:

das IMMER solltest'e lieber klein schreiben ... klar nennen viele ihre Schleifen
So ist das, ich habe eine Vorliebe auch i im zusammenhang mit Bytes zu verwenden. Warum ist das so beliebt, so ein olles i bei vielen Schleifen zu verwenden ? :gruebel: ;)

himitsu 3. Mär 2006 11:41

Re: Dateien nummeriert speichern?
 
Solche vorlieben überkommen mich och manchmal ... Rückfälle halt ... am geilsten kommen solche Schleifenvariablen wie i, j, k ... das j geht da beim Lesen irgendwie immer unter -.-''


Weiß auch nicht ... in meinen ersten Programmen gab's oft die Variablen a, b, c...
und jetzt nehm ich meistens auch den Anfangsbuchstaben des dahinterliegenden Datentyps (Integer = i, i2... / Byte = b, b2 ...).

Es sei denn ich gebe der Variable 'ne Bezeichnung nach ihrer Funktion, was für globale Variablen eh besser ist, also für alles was Programm-/Unit-/Funktionsweit verwendet wird, aber für so Kleinigkeiten überlege ich mir nicht erst 'nen Namen ... wie sähe das denn aus :?:

Delphi-Quellcode:
Var Schleifchenvariable_1: Integer;

For Schleifchenvariable_1 := irgendwas to wasanderes do
  ...

DGL-luke 3. Mär 2006 12:14

Re: Dateien nummeriert speichern?
 
na, ist doch ganz klar... i wie Iteration...

EDIT: das j las ich da immer aus....

Delphi-Quellcode:
for i := 0 to x do
  for k := 0 to x do
    for l := 0 to x do
      begin
      end;
;)

Jelly 3. Mär 2006 13:10

Re: Dateien nummeriert speichern?
 
Zitat:

Zitat von DGL-luke
EDIT: das j las ich da immer aus....

Und ich das l weils im Editor aussieht wie ne 1. :lol:
Delphi-Quellcode:
l=1
Ich denke mal, jedesmal das ganze Verzeichnis zu durchforsten, um einen freien Dateinamen zu finden ist nicht gerade effektiv, je nachdem wieviele Dateien im Verzeichnis liegen.

Ne Möglichkeit die ich für eine firmeninternes Filearchiv nutze ist Folgende:

die Dateinamen erhalten bei mit alle eine eindeutige GUID, z.B: {FD1094C0-082D-429E-B7EE-6964BC4300A8}.zip

In einer simplen Datenbanktabelle verwalte ich dann die Dateinamen, und lasse dort über ein Autoinc Feld die ID setzen. Dazu kann man dann noch ganz nette andere Kommentare in der Tabelle aufnehmen, und man hat eine wirklich schnelle und einfache Suchfunktion zur Verfügung... Und wenn es wirklich viele Dateien werden die verwaltet werden sollen, bietet es sich noch an, die Dateien selbst in unterschiedlichen Verzeichnissen abzulegen, was dann auch eventuelle Backups erleichtert. Bei uns liegen z.B. die Dateien im Unterverzeichnis 2003\03 für den Monat März.

SirThornberry 3. Mär 2006 13:26

Re: Dateien nummeriert speichern?
 
Das ganze wird etwas OT, ich möchte euch bitten zum Thema zurück zu kehren und gegebenfalls für eure Variablenbenennungsfrage einen eigenen Thread zu eröffnen.


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