Übernahme Dateityp aus SaveFileRequester

Anfängerfragen zum Programmieren mit PureBasic.
Peter aus der Nordheide
Beiträge: 34
Registriert: 18.05.2005 14:59

Übernahme Dateityp aus SaveFileRequester

Beitrag von Peter aus der Nordheide »

Hallo zusammen,

im SaveFileRequester werden ja die Änderungen im Dateinamen übernommen und zurückgegeben.

Nun möchte ich auch gern den Dateityp vom Anwender mittels der im Requester vorhandenen ComboBox auswählen lassen.

Nur er übernimmt es nicht.

Wird dagegen in der anderen ComboBox am Dateinamen etwas geändert,
übernimmt er es, allerdings ist dann die Erweiterung .txt verlustig und es tritt der Fall 4 "ohne" ein.

Code: Alles auswählen

CreateDirectory("C:\Test File Requester\")
StandardFile$="C:\Test File Requester\" 

Pattern$ = "Text (*.txt)|*.txt|Text (*.dat)|*.dat|CSV (*.csv)|*.csv|Alle Dateien (*.*)|*.*"    
File$ = SaveFileRequester("Bitte Datei zum Speichern auswählen", StandardFile$ + "Dateitest" +".txt", Pattern$, 2)   

If File$
   
      Select GetExtensionPart(File$) 
        Case "txt" 
          Debug " Fall 1 : " + GetExtensionPart(File$)
        Case "dat" 
          Debug " Fall 2 : " + GetExtensionPart(File$)
        Case "csv" 
          Debug " Fall 3 : " + GetExtensionPart(File$)
        Case "" 
          Debug " Fall 4 : ohne" + GetExtensionPart(File$)

      EndSelect 

   OpenFile(0,File$) 

      WriteStringN("Testtext")

   CloseFile(0)

EndIf

While EventID = #PB_Event_CloseWindow

Wend

End
Die Frage also :

Gibt es eine Abfrage um den Dateityp aus dem Requester auszulesen, um dann so etwas oder ähnliches zu machen :

File$ = File$ + "Dateityp$"

Noch schöner wäre es natürlich, wenn es automatisch ginge.
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Code: Alles auswählen

File$ = Left(File$, Len(File$) - Len(GetExtensionPart(File$))) +  "txt"
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

selectedfilepattern() :allright:
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Peter aus der Nordheide
Beiträge: 34
Registriert: 18.05.2005 14:59

Beitrag von Peter aus der Nordheide »

Hallo Batze, hallo Thomas,

ja, so geht es. Dank Eurer Hilfe habe ich das jetzt so gelöst :

Code: Alles auswählen

Procedure DateiInitialisierung()
;
;
   CreateDirectory(Pfad$) 

   File$ = SaveFileRequester("Bitte Datei zum Speichern auswählen", StandardFile$ + Dateitext01$, Pattern$, 0)    

   If File$ 
    
      Select SelectedFilePattern() 
      
      
        Case 0 
              
            File$ = Left(File$, Len(File$)- Len(GetExtensionPart(File$))) +  ".txt"  
              
        Case 1
            
            File$ = Left(File$, Len(File$) - Len(GetExtensionPart(File$))) +  ".dat"                
         
        Case 2 

            File$ = Left(File$, Len(File$) - Len(GetExtensionPart(File$))) +  ".csv"  

        Case 3 
            
            File$ = Left(File$, Len(File$) - Len(GetExtensionPart(File$))) +  ""  

      EndSelect 

      OpenFile(0,File$)
    
   EndIf

EndProcedure
Es wird also auf jeden Fall der ausgewählte Dateityp erzeugt.

Bei nicht konformen Eingaben beim Dateinamen gibt es aber noch Schwierigkeiten.
Wird zum Beispiel : Testdatei.txt eingegeben, wird das als Erweiterung erkannt, und um die Erweiterung gekürzt, um dann anschließend die gewählte Erweiterung anzuhängen.
Leider bleibt dann der Punkt vom Dateinamen erhalten und es erscheint Testdatei..txt
Noch schlimmer wird es, wenn im echten Dateinamen Punkte enthalten sind : Programm Version. 6.2.00.exe
Dabei wird alles nach dem ersten Punkt als Erweiterung angesehen und abgeschnitten, der Punkt bleibt wieder erhalten und es wird Programm Version..exe erzeugt.

Aber das bekomme ich mit mehr oder weniger umständlichen Abfragen und Fallunterscheidungen in den Griff.

Also nochmal Euch Beiden meinen herzlichen Dank.

Gruß Peter
Benutzeravatar
Batze
Beiträge: 1492
Registriert: 03.06.2005 21:58
Wohnort: Berlin
Kontaktdaten:

Beitrag von Batze »

Mach gleich ne Prozedur und poste die dann :allright:
SaveFileRequester2() oder so
Hier sind meine Codes (aber die Seite geht gerade nicht):
http://www.basicpure.de.vu
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

>> File$ = Left(File$, Len(File$)- Len(GetExtensionPart(File$))) + ".txt"
Ich weiß ja nicht was Du vorhast, aber nach meinen dafürhalten ist der Punkt zuviel :? Solltest also noch prüfen ob am ende bereits ein Punkt vorhanden ist!!
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Peter aus der Nordheide
Beiträge: 34
Registriert: 18.05.2005 14:59

Beitrag von Peter aus der Nordheide »

ts-soft hat geschrieben:>> File$ = Left(File$, Len(File$)- Len(GetExtensionPart(File$))) + ".txt"
Ich weiß ja nicht was Du vorhast, aber nach meinen dafürhalten ist der Punkt zuviel :? Solltest also noch prüfen ob am ende bereits ein Punkt vorhanden ist!!
Hallo Thomas,
in meinem ersten Posting hatte ich ja beim Aufruf des SaveFileRequesters im Dateinamen + ".txt" mit drin.
In Deiner Antwort hattest Du dann auch folgerichtig + "txt" angegeben.
Wird vom Anwender "nur" der Dateityp ausgewählt, läuft alles bestens, die alte Erweiterung "txt" wird abgeschnitten und durch die neu ausgewählte z.B. "csv" ersetzt.
Klasse, aaaaber :
Wird vom Anwender am Dateinamen eine Änderung vorgenommen, wird die nicht sichtbare (vorgegebene) Erweiterung einschließlich Punkt überschrieben und anschließend "nur" eine Erweiterung gemäß Auswahl angefügt, ohne Punkt, die damit also nicht als Erweiterung erkannt wird.

Um diesem Schlamassel zu entgehen, habe ich jetzt die Dateinamenvorgabe ohne Erweiterung reingeschrieben und dafür in Deinem Befehl das ".txt" eingeschrieben.
So erhalte ich auf jeden Fall eine korrekte Erweiterung.
Klasse, aaaaber :
Wird jetzt von einem "neunmalschlauen" Anwender beim Ändern des Dateinamen ein ".txt" mit eingegeben. passiert das mit dem doppelten Punkt.
Und das meinte ich jetzt mit der etwas umständlichen Fallunterscheidung.
Wahrscheinlich so etwas wie die Abtrennung der Erweiterung und inhaltliche Untersuchung / Fallunterscheidung.

Ich glaube, das mit der Eingabe des vollständigen Dateinamen einschließlich der Erweiterung ist wohl vor Hundert Jahren mal akut gewesen. Wer kennt das heute noch ?

Ich glaube, ich werde einfach über meinen pingeligen Schatten springen, und so tun, als ob dieser Fall nicht vorkommt.

Dabei fällt mir gerade ein, ich muß noch einmal überprüfen, ob denn der zweite Punkt intern schon zur Erweiterung gezählt wird.
Dann müßte ja eine "..txt" nicht automatisch mit dem Editor geöffnet werden ?!

Habe das gerade zwischendurch geprüft. Der zweite oder auch weitere Punkte werden dem Dateinamen zugeschlagen und die angefügte Erweiterung richtig erkannt.
Abgeschnitten wird alles nach dem letzten Punkt.

Gruß Peter
Benutzeravatar
ts-soft
Beiträge: 22292
Registriert: 08.09.2004 00:57
Computerausstattung: Mainboard: MSI 970A-G43
CPU: AMD FX-6300 Six-Core Processor
GraKa: GeForce GTX 750 Ti, 2 GB
Memory: 16 GB DDR3-1600 - Dual Channel
Wohnort: Berlin

Beitrag von ts-soft »

Code: Alles auswählen

If GetExtensionPart(File$)
  File$ = Left(File$, Len(File$) - Len(GetExtensionPart(File$))) +  "txt"
Else
  File$ + ".txt"
EndIf
:D
PureBasic 5.73 LTS | SpiderBasic 2.30 | Windows 10 Pro (x64) | Linux Mint 20.1 (x64)
Nutella hat nur sehr wenig Vitamine. Deswegen muss man davon relativ viel essen.
Bild
Peter aus der Nordheide
Beiträge: 34
Registriert: 18.05.2005 14:59

Beitrag von Peter aus der Nordheide »

ts-soft hat geschrieben:

Code: Alles auswählen

If GetExtensionPart(File$)
  File$ = Left(File$, Len(File$) - Len(GetExtensionPart(File$))) +  "txt"
Else
  File$ + ".txt"
EndIf
:D
Hallo Thomas,

oh, Mann, oh, Mann, ob ich auf diese naheliegende Lösung gekommen wäre ?

Jetzt ist nur noch das Problem mit folgendem Beispiel :

Dateiname Eingabe : "Programm Version. 6.2.00"

Dateiname Ausgabe : "Programm Version. 6.2.txt"

Mit zusätzlicher Abfrage von mindestens der hier verwendeten Erweiterungen müßte es dann ausreichend sein :

Code: Alles auswählen

If      GetExtensionPart(File$) = "txt"
  File$ = Left(File$, Len(File$) - Len(GetExtensionPart(File$))) +  "txt" 

ElseIf GetExtensionPart(File$) = "dat"
  File$ = Left(File$, Len(File$) - Len(GetExtensionPart(File$))) +  "txt" 

ElseIf GetExtensionPart(File$) = "csv"
  File$ = Left(File$, Len(File$) - Len(GetExtensionPart(File$))) +  "txt" 

Else 
  File$ + ".txt"  
EndIf


Damit wird dann sichergestellt, daß irgendwelche anderen Konstrukte im Dateinamen einschl. hier nicht abgefragter Erweiterungen erhalten bleiben und mit ".txt" erweitert werden.

Habe ich aber noch nicht ausprobiert.

Gruß Peter
Antworten