Estrarre parola da path

di il
15 risposte

Estrarre parola da path

Ciao a tutti

vorrei prelevare la prima directory a destra dello slash

p.e.:

\OneDrive\Documenti\Fax 

risultato "Fax"

Grazie

15 Risposte

  • Re: Estrarre parola da path

    Puoi usare la funzione instr (che restituisce la prima occorrenza di un determinato criterio di ricerca- carattere) oppure puoi usare la funzione split che crea un array di stringhe partendo da un'unica stringa che viene separata utilizzando un determinato criterio/carattere ...

    Ti suggerisco split() e poi prendi l'ultimo elemento dell'array (tramite la funzione ubound)

  • Re: Estrarre parola da path

    Date le ripetizioni dello slash crea una funzione usando InStr in un ciclo for partendo da destra (lunghezza massima)

    selezioni il carattere e lo confronti con "\" escludendo il primo (per escludere il caso limite di http:\\pippo\)

    se escludi il primo imposti una variabile "limitemassimo" (nell' esempio 12) 

    appena trovi l'altro "\" imposti la variabile "limiteminimo" (nell'esempio limitemassimo - contatore= 7)

    ed esci dal ciclo.

    a questo punto estrai la stringa dalla posizione limiteminimo alla posizione limitemassimo

    metti la funzione fruibile a livello globale e la richiami ogni volta che ti serve. magari passi il oltre alla striga da elaborare anche il parametro da cercare che sia \ . , ! ecc...

    utile se vuoi cercare una estensione del file (.exe; .dat; .txt ecc...)

  • Re: Estrarre parola da path

    28/03/2025 - AlbertoL ha scritto:

    Ciao a tutti

    vorrei prelevare la prima directory a destra dello slash

    p.e.:

    \OneDrive\Documenti\Fax 

    risultato "Fax"

    Grazie

  • Re: Estrarre parola da path

    29/03/2025 - sihsandrea ha scritto:

    Date le ripetizioni dello slash crea una funzione usando InStr in un ciclo for partendo da destra (lunghezza massima)

    selezioni il carattere e lo confronti con "\" escludendo il primo (per escludere il caso limite di http:\\pippo\)

    se escludi il primo imposti una variabile "limitemassimo" (nell' esempio 12) 

    appena trovi l'altro "\" imposti la variabile "limiteminimo" (nell'esempio limitemassimo - contatore= 7)

    ed esci dal ciclo.

    a questo punto estrai la stringa dalla posizione limiteminimo alla posizione limitemassimo

    metti la funzione fruibile a livello globale e la richiami ogni volta che ti serve. magari passi il oltre alla striga da elaborare anche il parametro da cercare che sia \ . , ! ecc...

    utile se vuoi cercare una estensione del file (.exe; .dat; .txt ecc...)

    grazie

  • Re: Estrarre parola da path

    28/03/2025 - max.riservo ha scritto:

    Puoi usare la funzione instr (che restituisce la prima occorrenza di un determinato criterio di ricerca- carattere)  ...

    Esiste anche InStrRev che trova la prima occorrenza partendo dal fondo :

    Dim sPath 	as String
    Dim iFound 	as Integer
    sPath = "\OneDrive\Documenti\Fax"
    iFound = InStrRev(sPath ,"\")
    If iFound > 0 Then
    	Result = Mid(sPAth, iFound + 1)
    Else
    	'Slash not Found
    End If
  • Re: Estrarre parola da path

    Giusto, non l'avevo considerata. 

    in ogni caso si deve ciclare per escludere la prima occorrenza se la striga termina con "\"

    imputare il limite massimo

    rifare la ricerca ed a questo punto estrarre la parte di stringa  assicurandosi che la sPath non sia senza "\"

  • Re: Estrarre parola da path

    29/03/2025 - sihsandrea ha scritto:

    in ogni caso si deve ciclare per escludere la prima occorrenza se la striga termina con "\"

    Allora usi direttamente la funzione Split ...

    28/03/2025 - max.riservo ha scritto:

    Ti suggerisco split() e poi prendi l'ultimo elemento dell'array (tramite la funzione ubound)

  • Re: Estrarre parola da path

    Ciao,

    Esistono almeno due scenari:

    1. un percorso che non esiste dal quale prelevare l'ultima subfolder per poi crearla o per altri scopi
    2. un percorso che esiste dal quale prelevare l'ultima folder o subfolder 

    Non hai specificato il tuo contesto e pertanto provo solo a darti un idea per quanto riguarda lo scenario del punto 2.

    Poniamo che :

    • il percorso esista effettivamente nel drive interrogato
    • per estrarre l'ultima folder o subfolder:
      • stabilire se l'ultima parte a destra sia effettivamente una folder o subfolder e non un file (un file può avere un estensione oppure nonaverla)
      • se l'ultima partea destra del percorso non è una folder o subfolder, allora si prenderà come folder o subfolder il ramo precedete verso sinistra
      • se il percorso indicato non corrisponde ad una folder o subfolder allora verrà restituita una stringa vuota (empty)

    Esempio:

    
    ' GET LAST FOLDER OR SUBFOLDER
    Function MyGetLastFolder(ByVal stringPath As String) As String
    Dim fso As Object
    Dim arrayySplit() As String
    Dim i As Integer
    Dim stringTempPath As String
    
    ' Create FileSystemObject
    Set fso = CreateObject("Scripting.FileSystemObject")
    
    ' Remove any trailing spaces and backslashes
    stringPath = Trim(stringPath)
    If Right(stringPath, 1) = "\" Then stringPath = Left(stringPath, Len(stringPath) - 1)
    
    ' Split the path using "\"
    arrayySplit = Split(stringPath, "\")
    
    ' Scan the path from right to left
    For i = UBound(arrayySplit) To 0 Step -1
        ' Retrieve path temp
        stringTempPath = Left(stringPath, InStrRev(stringPath, arrayySplit(i)) + Len(arrayySplit(i)) - 1)
        ' Check if the path exists
        If fso.FolderExists(stringTempPath) Then
            MyGetLastFolder = arrayySplit(i)
            Exit Function
        End If
    Next i
    
    ' If no valid folder is found, return an empty string
    MyGetLastFolder = ""
    End Function

    .
    Test:

    In questo caso Fax è una subfolder
    MsgBox MyGetLastFolder(c:\Users\OneDrive\Documenti\Fax)					-> Restituisce "Fax"
    
    In questo caso Fax è un file
    MsgBox MyGetLastFolder(c:\Users\OneDrive\Documenti\Fax)					-> Restituisce "Documenti"
    
    In questo caso il percorso non risulta essere valido (non esiste il drive F:\)
    MsgBox MyGetLastFolder(F:\Users\OneDrive\Documenti\Fax)					-> Restituisce "" (empty)
    
    In questo caso viene passato un percorso che termina con il nome di un file esistente
    MsgBox MyGetLastFolder(c:\log.txt)										-> Restituisce "c:"
    
    In questo caso viene passato un percorso che termina con Papero.Log chè una subfolder
    MsgBox MyGetLastFolder(c:\Papero.Log)									-> Restituisce "Papero.Log"

    .
    Quanto riportato in riferimento al Punto 2. dell'analisi iniziale 

    Se invece lo scenario è quello del Punto 1. allora il discorso cambia e si riduce ad un semplice split prendendo l'ultimo item.

  • Re: Estrarre parola da path

    Deve creare una funzione valutando tutte le possibili combinazioni e/o eccezioni.

  • Re: Estrarre parola da path

    29/03/2025 - sihsandrea ha scritto:

    Deve creare una funzione valutando tutte le possibili combinazioni e/o eccezioni.

    Ciao, 

    direi che lo scopo del codice di esempio che ho postato già copre un numero di possibili combinazioni e/o eccezioni. E' solo un piccolo esempio, poi il VBA non lo uso più da moltissimo tempo.

    Per esempio non ho provato con un percorso di rete ... ma dovrebbe andare. (da verificare)

    Però come al solito gli OP sono sempre più ermetici ... non si capisce mai il vero scopo del quesito. Almeno uno stralcio di analisi con qualche dettaglio... 
    non so , ogni volta rimango sempre più perplesso, sarà un mio difetto ;-))

  • Re: Estrarre parola da path

    28/03/2025 - AlbertoL ha scritto:

    Ciao a tutti

    vorrei prelevare la prima directory a destra dello slash

    p.e.:

    \OneDrive\Documenti\Fax 

    risultato "Fax"

    Grazie

    Mi pare la cosa si sia complicata troppo.

    Se vuoi anche l'ultimo BackSlash usa questa:

    Mid$(TuaPath,1,InstrRev(TuaPath,"\"))

    se non vuoi l'ultimo BackSlash usa questa:

    Mid$(TuaPath,1,InstrRev(TuaPath,"\")-1)
  • Re: Estrarre parola da path

    Uhm... Mi estrae OneDrive...

    Forse ho ricopiato male.

  • Re: Estrarre parola da path

    Forse per prima directory intende "\OneDrive" quindi si può utilizzare questa espressione

    IIF(Instr(2,TuoPath,"\")=0,TuoPath,Left(TuoPath,IIF(Nz(Instr(2,TuoPath,"\"),0)=0,0,Instr(2,TuoPath,"\")-1)))

    che permette di controllare il contenuto di TuoPath :

    • TuoPath="" restituisce null
    • TuoPath="\OneDrive" restituisce "\OneDrive"
    • TuoPath="\OneDrive\" restituisce "\OneDrive"
    • TuoPath="\OneDrive\Documenti" restituisce "\OneDrive"
    • e successivamente aumentando il path restituisce sempre "\OneDrive"

    oppure creare una Funzione che, tramite codice, rappresenta l'espressione sopra mostrata.

  • Re: Estrarre parola da path

    31/03/2025 - Stifone ha scritto:

    IIF(Instr(2,TuoPath,"\")=0,TuoPath,Left(TuoPath,IIF(Nz(Instr(2,TuoPath,"\"),0)=0,0,Instr(2,TuoPath,"\")-1)))

    A fronte del Path passato come parametro, se la stringa restituita rappresenta un file e non una cartella ?

    Un conto lavorare su stringhe ed estrarre, date determinate condizioni, una parte di esse (cosa del tutto semplice e banale), altro conto sapere cosa si stà estraendo e se è conforme a quanto ci si aspetti.

    Per cui... con che tipo di stringhe si sta lavorando ? 
    Si vuole essere certi che la porzione di stringa estratta sia effettivamente una cartella e non un file ?

    Quindi secondo lo scenario si devono applicare le giuste regole e le appropriate soluzioni.

    In questo caso non è noto l'origine della stringa in quanto non è stato specificato e come ho dimostrato sopra, nei post precedenti, le cose cambiano notevolmente.

Devi accedere o registrarti per scrivere nel forum
15 risposte