Dateiname soll mit jedem Speichervorgang "hochzählen"

Schnelle objektorientierte, kompilierende Programmiersprache.
Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

Dateiname soll mit jedem Speichervorgang "hochzählen"

Beitrag von Orioner » Mo Dez 10, 2012 12:21 pm

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.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8861
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

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

Beitrag von Xin » Mo Dez 10, 2012 1:07 pm

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!?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

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

Beitrag von cloidnerux » Mo Dez 10, 2012 1:19 pm

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

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

Beitrag von nufan » Mo Dez 10, 2012 1:28 pm

Ich würde dir Perl empfehlen. Dort hast du bereits integrierten Syntax für Globbing und Regular Expressions. Dateiverarbeitung ist auch relativ einfach.

Benutzeravatar
Xin
nur zu Besuch hier
Beiträge: 8861
Registriert: Fr Jul 04, 2008 11:10 pm
Wohnort: /home/xin
Kontaktdaten:

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

Beitrag von Xin » Mo Dez 10, 2012 1:44 pm

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....?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.

Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.

nufan
Wiki-Moderator
Beiträge: 2558
Registriert: Sa Jul 05, 2008 3:21 pm

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

Beitrag von nufan » Mo Dez 10, 2012 1:50 pm

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 ^^

Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

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

Beitrag von Orioner » Do Dez 13, 2012 9:34 am

Wie lautet die Zeitstempelfunktion von C++?

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

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

Beitrag von cloidnerux » Do Dez 13, 2012 9:37 am

Redundanz macht wiederholen unnötig.
quod erat expectandum

Orioner
Beiträge: 102
Registriert: Mo Dez 10, 2012 10:52 am

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

Beitrag von Orioner » Do Dez 13, 2012 9:51 am

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?

Benutzeravatar
cloidnerux
Moderator
Beiträge: 3123
Registriert: Fr Sep 26, 2008 4:37 pm
Wohnort: Ram (Gibts wirklich)

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

Beitrag von cloidnerux » Do Dez 13, 2012 11:02 am

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.
Redundanz macht wiederholen unnötig.
quod erat expectandum

Antworten