AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Dateinamenerweiterung wenn Datei vorhande
Thema durchsuchen
Ansicht
Themen-Optionen

Dateinamenerweiterung wenn Datei vorhande

Ein Thema von DelphiManiac · begonnen am 7. Jul 2009 · letzter Beitrag vom 7. Jul 2009
Antwort Antwort
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#1

Dateinamenerweiterung wenn Datei vorhande

  Alt 7. Jul 2009, 11:39
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
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

Re: Dateinamenerweiterung wenn Datei vorhande

  Alt 7. Jul 2009, 11:44
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
messie

Registriert seit: 2. Mär 2005
Ort: Göttingen
1.592 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Dateinamenerweiterung wenn Datei vorhande

  Alt 7. Jul 2009, 11:50
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
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#4

Re: Dateinamenerweiterung wenn Datei vorhande

  Alt 7. Jul 2009, 11:57
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;
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#5

Re: Dateinamenerweiterung wenn Datei vorhande

  Alt 7. Jul 2009, 11:57
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Frankfurtoder

Registriert seit: 27. Mär 2008
112 Beiträge
 
RAD-Studio 2010 Pro
 
#6

Re: Dateinamenerweiterung wenn Datei vorhande

  Alt 7. Jul 2009, 12:01
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.
Erik
Alles gut?
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

Re: Dateinamenerweiterung wenn Datei vorhande

  Alt 7. Jul 2009, 12:04
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.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
DelphiManiac

Registriert seit: 5. Dez 2005
742 Beiträge
 
#8

Re: Dateinamenerweiterung wenn Datei vorhande

  Alt 7. Jul 2009, 12:14
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 18:06 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