Avatar billede zhade Nybegynder
08. oktober 2001 - 19:28 Der er 15 kommentarer

Fjerne sti fra filnavn?

Jeg skal bruge en funktion, som går at den søger efter eg. \"c:\\windows\\skrivebord\\mit-billede.jpg\" i en længere text, og så fjerner den \"c:\\windows\\skrivebord\"
Jeg er godt klar over at man kan bruge \"replace\" men stien kan ændre sig, og jeg kan ikke lave en replace til alle mulige stier. Så hvordan laver jeg så sådan en funktion der gør det for mig?

/-Mikael.
Avatar billede eagleeye Praktikant
08. oktober 2001 - 19:43 #1
Noget i den her stil:

Function GetFileName(FullPath)
PosF = 0
For Pos = Len(FullPath) To 1 Step -1
  Select Case Mid(FullPath, Pos, 1)
  Case \"/\", \"\\\": PosF = Pos + 1: Pos = 0
  End Select
Next
If PosF = 0 Then PosF = 1
GetFileName = Mid(FullPath, PosF)
picturePath = \"\" & Mid(FullPath, PosF)
End Function
Avatar billede eagleeye Praktikant
08. oktober 2001 - 19:44 #2
arh her linien:
picturePath = \"\" & Mid(FullPath, PosF)

skulle ikke med:

Function GetFileName(FullPath)
PosF = 0
For Pos = Len(FullPath) To 1 Step -1
  Select Case Mid(FullPath, Pos, 1)
  Case \"/\", \"\\\": PosF = Pos + 1: Pos = 0
  End Select
Next
If PosF = 0 Then PosF = 1
GetFileName = Mid(FullPath, PosF)
End Function
Avatar billede nute Nybegynder
08. oktober 2001 - 19:54 #3
eagleeye >> hvorfor ikke benytte innebygde funksjoner i VBScript ??

picPath = \"c:\\windows\\skrivebord\\mit-billede.jpg\"
startIndex = InStrRev( picPath, \"\\\" ) + 1
fileName = MID( picPath, startIndex )

/nute
Avatar billede eagleeye Praktikant
08. oktober 2001 - 20:02 #4
Jo det kan man. Hvis det \\ i stien. Jeg tænkte at det måke også kunne forkomme / som skille tegn.
Avatar billede eagleeye Praktikant
08. oktober 2001 - 20:02 #5
men det er nok ikke så sansynligt...
Avatar billede eagleeye Praktikant
08. oktober 2001 - 20:08 #6
Når du skriver længere text mener du så sådan her?
text=\"Se billede c:\\windows\\billeder\\imge1.jpg det er pænt.\"
Avatar billede nute Nybegynder
08. oktober 2001 - 20:12 #7
windows skriver lokasjoner på disk med backslash (\\), men hvis denne \"funksjon\" skal kunne håndtere URL\'er i tilleg, så kan man jo bare modifisere litt:

picPath = \"c:\\windows\\skrivebord\\mit-billede.jpg\"

picName = findImgName( picPath )

function findImgName( byVal picPath )
  startIndex = -1
  picName = null
  if( LEN( picPath ) > 0 ) then
    if( InStr(\"/\") > 0 ) then
      startIndex = InStrRev( picPath, \"/\" ) + 1
    else
      if( InStr(\"\\\") > 0 ) then
        startIndex = InStrRev( picPath, \"\\\" ) + 1
      end if
    end if
  end if
  if( startIndex > -1 ) then
    picName = MID( picPath, startIndex )
  end if
  findImgName = picName
end function

/nute
Avatar billede zhade Nybegynder
08. oktober 2001 - 20:28 #8
Ja, med længere text mener jeg
text=\"Se billede c:\\windows\\billeder\\imge1.jpg det er pænt.\"

Og efter funktionen er kørt, skal der så stå
text=\"Se billede imge1.jpg det er pænt.\"
Avatar billede zhade Nybegynder
08. oktober 2001 - 20:31 #9
text = \"Se billede c:\\windows\\billeder\\imge1.jpg det er pænt.\"

text = GetFileName(text)

og på nuværende tidspnkt, ville text være ligmed: \"Se billede imge1.jpg det er pænt.\"
Avatar billede nute Nybegynder
08. oktober 2001 - 20:51 #10
Nå har jeg antatt at alle stier til bilder er på lokaldisk (altså i format drev:\\folder\\folder ...), så kan man skrive funksjonen jeg allerede har skrevet om til en generisk replace funksjon:

picPath = \"Se billede c:\\windows\\billeder\\imge1.jpg det er pænt.\"

picName = findImgName( picPath )

response.write picName

function findImgName( byVal picPath )
  Dim replaceStr, tmpArr, startIndex, returnStr
    tmpArr = SPLIT( picPath, \" \" )
    replaceStr = null
    returnStr  = null
    for i = 0 to UBOUND( tmpArr )
      if( InStr( tmpArr(i), \"\\\" ) > 0 ) then
          replaceStr = MID( tmpArr(i), 1, InStrRev( tmpArr(i), \"\\\" ) )
            exit for
        end if
    next
  if( NOT IsNull(replaceStr) ) then
    returnStr = replace( picPath, replaceStr, \"\" )
  end if
  findImgName = returnStr
end function

/nute
Avatar billede eagleeye Praktikant
08. oktober 2001 - 21:49 #11
Her er en function som laver text=\"Se billede c:\\windows\\billeder\\imge1.jpg det er pænt.\"
om til text=\"Se billede imge1.jpg det er pænt.\"

Function pathRemove(strInput)
  Set objRegPath = New RegExp
  objRegPath.Global = True
  objRegPath.IgnoreCase = True
  objRegPath.Pattern = \"\\w:\\S*\\\\([\\w]+.[\\w]+)\"
  strOutput = objRegPath.Replace(strInput, \"  $1 \")
  Set objRegPath = Nothing
  pathRemove = strOutput
End Function
Avatar billede nute Nybegynder
08. oktober 2001 - 22:03 #12
eagleeye >> så skal man sørge for at VBScript versjon 5 kjører på serveren. Da er det heller bedre å benytte seg av JScript som har RegExp object innebygget fra tidligere versjoner.

/nute
Avatar billede eagleeye Praktikant
08. oktober 2001 - 22:11 #13
nute>> Ja men det antager jeg også findes på de forskellige web-hoteller. Jeg har det til at virke på en Window98 computer, så tror jeg også det virker på stort set alt andet.
Avatar billede zhade Nybegynder
09. oktober 2001 - 11:01 #14
det skal bare kunne kører på en af scannets.dk servere...
Jeg tester det når jeg kommer hjem... (sent iaften)
Avatar billede eagleeye Praktikant
21. september 2002 - 23:37 #15
Er du kommet hjem ;)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester