eine Verzeichnisebene höher

Anfängerfragen zum Programmieren mit PureBasic.
Benutzeravatar
stab
Beiträge: 96
Registriert: 24.02.2006 16:09
Computerausstattung: 286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Wohnort: Hardt
Kontaktdaten:

eine Verzeichnisebene höher

Beitrag von stab »

Hallo,

um eine Verzeichnisebende höher zu gelangen, habe ich mir das hier gebastelt:

Code: Alles auswählen

dir$ = "C:\Programme\Anwendung\bin\"

For d = 1 To CountString(dir$,"\")-1
  neudir$ = neudir$ + StringField(dir$,d,"\") + "\"
Next

Debug neudir$
Gibt es da etwas anderes?

auf Windows Kommandozeilenebene reicht ja ein "cd.."
Zuletzt geändert von stab am 10.10.2022 16:38, insgesamt 1-mal geändert.
Paul sagt: "Max lügt."
Max sagt: "Otto lügt."
Otto sagt: "Max und Paul lügen."

Wer lügt hier wirklich und wer sagt die Wahrheit?

_________________________________________

286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Axolotl
Beiträge: 279
Registriert: 31.12.2008 16:34

Re: eine Verzeichnisebene höher

Beitrag von Axolotl »

Moin,
natürlich, es gibt immer (viele) verschiedene Lösungen ...
Mir gefällt das hier am Besten:

Code: Alles auswählen

neudir$ = GetPathPart(RTrim(dir$, #PS$))  ; #PS$ == "\" 
Debug neudir$ 

oder als Marco oder Procedure

Code: Alles auswählen

; Macro GetParentDirectory(Directory) 
;   GetPathPart(RTrim(Directory, #PS$)) 
; EndMacro 

Procedure.s GetParentDirectory(Directory$) 
  ProcedureReturn GetPathPart(RTrim(Directory$, #PS$))  
EndProcedure 
Using PureBasic latest stable version and current alpha/beta (x64) on Windows 11 Home
Benutzeravatar
stab
Beiträge: 96
Registriert: 24.02.2006 16:09
Computerausstattung: 286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Wohnort: Hardt
Kontaktdaten:

Re: eine Verzeichnisebene höher

Beitrag von stab »

Das gefällt mir auch sehr gut !!!

Ich wusste nicht bzw. hatte nicht getestet, dass GetPathPart() so einfach den Pfad eines Verzeichnisses zurückgibt.

Code: Alles auswählen

t$ = "::<>st1\test2.safsa.__,,,---))))88888///sadf\Qqqq°     °°^^^^Ä+*+;;,...$%§]\]sa.sadfsa.sdaffsasf."
Debug GetPathPart(t$)

Vielleicht sollte die Hilfe doch so lauten:

Kürzt einen String vom Ende bis auf das erste Vorkommen eines Backslashes!

Danke, danke!
Paul sagt: "Max lügt."
Max sagt: "Otto lügt."
Otto sagt: "Max und Paul lügen."

Wer lügt hier wirklich und wer sagt die Wahrheit?

_________________________________________

286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Benutzeravatar
STARGÅTE
Kommando SG1
Beiträge: 7031
Registriert: 01.11.2005 13:34
Wohnort: Glienicke
Kontaktdaten:

Re: eine Verzeichnisebene höher

Beitrag von STARGÅTE »

Du kannst an den Pfad auch einfach ein ".." hängen und gelangst so eine Ebene nach oben.

"C:\Programme\Anwendung\bin\..\" ist also das gleiche wie "C:\Programme\Anwendung\" ohne, dass du irgendwas abschneiden musst.
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
Benutzeravatar
stab
Beiträge: 96
Registriert: 24.02.2006 16:09
Computerausstattung: 286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Wohnort: Hardt
Kontaktdaten:

Re: eine Verzeichnisebene höher

Beitrag von stab »

Das ist ja cool ...

Obwohl ich glaube, mich mit der Kommandozeile gut auszukennen (bin damit aufgewachsen), kannte ich diese Syntax noch nicht.

Code: Alles auswählen

Debug GetCurrentDirectory()
SetCurrentDirectory(GetCurrentDirectory()+"..")
Debug GetCurrentDirectory()


Danke !
Paul sagt: "Max lügt."
Max sagt: "Otto lügt."
Otto sagt: "Max und Paul lügen."

Wer lügt hier wirklich und wer sagt die Wahrheit?

_________________________________________

286er Big Tower; 16MHz; 1MB Ram; 40MB Festplatte, 5 1/4" und 3 1/2" Diskettenlaufwerk; VGA Farbmonitor 14"; Windows 3.1; PureBasic 0.5
Antworten