wie Dateien ohne endung auflisten?

Anfängerfragen zum Programmieren mit PureBasic.
FrEeKsTeR
Beiträge: 24
Registriert: 04.06.2008 10:11

wie Dateien ohne endung auflisten?

Beitrag von FrEeKsTeR »

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
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Beitrag von STARGÅTE »

:wink:

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")
Einfach die Dateiändung ermitteln (GetExtensionPart) und dann vom Namen wegschneiden
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
FrEeKsTeR
Beiträge: 24
Registriert: 04.06.2008 10:11

Beitrag von FrEeKsTeR »

das war ja mal ne schnelle antwort vielen dank *g*
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag von Kai »

STARGÅTE hat geschrieben::wink:

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")
Einfach die Dateiändung ermitteln (GetExtensionPart) und dann vom Namen wegschneiden
Kleiner Denkfehler, wenn keine Erweiterung existiert, ziehst du vom eigentlichen Dateiname trotzdem ein Zeichen ab.

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
Meine Homepage - Aktuelle Projekte - Launcher
Letzte PB-Version - Window 7 x86
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

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
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag von Kai »

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
War eh nur so auf der schnelle hingeklatscht und sollte als Beispiel dienen.

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
:allright:
Meine Homepage - Aktuelle Projekte - Launcher
Letzte PB-Version - Window 7 x86
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

Kai, jetzt wird gepointert. :lol:
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
marco2007
Beiträge: 906
Registriert: 26.10.2006 13:19
Kontaktdaten:

Beitrag von marco2007 »

...und And51's Code funkt auch bei z.B.: "name.Punkt.endung". Also bei Dateinamen mit Punkten...
Windows 11 - PB 6.03 x64
_________________________________
Benutzeravatar
Kai
Beiträge: 264
Registriert: 29.09.2005 20:58
Computerausstattung: iMac 2019
Wohnort: Hannover
Kontaktdaten:

Beitrag von Kai »

AND51 hat geschrieben:Kai, jetzt wird gepointert. :lol:
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
Schon ok, ich geb mich einfach mal geschlagen. :lol:
Meine Homepage - Aktuelle Projekte - Launcher
Letzte PB-Version - Window 7 x86
Benutzeravatar
AND51
Beiträge: 5220
Registriert: 01.10.2005 13:15

Beitrag von AND51 »

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.
PB 4.30

Code: Alles auswählen

Macro Happy
 ;-)
EndMacro

Happy End
Antworten