[VB6] Split( functie vraag

Pagina: 1
Acties:
  • 65 views sinds 30-01-2008

  • Lord_Gaav
  • Registratie: April 2003
  • Laatst online: 18-05 13:13
In een programmaatje wat ik aan het maken ben, is het op een gegeven moment nodig dat ik een string "d: [Programs]" inkort tot "d:". Nu wilde ik dat dus doen met de Split( functie, alleen krijg ik dit niet voor elkaar, aangezien VB6 steeds klaagt over Type Mismatch. Hieronder een stukje code.

Visual Basic:
1
2
3
4
5
6
7
8
9
Static Function Drive() As String
    Dim a As String
    Dim b(0 To 1)
    a = lstDrive.Drive
    b(1) = Split(a, ":")
    
    Drive = a
    
End Function


PS: ik ben nog een redelijke n00b met VisualBasic, dus gaarne uw reacties so simpel mogelijk uitleggen :P

[ Voor 4% gewijzigd door Lord_Gaav op 25-12-2003 15:25 ]


Verwijderd

left (a,2)

[ Voor 28% gewijzigd door Verwijderd op 25-12-2003 15:28 ]


  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:08

gorgi_19

Kruimeltjes zijn weer op :9

* gorgi_19 vindt het trouwens ook best vaag om de functie static te declaren..

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • vogeltje
  • Registratie: December 2001
  • Laatst online: 10-08-2025
TheGreatRanma schreef op 25 december 2003 @ 15:24:
In een programmaatje wat ik aan het maken ben, is het op een gegeven moment nodig dat ik een string "d: [Programs]" inkort tot "d:". Nu wilde ik dat dus doen met de Split( functie, alleen krijg ik dit niet voor elkaar, aangezien VB6 steeds klaagt over Type Mismatch. Hieronder een stukje code.

Visual Basic:
1
2
3
4
5
6
7
8
9
Static Function Drive() As String
    Dim a As String
    Dim b(0 To 1)
    a = lstDrive.Drive
    b(1) = Split(a, ":")
    
    Drive = a
    
End Function


PS: ik ben nog een redelijke n00b met VisualBasic, dus gaarne uw reacties so simpel mogelijk uitleggen :P
logisch dat je een Type Mismatch krijgt, Split retourneert een array met alle gevonden 'sub-elementen'. Jij wilt de gesplitte string in positie [1] van b duwen.

Split werkt dan ook zo:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
Public Function Drive() As String
    Dim a As String
    Dim b() As String   'een array dus

    a = lstDrive.Drive
    b = Split(a, ":")
    
    Drive = b(0) 'eerste elementen uit de array retourneren
    
End Function


btw, Left(a, 2) is veel makkelijker. Aangezien het niet uitmaakt of er nou U: of D: staat, het werkt altijd.

[ Voor 34% gewijzigd door vogeltje op 25-12-2003 15:54 ]

binnenkort een hele dikke casemod :P


  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

De correcte syntax zou moeten zijn:

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
Private Function Drive() As String
  Dim a   As String
  Dim b() As String

  a = lstDrive.Drive
  b = Split(a, ":")
 
  Drive = b(0)
  Call Erase(b)

End Function


Wel nog een paar opmerkingen:
- Gebruik een benaming voor je variabele die aangeeft waar het voor gebruikt word
- Het gebruik van de functie Left$ zou beter zijn, je wilt immers altijd maar het eerste karakter van de string hebben. Een split is hiervoor niet echt bedoeld.
- Kijk eens in de help naar de uitleg van de functie Split, bestudeer ook de example. Misschien kom je er dan wel zelf uit waarom je het resultaat van Split niet moet toewijzen aan b(1)
- De variabele a is overbodig, je kunt ook lstDrive.Drive als parameter meegeven aan de split functie

edit:
Hmm, zie dat vogeltje me net voor was :(

[ Voor 16% gewijzigd door Lorn op 25-12-2003 15:58 ]


  • Lorn
  • Registratie: Maart 2000
  • Laatst online: 13-01-2025

Lorn

I have a bad feeling...

Nog een opmerking, waarom geef je eigenlijk geen parameter mee aan je functie? Als je dan lstDrive een andere naam geeft blijft je functie tenminste gewoon werken. Bovendien kan je de functie dan ook nog eens makkelijk in een ander project gebruiken.

Visual Basic:
1
2
3
4
5
6
Public Function ExtractDriveLetter(ByVal Path As String) As String
  Dim DriveLetter As String

  DriveLetter = Left$(Path, 2)
  ExtractDriveLetter = DriveLetter
End Function

Het gebruik van de variabele DriveLetter is strikt genomen niet eens nodig, voor de leesbaarheid is het alleen wel makkelijk.

In jouw code roep je dan aan:
Visual Basic:
1
  MyDrive = ExtractDriveLetter(lstDrive.Drive)


Er kan trouwens nog over gediscusieerd worden of je voor zoiets wel een functie moet maken.

  • Lord_Gaav
  • Registratie: April 2003
  • Laatst online: 18-05 13:13
wow! bedankt voor alle reacties mensen.

ik heb nu de Left(a, 2) functie geprobeerd, en het werkt perfect. :)

  • vogeltje
  • Registratie: December 2001
  • Laatst online: 10-08-2025
TheGreatRanma schreef op 25 december 2003 @ 18:55:
wow! bedankt voor alle reacties mensen.

ik heb nu de Left(a, 2) functie geprobeerd, en het werkt perfect. :)
en om het dan helemaal perfect te doen, gebruik dan Left$ ipv. Left. Die is namelijk specifiek voor Strings, de ander voor Variants (d8 ik)

binnenkort een hele dikke casemod :P


  • .oisyn
  • Registratie: September 2000
  • Laatst online: 15:32

.oisyn

Moderator Devschuur®

Demotivational Speaker

TheGreatRanma schreef op 25 december 2003 @ 18:55:
wow! bedankt voor alle reacties mensen.

ik heb nu de Left(a, 2) functie geprobeerd, en het werkt perfect. :)
en ga de volgende keer de documentatie doorlezen voor je een topic opent

Give a man a game and he'll have fun for a day. Teach a man to make games and he'll never have fun again.

Pagina: 1

Dit topic is gesloten.