Seite 1 von 2

Dateiname soll mit jedem Speichervorgang "hochzählen"

Verfasst: Mo Dez 10, 2012 12:21 pm
von Orioner
Hallo liebe Community,
ohne die Forums-Suche bemüht zu haben möchte ich hier eine Frage stellen, da ich annehme, dass diese Frage noch von keinem hier oder in einem anderen Forum gestellt wurde.

Ich möchte ein Programm schreiben, dass nach einer Berechnung einen Wert in eine Datei schreibt. Das Programm soll dies bei jedem Aufruf, d. h. bei jeder Berechnung, tun. Dabei soll bei jedem Schreibvorgang eine neue Datei angelegt werden mit einem Dateinamen, dessen erster Teil fix, und der zweite variabel ist.

Der fixe Teil soll z. B. "log_" lauten (natürlich ohne Anführungszeichen). Der variable Teil soll eine Zahl sein, die, beginnend mit 001, mit jedem Speichervorgang hochgezählt wird (bis max. 999). Danach soll das Programm keine Daten mehr speichern, sondern eine Fehlermeldung ausgeben (in der Richtung "Löschen Sie erst Dateien!").

Das Programm soll aus der Liste der Dateien in seinem Verzeichnis nachschauen, welches die niedrigste noch nicht vergebene Zahl ist und diese dann an den fixen Teil des Dateinamens der Datei, in der das Ergebnis der aktuellen Berechung gespeichert werden soll, anhängen.

Nun zur eigentlichen Frage:
Wie würdet ihr ein solches Programm implementieren, angefangen von der zu verwendenden Programmiersprache bis hin zur Syntax? Welche Stolpersteine gibt es?

Speziell würde mich interessieren, ob ich für die Umsetzung des oben genannten Verfahrens für jede einzelne, bereits existierende Datei die Ziffernfolge im Dateinamen "extrahieren" und mit den Ziffernfolgen von 001 bis max. 999 vergleichen muss, bis ich eine Ziffernfolge finde, die es noch nicht in einem der Dateinamen gibt? Wenn ja, wie führe ich den Vergleich durch, bzw. wie bringe ich eine Zählvariable dazu, von 1 bis 999 zu zählen, dabei aber im zwei- und einstelligen Bereich führende Nullen zu aufzuweisen (die ja für den Vergleich von Wichtigkeit sind, da die Zahlen in den Dateinamen ebenfalls führende Nullen aufweisen)?

Ich freue mich über jede Anregung, Bemerkung oder Kommentar.

Re: Dateiname soll mit jedem Speichervorgang "hochzählen"

Verfasst: Mo Dez 10, 2012 1:07 pm
von Xin
Orioner hat geschrieben:Nun zur eigentlichen Frage:
Wie würdet ihr ein solches Programm implementieren, angefangen von der zu verwendenden Programmiersprache bis hin zur Syntax? Welche Stolpersteine gibt es?
Stolpersteine sehe ich da eher keine...!?
Die Frage ist eher, wo kommen die Daten her?
Orioner hat geschrieben: Speziell würde mich interessieren, ob ich für die Umsetzung des oben genannten Verfahrens für jede einzelne, bereits existierende Datei die Ziffernfolge im Dateinamen "extrahieren" und mit den Ziffernfolgen von 001 bis max. 999 vergleichen muss, bis ich eine Ziffernfolge finde, die es noch nicht in einem der Dateinamen gibt? Wenn ja, wie führe ich den Vergleich durch, bzw. wie bringe ich eine Zählvariable dazu, von 1 bis 999 zu zählen, dabei aber im zwei- und einstelligen Bereich führende Nullen zu aufzuweisen (die ja für den Vergleich von Wichtigkeit sind, da die Zahlen in den Dateinamen ebenfalls führende Nullen aufweisen)?
Schau Dir mal die Funktion sprintf an, wenn Du dich für C oder C++ entscheidest, sie formatiert das automatisch für Dich.

Sollen einfach nur 1000 Dateien entstehen? Dürfen vorhandene Dateien überschrieben werden, wenn ja würde ich einfach nur von 1 bis 999 hochzählen und Dateien beschreiben.
Falls nicht, wäre ein Zeitstempel im Dateinamen wohl sinnvoller, da ansonsten alte Dateien mit neuen Daten vermischt werden!?

Re: Dateiname soll mit jedem Speichervorgang "hochzählen"

Verfasst: Mo Dez 10, 2012 1:19 pm
von cloidnerux
Das Problem erscheint mir recht simpel.
Du nutzt eine Hochsprache wie C/C++, kannst auch Java oder C# nutzen.
Du holst dir die Liste aller Dateien im Zielverzeichnis, schaust wie viele davon mit deinem Fixen Namen beginnen und welche davon die höchste Zahl besitzt.
Dann kannst du deine neuen Dateien speichern.

Re: Dateiname soll mit jedem Speichervorgang "hochzählen"

Verfasst: Mo Dez 10, 2012 1:28 pm
von nufan
Ich würde dir Perl empfehlen. Dort hast du bereits integrierten Syntax für Globbing und Regular Expressions. Dateiverarbeitung ist auch relativ einfach.

Re: Dateiname soll mit jedem Speichervorgang "hochzählen"

Verfasst: Mo Dez 10, 2012 1:44 pm
von Xin
dani93 hat geschrieben:Ich würde dir Perl empfehlen. Dort hast du bereits integrierten Syntax für Globbing und Regular Expressions. Dateiverarbeitung ist auch relativ einfach.
Nur Perl ist nicht einfach....?

Re: Dateiname soll mit jedem Speichervorgang "hochzählen"

Verfasst: Mo Dez 10, 2012 1:50 pm
von nufan
Xin hat geschrieben:
dani93 hat geschrieben:Ich würde dir Perl empfehlen. Dort hast du bereits integrierten Syntax für Globbing und Regular Expressions. Dateiverarbeitung ist auch relativ einfach.
Nur Perl ist nicht einfach....?
Also ich finde es nicht sooo schwer ^^

Re: Dateiname soll mit jedem Speichervorgang "hochzählen"

Verfasst: Do Dez 13, 2012 9:34 am
von Orioner
Wie lautet die Zeitstempelfunktion von C++?

Re: Dateiname soll mit jedem Speichervorgang "hochzählen"

Verfasst: Do Dez 13, 2012 9:37 am
von cloidnerux

Re: Dateiname soll mit jedem Speichervorgang "hochzählen"

Verfasst: Do Dez 13, 2012 9:51 am
von Orioner
cloidnerux hat geschrieben:time
http://www.cplusplus.com/reference/ctime/time/
Muss ich da dann nicht das Datum und die Zeit aus der seit dem 01.01.1970 vergangenen Sekunden von meinem Programm berechnen lassen?

Re: Dateiname soll mit jedem Speichervorgang "hochzählen"

Verfasst: Do Dez 13, 2012 11:02 am
von cloidnerux
Muss ich da dann nicht das Datum und die Zeit aus der seit dem 01.01.1970 vergangenen Sekunden von meinem Programm berechnen lassen?
Jop.
Gibt glaube ich auch andere Funktionen, du kannst dich auch direkt an deine Betriebssystem API wenden. Aber das ist ein einfacher und auch universeller weg.