![]() |
Datein durchnummeriert speichern
Hi Leute, hoffe ich bin hier jetzt richtig gelandet :)
Bin dabei eine kleine Auswertung zu Programmieren und will nun eingegebene Daten in txt's speichern! Für jeden Datensatz (Name, Vorname, Verein etc) soll eine extra txt erstellt werden! Und die sollen durchnummeriert sein (von 1 bis x)! Komme nur nicht auf den passenden ansatz!
Code:
procedure TForm2.btnHinzuClick(Sender: TObject);
var List:TStrings; begin Teilnehmer.Name:=edtName.Text; Teilnehmer.Vorname:=edtVorname.Text; Teilnehmer.Verein:=edtVerein.Text; Teilnehmer.Ort:=edtOrt.Text; Teilnehmer.BK:=edtBK.Text; List:=TStringList.create; try List.Add(Teilnehmer.Name); List.Add(Teilnehmer.Vorname); List.Add(Teilnehmer.Verein); List.Add(Teilnehmer.Ort); List.Add(Teilnehmer.BK); if not DirectoryExists('C:/Turnierauswertung/Schuetzen/') then ForceDirectories('C:/Turnierauswertung/Schuetzen/'); List.SaveToFile('C:/Turnierauswertung/Schuetzen/'+ {hier fehlt was!} +'.txt') ; finally List.Free; end; end; |
AW: Datein durchnummeriert speichern
Hallo,
ich hatte mal die gleiche Anforderung. Ich hab´s so gelöst, dass ich prüfe, ob der Dateiname (inkl. der Nummerierung) vorhanden ist. Ist der Dateiname vorhanden, zähl ich hoch und prüf wieder, bis der Dateiname nicht mehr vorhanden ist. Das ist dann der nächst freie Dateiname. Hier mal mein Code:
Delphi-Quellcode:
Hat nur einen Schönheitsfehler. Löscht man eine Datei mit kleiner Nummer, so
function SicherungName(Pfad, DateiName, Endung: String): String;
var i: Integer; begin //Variablen vordefinieren Result := ''; i := 1; //Pfad mit einem Backslash enden lassen Pfad := IncludeTrailingPathDelimiter(Pfad); while true do begin //Dateinamen zusammenstellen Result := Pfad + Format('%s%.3d.%s', [DateiName, i, Endung]); //wenn Datei nicht vorhanden, dann Schleife beenden If not FileExists(Result) then break; inc(i); end; end; wird automatisch aufgefüllt. Z. B. es gibt Test01, Test02 und Test03 und man löscht Test02, so wird beim nächsten Speichern in Test02 und dann wieder ab Test04 gespeichert. |
AW: Datein durchnummeriert speichern
Zitat:
aber dann löscht jemand mal 11 Dateien und man hat wieder das Problem. (Meist) Unnötig viele Dateien zu Prüfen ist aber auch bissl blöd. Man könnte aber auch eine Vergleichsmaske generieren, dann geht man durch das Verzeichnis und sucht alle Dateien, welcher dieser Maske entsprechen. Nun initialisiert man seinen Startwert, für die Zählung und geht dann diese Dateinamen durch, extrahiert aus dem Namen die Nummer und schaut, ob sie größer oder gleich der eigenen Nummer ist, wenn ja, dann erhöht man seine Nummer (aktuell=ausgelesen+1) und geht die Namen weiter durch. Am ende hat man dann immer die höchste Nummer. OK, wenn jemand die letzte Nummer löscht, dann würde diese Nummer "doppelt" vorkommen. In diesem Fall muß man praktisch irgendwo anders die zuletzt verwendete Nummer speichern und verwendet dann immer Diese, so wie bei den Indexfeldern (Serial) in den Tabellen einer Datenbank. |
AW: Datein durchnummeriert speichern
Ich hab meine Methode mal für eine Screenshot-Software benötigt, die die erzeugten Bilder automatisch speichert.
So hat automatisch jedes Bild einen eigenen Dateinamen, der auch noch durchnummeriert ist. Deswegen hab ich keinen Wert darauf gelegt, dass es immer aufwärts gezählt sondern einfach ein freier Dateiname genutzt wird. |
AW: Datein durchnummeriert speichern
Und wenn man statt einer Nummerierung einen Dateinamen aus Datum und Uhrzeit wählt? Im Bezug auf Sortierung etc. wäre das genauso einfach zu handhaben.
|
AW: Datein durchnummeriert speichern
Vorschlag:
Lies das Verzeichnis nach Dateien nach Deinem Muster (z.B. Personxxxxx.txt) durch. Suche den höchsten xxxxx-Wert und beginne dann mit xxxxx+1. Die Zeile hieße dann:
Delphi-Quellcode:
var
lfd: Integer; ... {bestimme lfd} ... List.SaveToFile(Format('C:/Turnierauswertung/Schuetzen/Person%.05d.txt', [lfd])) ; |
AW: Datein durchnummeriert speichern
Bist Du denn gezwungen die Daten so abzulegen? Wenn nicht, würde ich das eventuell nochmal überdenken.
Vielleicht hilft es, wenn Du Deine eigentlichen Anwendungsfall etwas näher beschreibst ;-) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:54 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 by Thomas Breitkreuz