Avatar billede sjh Nybegynder
09. september 2000 - 01:37 Der er 21 kommentarer og
1 løsning

Udskille filenavnet fra stigen.

Har vi en Ekspert. (winkill) der kan hjælpe mig med at lave et lille eksempel på at udskille filenavnet fra stigen, eller lave mit script.

eksempel: \"C:\\WINDOWS\\NOTEPAD.EXE\"
Her skal jeg kun bruge \"NOTEPAD\"


Det skal passe til dette script:

Private Sub Dir1_Change()
    File1 = Dir1
End Sub

Private Sub Drive1_Change()
    Drive1 = Dir1
End Sub

Private Sub Ok_Click()
    Dim miCount As Integer
    Open \"c:\\Filelist.txt\" For Output As #1

    File1.Path = Dir1.Path
    If File1.ListCount <> 0 Then
    For miCount = 1 To File1.ListCount
    File1.ListIndex = miCount - 1

    If Len(Dir1.Path) > 3 Then
    List1.AddItem Dir1.Path & \"\\\" & File1.filename
    Print #1, Dir1.Path & \"\\\" & File1.filename
    Else
   
    List1.AddItem Dir1.Path & File1.filename
    Print #1, Dir1.Path & File1.filename
    End If
   
    List2.AddItem List1.ListCount & \" - \" & File1.filename \'Det er her jeg vil have pillet filenavnet ud
    Next miCount
    Else

    End If
    Close #1
End Sub


Avatar billede driis Nybegynder
09. september 2000 - 02:34 #1
Kan flg. bruges?

Fil=left$(File1.FileName,len(fil)-4) \' Fjerner extension

while not instr(1,fil,\"\\\")=0)
    Fil=right$(fil,len(fil)-instr(1,fil,\"\\\")
wend

    List2.AddItem List1.ListCount & \" - \" & Fil \'Det er her jeg vil have pillet filenavnet ud
Avatar billede driis Nybegynder
09. september 2000 - 02:35 #2
Det skal lige siges, at ovenstående var frit fra leveren, jeg har ikke VB installeret dér hvor jeg sidder nu, så jeg har ingen mulighed for at teste.
Avatar billede sjh Nybegynder
09. september 2000 - 02:57 #3
driis: Jeg for fejl i linjen:

Fil=left$(File1.FileName,len(fil)-4)

Avatar billede driis Nybegynder
09. september 2000 - 13:37 #4
Hvilken fejl får du? Prøv lige at udelade linjen og se, om resten af koden virker.
Avatar billede nolle_k Nybegynder
09. september 2000 - 16:56 #5
Gør følgende

    Dim f As String
    Dim pos As Long, tmppos As Long
    f = \"C:\\System\\Notepad.exe\"
    tmppos = 0
   
    Do
        pos = tmppos
        tmppos = InStr(tmppos + 1, f, \"\\\")
    Loop While (tmppos > 0)

   
    f = Right(f, Len(f) - pos)
   
    pos = InStr(1, f, \".\")
   
    If (pos > 0) Then
        f = Left(f, pos - 1)
    End If
   
    \'f now contains Notepad

//Nolle_K
Avatar billede sjh Nybegynder
09. september 2000 - 17:56 #6
Nolle_K: Ja det script virker fint

Tak

Avatar billede winkill Nybegynder
09. september 2000 - 23:26 #7
Her er en lille funktion som kun returnerer filnavnet, du vælger selv om det skal være med eller uden extention.

Et par eks.:

Debug.Print GetFilename(\"c:\\windows\\notepad.exe\") \' Returnerer \"notepad.exe\"
Debug.Print GetFilename(\"c:\\windows\\notepad.exe\", False) \' Returnerer \"notepad\"

Private Function GetFilename(FullPath As String, Optional WantExtention As Boolean = True) As String
    Dim pos As Integer
    GetFilename = FullPath
    If Not WantExtention Then \' Klip extention fra.
        pos = InStrRev(GetFilename, \".\") \' Find det sidste \".\" i strengen
        If pos > 1 Then GetFilename = Left(FullPath, pos - 1)
    End If
    GetFilename = Mid(GetFilename, InStrRev(GetFilename, \"\\\") + 1)
End Function
Avatar billede winkill Nybegynder
09. september 2000 - 23:29 #8
Ok, her er den korte version... Fjerner kun stien.

TheFilename = Mid(ThePath, InStrRev(ThePath, \"\\\") + 1)

Hvis ThePath = \"c:\\windows\\notepad.exe\" så bliver TheFilename = \"notepad.exe\"

Kun en linie kode og ikke alt det ekstre skrammel. Den returnerer dog en fejl hvis ThePath er tom.
Avatar billede sjh Nybegynder
10. september 2000 - 01:45 #9
winkill: jeg for en fejl i dem, fejlen er at \"InStrRev\" skal udskiftes med \"InStr\" ellers virker det ikke hos mig, og Debug.Print\" ved jeg ikke hvordan man skal bruge den men hvis jeg skriver det sådan:

Text1 = GetFilename(\"c:\\windows\\notepad.exe\") \' Returnerer \"notepad.exe\"
Text2 = GetFilename(\"c:\\windows\\notepad.exe\", False) \' Returnerer \"notepad\"

Så virker det, men i \"Text1\" kommer der til at stå: windows\\notepad.exe
og i \"Text2\" kommer der til at stå: windows\\notepad

det der nok for de der skal ligges en \"Loop\" ind i den eller hvad


Avatar billede sjh Nybegynder
10. september 2000 - 01:50 #10
winkill: Debug.Print\" er en fejl der skulle havde stået: \"Debug.Print\"
Avatar billede winkill Nybegynder
10. september 2000 - 03:22 #11
Hmmm, jeg bruger InStrRev i alle mine scripts og programmer (stort set). Den gør det samme som InStr, bort set fra at den starter fra sidste tegn. Jeg bruger VB 6.0 og til scripts, den Windows Scripting Host som ligger i Windows 2000.

InStrRev er ikke en fejl, men det er muligt at den først er blevet implementeret i VB 6.0
Avatar billede winkill Nybegynder
10. september 2000 - 03:24 #12
Nå ja, og debug.print, de gange jeg har siddet og udviklet i Visual Basic miliøet har jeg lagt mærke til det lille debug vindue i bunden. Det kan aktiveres med Ctrl+G.

Hvis du skriver Debug.Print \"Hello world\" i dit program så får du \"Hello World\" frem i debug vinduet.
Avatar billede winkill Nybegynder
10. september 2000 - 03:27 #13
Prøv evt med dette VBScript.

Dim ThePath
ThePath = \"c:\\windows\\notepad.exe\"
Msgbox Mid(ThePath, InStrRev(ThePath, \"\\\") + 1)
Avatar billede sjh Nybegynder
10. september 2000 - 03:36 #14
winkill:
----------------------------
Compile error
Sub or Function not defined
----------------------------

Det er den Error jeg for, men jeg bruger også kun \"Visual Basic 5.0\" så det er nok problemet.

ellers virker det fint sådan:

Dim ThePath
ThePath = \"c:\\windows\\notepad.exe\"
MsgBox Mid(ThePath, InStr(ThePath, \"\\\") + 1)

:-)
Avatar billede winkill Nybegynder
10. september 2000 - 11:46 #15
Nej, det virker ikke fint på den måde, for InStr starter fra begyndelsen, InStrRev starter fra slutningen... Crap VB 5.0

Nå, men Prøv lige igen, denne gang, tilføj den her funktions dimmer. (Hvad VB ikke har (havde) det laver man selv ;-)

Function InStrRev(StringCheck As String, StringMatch As String) As Long
    Dim pos As Long
    pos = Len(StringCheck)
    While pos > 0
        If Mid(StringCheck, pos, Len(StringMatch)) = StringMatch Then
            InStrRev = pos
            Exit Function
        End If
        pos = pos - 1
    Wend
End Function
Avatar billede sjh Nybegynder
11. september 2000 - 03:53 #16
winkill: Hvis jeg intaster det sådan:


Function InStrRev(StringCheck As String, StringMatch As String) As Long
    Dim pos As Long
    pos = Len(StringCheck)
    While pos > 0
        If Mid(StringCheck, pos, Len(StringMatch)) = StringMatch Then
            InStrRev = pos
            Exit Function
        End If
        pos = pos - 1
    Wend
End Function

Private Sub Command1_Click()
Dim ThePath
ThePath = \"c:\\windows\\notepad.exe\"
MsgBox Mid(ThePath, InStrRev(ThePath, \"\\\") + 1)
End Sub

Så for jeg fejl i linje: \"MsgBox Mid(ThePath, InStrRev(ThePath, \"\\\") + 1)\"

----------------------------
Compile error:
ByRef argument type mismatch
----------------------------
\"ThePath\"

Avatar billede winkill Nybegynder
11. september 2000 - 11:44 #17
Det er fordi du har dim\'et ThePath som variable, det skal helst være en string.

Du kan bruge en af følgende.

Hvis det er ligemeget hvilken type ThePath er i dit program så brug:

Function InStrRev(StringCheck As String, StringMatch As String) As Long
    Dim pos As Long
    pos = Len(StringCheck)
    While pos > 0
        If Mid(StringCheck, pos, Len(StringMatch)) = StringMatch Then
            InStrRev = pos
            Exit Function
        End If
        pos = pos - 1
    Wend
End Function

Private Sub Command1_Click()
Dim ThePath As String
ThePath = \"c:\\windows\\notepad.exe\"
MsgBox Mid(ThePath, InStrRev(ThePath, \"\\\") + 1)
End Sub

Hvis ThePath SKAL værre en variable i dit program så brug:

Function InStrRev(StringCheck As String, StringMatch As String) As Long
    Dim pos As Long
    pos = Len(StringCheck)
    While pos > 0
        If Mid(StringCheck, pos, Len(StringMatch)) = StringMatch Then
            InStrRev = pos
            Exit Function
        End If
        pos = pos - 1
    Wend
End Function

Private Sub Command1_Click()
Dim ThePath
ThePath = \"c:\\windows\\notepad.exe\"
MsgBox Mid(CStr(ThePath), InStrRev(ThePath, \"\\\") + 1)
End Sub
Avatar billede sjh Nybegynder
13. september 2000 - 00:24 #18
winkill: den her virker fint.

Function InStrRev(StringCheck As String, StringMatch As String) As Long
    Dim pos As Long
    pos = Len(StringCheck)
    While pos > 0
        If Mid(StringCheck, pos, Len(StringMatch)) = StringMatch Then
            InStrRev = pos
            Exit Function
        End If
        pos = pos - 1
    Wend
End Function

Private Sub Command1_Click()
Dim ThePath As String
ThePath = \"c:\\windows\\notepad.exe\"
MsgBox Mid(ThePath, InStrRev(ThePath, \"\\\") + 1)
End Sub

Så for jeg: \"notepad.exe\" :-)
Avatar billede winkill Nybegynder
13. september 2000 - 00:26 #19
Finally, selvom der ikke er point i det kan jeg ikke accepterer at der er noget der ikke funker ;-)
Avatar billede sjh Nybegynder
13. september 2000 - 00:49 #20
winkill: sådan skal det også værere.

;-)
Avatar billede nolle_k Nybegynder
13. september 2000 - 08:28 #21
Men så synes jeg nu min løsning var en smule mere enkel!! (Undskyld at jeg træder i det *GGGG*))
Avatar billede winkill Nybegynder
13. september 2000 - 13:16 #22
Ja, i VB < v6.0 vil jeg give dig fuldstændigt ret nolle.
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

Seneste spørgsmål Seneste aktivitet
I går 21:00 Libre Office Impress Af Frank i Andre styresystemer
I går 11:47 VB script Af Jenshentze i Word
I går 11:21 Popup ved opstart Af mort1 i Windows
04/0918:50 Slet lokal konto Af ErikHg i Windows
04/0916:05 Ændre tal i en celle Af xvid i Excel