Avatar billede flashit Nybegynder
08. september 2003 - 14:43 Der er 13 kommentarer og
1 løsning

instr & mid problem

Hej E.

Jeg har følgende:
\\FSASBA113\stsa\Pocket_PC My Documents\

Dette vil jeg gerne have lavet om så det kommer til at være:
N:\Pocket_PC My Documents\

Det eneste som er sikkert, er at backslash nr. 4 er der hvor jeg skal skille variablen.

Men jeg kan ikke lige få instr og mid til at låse mit problem.(selv om det nok er disse jeg skal bruge
Avatar billede lokespas Nybegynder
08. september 2003 - 14:52 #1
du kan bruge split function

Dim arrtmp() As String
Dim strString As String

strString = "\\FSASBA113\stsa\Pocket_PC My Documents\"

arrtmp() = Split(strString, "\")

strString = "N:\" & arrtemp(4) & "\"
Avatar billede sjh Nybegynder
08. september 2003 - 14:57 #2
Private Sub Form_Load()
Dim strPath  As String
  strPath = "\\FSASBA113\stsa\Pocket_PC My Documents\"
  If Mid(strPath, Len(strPath), 1) = "\" Then
    strPath = Mid(strPath, 1, Len(strPath) - 2)
  End If
  strPath = Right(strPath, Len(strPath) - InStrRev(strPath, "\"))
  Me.Caption = "N:\" & strPath
End Sub
Avatar billede -thomas- Nybegynder
08. september 2003 - 15:01 #3
Hvis du vil gøre det kun vha. instr og mid, kan du skrive: (det godt nok en lidt besværlig måde...)


Dim strString, intPos, i

strString = "\\FSASBA113\stsa\Pocket_PC My Documents\"
intPos = 1

For i = 1 to 3
intPos = Instr(intPos+1, strString, "\")
Next i

strResult = "N:" & Mid(strString, intPos)
Avatar billede -thomas- Nybegynder
08. september 2003 - 15:03 #4
Men hvis du har vb5, er det vist kun min løsning, der duer :)
Avatar billede sjh Nybegynder
08. september 2003 - 15:05 #5
'InStrRev for vb4-vb5
Public Function InStrRev(StringCheck As String, StringMatch As String, _
                Optional Start As Long = -1, Optional Compare As _
                VbCompareMethod = vbBinaryCompare) As Long
Dim i As Long
  If Compare = vbTextCompare Then
    StringCheck = LCase(StringCheck)
    StringMatch = LCase(StringMatch)
  End If
If Start > -1 And Start > 0 Then StringCheck = Left(StringCheck, Start)
  For i = Len(StringCheck) To 1 Step -1
    If Mid(StringCheck, i, Len(StringMatch)) = StringMatch Then
      Exit For
    End If
  Next
InStrRev = i
End Function
Avatar billede -thomas- Nybegynder
08. september 2003 - 15:07 #6
og split for vb4-5:

Public Function Split(ByVal TextToSplit As String, Optional Delimiter As String = " ") As Variant
   
    If TextToSplit = "" Then Exit Function
   
    Dim TempStr As String, tempArr() As String
    Dim X As Long
   
    On Error Resume Next
   
    If Delimiter <> "" Then
        Do
            X = InStr(TextToSplit, Delimiter)
            If X <> 0 Then
                TempStr = Left(TextToSplit, X - 1)
                TextToSplit = Right(TextToSplit, Len(TextToSplit) - X + 1 - Len(Delimiter))
               
                ReDim Preserve tempArr(UBound(tempArr) + 1)
                If Err Then ReDim tempArr(0): Err = 0
                tempArr(UBound(tempArr)) = TempStr
               
            End If
        Loop While X <> 0
    End If
   
    If TextToSplit <> "" Then
   
        ReDim Preserve tempArr(UBound(tempArr) + 1)
        If Err Then ReDim tempArr(0)
        tempArr(UBound(tempArr)) = TextToSplit
   
    End If
   
    Split = tempArr()
End Function
Avatar billede martin_moth Mester
08. september 2003 - 15:16 #7
-thomas- Du har vist en fejl i din kode - skal der ikke stå

  intPos = 0 ' ( ikke intPos = 1 )

Ellers springer du vist den første \ over

Og skal variablen "i" ikke køre til 4 og ikke 3?

På den anden side - de to "fejl" ophæver hinanden, men forudsætter, at strengen ALTID starter med \

Mvh. Martin, Professionel flueknepper ;o)
Avatar billede flashit Nybegynder
08. september 2003 - 15:19 #8
Jeg kan rigtigt godt lide:

Dim strString, intPos, i

strString = "\\FSASBA113\stsa\Pocket_PC My Documents\"
intPos = 1

For i = 1 to 3
intPos = Instr(intPos+1, strString, "\")
Next i

strResult = "N:" & Mid(strString, intPos)

Men jeg fik ikke lige skrevet at den kun skal køre hvis de 2 første tegn er \\.
Kan jeg få den med :-)
Avatar billede -thomas- Nybegynder
08. september 2003 - 15:28 #9
Så tilføjer du bare:

Dim strString, intPos, i

strString = "\s\FSASBA113\stsa\Pocket_PC My Documents\"
If Left(strString, 2) = "\\" Then
    intPos = 1
   
    For i = 1 To 3
    intPos = InStr(intPos + 1, strString, "\")
    Next i
   
    strResult = "N:" & Mid(strString, intPos)
End If
Avatar billede -thomas- Nybegynder
08. september 2003 - 15:30 #10
martin_moth> hov, jo du har ret, sådan her skal den så være:

Dim strString, intPos, i

strString = "\\FSASBA113\stsa\Pocket_PC My Documents\"
If Left(strString, 2) = "\\" Then
    intPos = 0
   
    For i = 0 To 4
    intPos = InStr(intPos + 1, strString, "\")
    Next i
   
    strResult = "N:" & Mid(strString, intPos)
    Print strResult
End If
Avatar billede flashit Nybegynder
08. september 2003 - 15:34 #11
SUPER. TAK. Giver du et svar -thomas-

Et lille bonus spg:
hvordan skriver man
me.disposed
i vb 6.0?
Avatar billede -thomas- Nybegynder
08. september 2003 - 15:35 #12
hmm... nu går det da helt galt, prøver igen:

Dim strString, intPos, i

strString = "\\FSASBA113\stsa\Pocket_PC My Documents\"

If Left(strString, 2) = "\\" Then
    intPos = 0
   
    For i = 1 To 4
    intPos = InStr(intPos + 1, strString, "\")
    Next i
   
    strResult = "N:" & Mid(strString, intPos)
End If
Avatar billede -thomas- Nybegynder
08. september 2003 - 15:35 #13
Svar :-)
Avatar billede flashit Nybegynder
08. september 2003 - 15:37 #14
Det er helt fint jeg har rettet det til :-)
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