Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Dateinamenerweiterung wenn Datei vorhande (https://www.delphipraxis.net/136746-dateinamenerweiterung-wenn-datei-vorhande.html)

DelphiManiac 7. Jul 2009 10:39


Dateinamenerweiterung wenn Datei vorhande
 
Hallo,

ich habe folgendes Problem.

Mein Programm legt Prüfzeugnisse ab mit dem Namen der Seriennummer.

Beispiel:

11-22-33-44.pdf

Jetzt kommte es vor, dass ein Gerät zweimal geprüft werden muss (Reparatur) dann ist diese Datei schonvorhanden und würde im schlechtesten Fall überschrieben werden.

Das will ich umgehen, in dem ich wenn die Datei vorhanden ist eine Dateinamenerweiterung hinten dran hänge..

Beispiel:
11-22-33-44.pdf schon vorhanden
11-22-33-44_1.pdf nicht vorhanden also abspeichern..

Beispiel:
11-22-33-44.pdf schon vorhanden
11-22-33-44_1.pdf schon vorhanden
11-22-33-44_2.pdf nicht vorhanden also abspeichern..


Wie kann ich soetwas am besten (in einer Schleife) abbilden?

Gut über FileExist bekomme ich heraus ob die Datei vorhanden ist, aber wie gehe ich dann weiter vor...

Vielleicht denke ich an der Stelle auch zu kompliziert :-)

Hoffe ihr könnt mich ein wenig inspirieren

Danke
Gruß
DelphiManiac

Luckie 7. Jul 2009 10:44

Re: Dateinamenerweiterung wenn Datei vorhande
 
Na, wie würdest du es denn von Hand machen? Du siehst im Speichern-Unter-Dialog, dass die Datei schon vorhanden ist. Dann guckst du, ob am Ende ein Unterstrich von einer Zahl gefolgt wird. Gibt es keinen Unterstrich, dann tippst du den Dateinamen ein und ergänzt ihn um einen Unterstrich und einer eins. Gibt es schon einen Unterstrich, guckst du dir die darauffolgende Zahl an und erhöhst sie um eins.

messie 7. Jul 2009 10:50

Re: Dateinamenerweiterung wenn Datei vorhande
 
Zitat:

Zitat von Luckie
Na, wie würdest du es denn von Hand machen? Du siehst im Speichern-Unter-Dialog, dass die Datei schon vorhanden ist. Dann guckst du, ob am Ende ein Unterstrich von einer Zahl gefolgt wird. Gibt es keinen Unterstrich, dann tippst du den Dateinamen ein und ergänzt ihn um einen Unterstrich und einer eins. Gibt es schon einen Unterstrich, guckst du dir die darauffolgende Zahl an und erhöhst sie um eins.

Nee, da will er nix mit Dialog machen. Prüfberichte, wo der user selbst was einstellen kann gehen gar nicht.

Ich würde das Programm so umstellen, dass schon der erste Bericht einen Index _0 bekommt. Das vereinfacht die Sache, wenn Du nur von hinten nach dem ersten Underscore suchen musst.

Grüße, Messie

DelphiManiac 7. Jul 2009 10:57

Re: Dateinamenerweiterung wenn Datei vorhande
 
Hallo,

danke erstmal für eure Antworten.

Ja ich will tatsächlich nicht mit "Speichern unter"-Dialog arbeiten...

Das System erzeugt den Dateinamen und ich will dann meine Überprüfungen / Erweiterungen machen.
Leider kommt ein _0 Erweiterungen auch nicht infrage, da es schon hunderte alter Protokolle gibt ohne _0.

Die Vorgehensweise ist mir klar, könntet ihr mir bei den Mehtoden / Funktionen helfen?

Delphi-Quellcode:
var
  dateiname:string;
begin
dateiname := '11-22-33.pdf';
if FileExist(dateiname) then
begin
// Datei existiert schon aber ohne underscore, wie kann ich das jetzt rausfinden
// ich könnte POS(x,y) nehmen und gucken ob _1 schon im Text vorhanden ist, aber wie der Teufel will,
// existieren vielleicht auch so Dateien "11-22_1-11-22.pdf", also müsste ich prüfen ob die letzen 2 Zeichen
// ein underscore und eine Zahl sind. Gut über length könnte ich ja schoneinmal die Länge abgreifen und dann
// Length -1 müsste dann eine Zahl und Length -2 dann ein underscore sein
// Wie würdet ihr das machen?
...
end;

Luckie 7. Jul 2009 10:57

Re: Dateinamenerweiterung wenn Datei vorhande
 
Zitat:

Zitat von messie
Nee, da will er nix mit Dialog machen. Prüfberichte, wo der user selbst was einstellen kann gehen gar nicht.

Du hast nicht verstanden, was ich geschrieben habe. Mir ist klar, dass das automtisch vom programm erledigt werden soll. Und ich habe ihm den nötigen Algorithmus gegeben, in dem ich ihm vor Augen geführt habe, wie er es selber machen würde, wenn er die Datei von Hand abspeichern würde.

Frankfurtoder 7. Jul 2009 11:01

Re: Dateinamenerweiterung wenn Datei vorhande
 
Du hast doch immer den String, der als Dateiname fungieren soll. Nun prüfst du mit FileExists ob die datei vorhanden ist. Wenn nicht, speichern, wenn doch dann prüfst du ob Dateiname + _i vorhaneden ist. Wobei i dann in der Schleife incrementiert wird. So lange bis ein freier Dateiname zur verfügung steht.

Luckie 7. Jul 2009 11:04

Re: Dateinamenerweiterung wenn Datei vorhande
 
Zitat:

Zitat von DelphiManiac
Die Vorgehensweise ist mir klar

Und wo ist jetzt das Problem, wenn die Vorgehensweise klar ist? Du kannst dir auch noch mal ein Flussdiagrammzeichnen, wenn dir das hilft.

DelphiManiac 7. Jul 2009 11:14

Re: Dateinamenerweiterung wenn Datei vorhande
 
Hi,

ich habe es jetzt folgendermaßen gelöst:
Delphi-Quellcode:
   
PfadzurSeriennummer:=IncludeTrailingPathDelimiter(ProgrammIni.ArtikelNrPfad_Rev_2+  txtArtikelnr.Text+'\'+ProgrammIni.ProtokollOrdner ) +PPSSystem.DeviceData.Seriennummer+'.MPD';
i:=1;
while (FileExists(PfadzurSeriennummer)) do
begin
PfadzurSeriennummer:=IncludeTrailingPathDelimiter(ProgrammIni.ArtikelNrPfad_Rev_2+                                                                           txtArtikelnr.Text+'\'+ProgrammIni.ProtokollOrdner )+ PPSSystem.DeviceData.Seriennummer+'_'+IntToStr(I)+'.PDF';
inc(I);
end;
Es ging mir hauptsächlich um die Stringoperationen, aber im Prinzip brauche ich die gar nicht, wenn ich es so mache wie oben.

Danke nochmal, ich denke so ist es sauber umgesetzt.

Gruß
DM


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