wie Dateien ohne endung auflisten?
wie Dateien ohne endung auflisten?
Hallo alle zusammen *g* ich bin neu hier, Anfänger und hab nen kleines Problem *g*. ich versuche mir mittels Programm eine Text Datei anzulegen und die einträge in einem Verzeichniss rein schreiben zu lassen. Das klappt auch alles Wunderbar, mein Problem ist jetzt ich möchte die einträge ohne Endung in der Text Datei haben. Gibt es irgend eine Möglichkeit die Datei Endungen zu entfernen ? Habe über die Suche nicht wirklich etwas zu diesem Thema gefunden. Ich würde mich über Hilfe sehr freuen
mfg FrEeKsTeR
mfg FrEeKsTeR

Code: Alles auswählen
Procedure.s OhneEndung(DateiName$)
ProcedureReturn Left(DateiName$, Len(DateiName$)-Len(GetExtensionPart(DateiName$))-1)
EndProcedure
Debug OhneEndung("C:\Mein Ordner\MeineDatei.Meins")
PB 6.01 ― Win 10, 21H2 ― Ryzen 9 3900X, 32 GB ― NVIDIA GeForce RTX 3080 ― Vivaldi 6.0 ― www.unionbytes.de
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
Aktuelles Projekt: Lizard - Skriptsprache für symbolische Berechnungen und mehr
- Kai
- Beiträge: 264
- Registriert: 29.09.2005 20:58
- Computerausstattung: iMac 2019
- Wohnort: Hannover
- Kontaktdaten:
Kleiner Denkfehler, wenn keine Erweiterung existiert, ziehst du vom eigentlichen Dateiname trotzdem ein Zeichen ab.STARGÅTE hat geschrieben:![]()
Einfach die Dateiändung ermitteln (GetExtensionPart) und dann vom Namen wegschneidenCode: Alles auswählen
Procedure.s OhneEndung(DateiName$) ProcedureReturn Left(DateiName$, Len(DateiName$)-Len(GetExtensionPart(DateiName$))-1) EndProcedure Debug OhneEndung("C:\Mein Ordner\MeineDatei.Meins")
Habs ma bissl umgebaut.
Code: Alles auswählen
Procedure.s OhneEndung(DateiName$)
Protected sResult.s
If GetExtensionPart(DateiName$) <> ""
sResult = Left(DateiName$, Len(DateiName$)-Len(GetExtensionPart(DateiName$))-1)
Else
sResult = Left(DateiName$, Len(DateiName$)-Len(GetExtensionPart(DateiName$)))
EndIf
ProcedureReturn sResult
EndProcedure
Kai, habe deins mal ein bisschen umgebaut.
Mein Code ist doppelt so schnell wie deiner und übersichtlicher:
Mein Code ist doppelt so schnell wie deiner und übersichtlicher:
Code: Alles auswählen
Procedure.s OhneEndung(File.s)
Protected length.l=Len(GetExtensionPart(File))
If length
ProcedureReturn Left(File, Len(File)-length-1)
EndIf
ProcedureReturn File
EndProcedure
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
- Kai
- Beiträge: 264
- Registriert: 29.09.2005 20:58
- Computerausstattung: iMac 2019
- Wohnort: Hannover
- Kontaktdaten:
War eh nur so auf der schnelle hingeklatscht und sollte als Beispiel dienen.AND51 hat geschrieben:Kai, habe deins mal ein bisschen umgebaut.
Mein Code ist doppelt so schnell wie deiner und übersichtlicher:Code: Alles auswählen
Procedure.s OhneEndung(File.s) Protected length.l=Len(GetExtensionPart(File)) If length ProcedureReturn Left(File, Len(File)-length-1) EndIf ProcedureReturn File EndProcedure
Code: Alles auswählen
Procedure.s GetFileNamePart(File$)
If File$
Protected *C.Character = @File$
If *C
Protected a.l, flen.l = Len(File$) - 1, epos.l, clen.l = SizeOf(Character)
*C = @File$ + (flen * clen)
epos = *C
For a = flen To 0 Step -1
If *C\c = '\' Or *C\c = '/'
If epos = 0: epos = a + 1: EndIf
Break
ElseIf *C\c = '.'
epos = a
EndIf
*C - clen
Next
ProcedureReturn PeekS(@File$, epos)
EndIf
EndIf
EndProcedure

Kai, jetzt wird gepointert.
Hier, mein Code ist geringfügig schneller als deiner und außerdem ist er mal stark vereinfacht:

Hier, mein Code ist geringfügig schneller als deiner und außerdem ist er mal stark vereinfacht:
Code: Alles auswählen
Procedure.s OhneEndung(File.s)
Protected *point.Character=@File
*point+MemoryStringLength(*point)<<#PB_Compiler_Unicode-SizeOf(Character)
While *point\c
If *point\c = '.'
ProcedureReturn PeekS(@File, (*point-@File)>>#PB_Compiler_Unicode)
ElseIf *point\c = '\' Or *point\c = '/'
ProcedureReturn File
EndIf
*point-SizeOf(Character)
Wend
ProcedureReturn File
EndProcedure
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End
- Kai
- Beiträge: 264
- Registriert: 29.09.2005 20:58
- Computerausstattung: iMac 2019
- Wohnort: Hannover
- Kontaktdaten:
Schon ok, ich geb mich einfach mal geschlagen.AND51 hat geschrieben:Kai, jetzt wird gepointert.![]()
Hier, mein Code ist geringfügig schneller als deiner und außerdem ist er mal stark vereinfacht:Code: Alles auswählen
Procedure.s OhneEndung(File.s) Protected *point.Character=@File *point+MemoryStringLength(*point)<<#PB_Compiler_Unicode-SizeOf(Character) While *point\c If *point\c = '.' ProcedureReturn PeekS(@File, (*point-@File)>>#PB_Compiler_Unicode) ElseIf *point\c = '\' Or *point\c = '/' ProcedureReturn File EndIf *point-SizeOf(Character) Wend ProcedureReturn File EndProcedure

Du musst dich nicht geschlagen geben! Ich nehme gern jede Herausforderung an.
Ich möchte dir mal einen Tipp geben, kai.
Im Prinzip haben unsere Codes die gleiche vorgehensweise: Von hinten anfangen zu parsen. Allerdings Benutzt du allein schon mehrere Variablen, ich nur eine (den Pointer).
Deine For-Schleife habe ich durch While ersetzt, das macht deine Zählvaraible ebenfalls überflüssig. For durch While zu ersetzen ist meiner Meinung nach auch praktischer zu handhaben.
Und deine ganzen Abfragen (If *C, If File$, If *C\c, ElseIf) hab ich durch drei Abfragen ersetzt: While, If und ElseIf, mehr ist ja nicht nötig.
Sachen wie SizeOf(Character) musst du nicht zwischenspeichern, dies sind konstante Werte, sie werden beim Kompilieren direkt durch ihren Wert ersetzt. Eine Konstanten in einer Variablen zu speichern ist also auch nicht nötig.

Ich möchte dir mal einen Tipp geben, kai.
Im Prinzip haben unsere Codes die gleiche vorgehensweise: Von hinten anfangen zu parsen. Allerdings Benutzt du allein schon mehrere Variablen, ich nur eine (den Pointer).
Deine For-Schleife habe ich durch While ersetzt, das macht deine Zählvaraible ebenfalls überflüssig. For durch While zu ersetzen ist meiner Meinung nach auch praktischer zu handhaben.
Und deine ganzen Abfragen (If *C, If File$, If *C\c, ElseIf) hab ich durch drei Abfragen ersetzt: While, If und ElseIf, mehr ist ja nicht nötig.
Sachen wie SizeOf(Character) musst du nicht zwischenspeichern, dies sind konstante Werte, sie werden beim Kompilieren direkt durch ihren Wert ersetzt. Eine Konstanten in einer Variablen zu speichern ist also auch nicht nötig.
PB 4.30
Code: Alles auswählen
Macro Happy
;-)
EndMacro
Happy End