[VB] Functie om strings op te delen.

Pagina: 1
Acties:

  • Enigma69855
  • Registratie: September 2000
  • Laatst online: 12-03-2022

Enigma69855

Candle in my eye.......

Topicstarter
Ik met een willekeurige string met aan het einde minstens 4 cijfers opdelen in het eerste deel en het deel met de 4 cijfers. Ik heb dit geprobeerd met de functie Split, maar op de een of andere manier werkte dat niet zoals ik dat hoopte of dacht. (of het werkte helemaal niet :(). Zijn er nog andere functies die een dergelijke functionaliteit hebben, of zit ik opgescheept met Split??

Wegens verhuizing te koop gevraagd: Sociaal leven in omgeving Arnhem


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

Zelf functie schrijven zoiets als met Instr en Isnumeric functie... om te zoeken naar een waarde in de string.... zoiets als:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
Function ExtractLastFourNumber(PosString As String, Optional strLookAfter As String) As Integer
'Returns a integer number of a Position string
Dim iPos As Integer
Dim TempNumber As String
Dim iStartPos As Integer
Dim iEndPos As Integer

If InStr(1, PosString, strLookAfter) = 0 Then
    iStartPos = 1
Else
    iStartPos = InStr(1, PosString, strLookAfter) + Len(strLookAfter)

End If

iEndPos = Len(PosString)

For iPos = iStartPos To iEndPos
    
    If IsNumeric(CStr(Mid(PosString, iPos, 1))) Then
      TempNumber = TempNumber & CStr(Mid(PosString, iPos, 1))
    ElseIf Mid(PosString, iPos, 1) = " " Then
'     LastPos = iPos + 1
      Exit For
    End If

Next

ExtractLastFourNumber = CInt(TempNumber)

End Function

strLookAfter is een string waarde waar die eerst naar moet zoeken.. ooh ja posstring is de string die je doorzoekt..

  • Enigma69855
  • Registratie: September 2000
  • Laatst online: 12-03-2022

Enigma69855

Candle in my eye.......

Topicstarter
Zo lijkt het ineens weer een script request :(.... nou ja in ieder geval bedankt, ik zal eens wat stoeien met die twee eerste functies.

Wegens verhuizing te koop gevraagd: Sociaal leven in omgeving Arnhem


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

Tja... ik ben benieuwd of je nog iets anders vindt...

  • Enigma69855
  • Registratie: September 2000
  • Laatst online: 12-03-2022

Enigma69855

Candle in my eye.......

Topicstarter
Ik heb nu zelf een functie geschreven die het voor elkaar zou moeten krijgen, maar er gaat toch iets fout. Ik ben een beetje een newbie op VB, dus niet zeuren als de fout iets heel simpels blijkt te zijn :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Bar = Split(BarcodeStr, "")
Upper = UBound(Bar)
Interupted = False

For XX = 0 To Upper
  If (IsNumeric(Bar(Upper - XX)) And !Interupted) Then
    Counter = Bar(Upper - XX) + Counter
  Else
    Interupted = True
    Header = Bar(Upper - XX) + Header
  End If
Next XX

Counter = Counter + X
BarcodeStr = Header + Counter

De functie Split() split niet, de Array bar bevat 1 element (de hele input string)

Wegens verhuizing te koop gevraagd: Sociaal leven in omgeving Arnhem


Verwijderd

Als je zeker weet dat je string aan het einde 4 cijfers heeft kun je het volgende doen:
[VB]
Dim strString
strString = "dfjkgjdfjkghjk4444"
strString = Mid(strString, Len(strString) - 3, 4)
[/VB]

  • Crazy D
  • Registratie: Augustus 2000
  • Laatst online: 17-09 08:12

Crazy D

I think we should take a look.

Is niet zo vreemd, je split op "", een lege string dus.
Doe eens een test string als "blah woef" en splitten op spatie, en je zal zien dat de split functie het op zich prima doet.

Exact expert nodig?


  • Enigma69855
  • Registratie: September 2000
  • Laatst online: 12-03-2022

Enigma69855

Candle in my eye.......

Topicstarter
[Wat hier stond was niet correct, vergeef mij voor mijn slechte lezen van de MSDN]
Op maandag 22 oktober 2001 10:58 schreef CrazyD_at_work het volgende:
Is niet zo vreemd, je split op "", een lege string dus.
Doe eens een test string als "blah woef" en splitten op spatie, en je zal zien dat de split functie het op zich prima doet.
En je hebt dus gelijk..... stom van me |:(

Wegens verhuizing te koop gevraagd: Sociaal leven in omgeving Arnhem


  • Greyfox
  • Registratie: Januari 2001
  • Laatst online: 16-09 21:53

Greyfox

MSX rulez

Je kunt ook de InStrRev gebruiken. Daarmee zoek je vanaf de achterkant van de string terug naar voren. Als het deel voor de cijfers letters zijn, dan kun je hiermee eenvoudig die splitsing maken.

MSX 2 rulez more


  • Enigma69855
  • Registratie: September 2000
  • Laatst online: 12-03-2022

Enigma69855

Candle in my eye.......

Topicstarter
Dit werkt eindelijk :) met dank aan DuLongue
code:
1
2
3
4
5
6
7
8
9
10
11
12
Counter = Mid(BarcodeStr, Len(BarcodeStr) - 2, 3)
Header = Mid(BarcodeStr, 1, Len(BarcodeStr) - 3)
Counter = CInt(Counter)
        
If Counter > 99 Then
  Counter = Counter + Y
  Counter = CStr(Counter)
Else
  Counter = Counter + Y
  Counter = 0 + CStr(Counter)
End If
BarcodeStr = Header + Counter

Wegens verhuizing te koop gevraagd: Sociaal leven in omgeving Arnhem


  • traviandus
  • Registratie: Februari 2001
  • Laatst online: 25-03-2025

traviandus

vague

Op maandag 22 oktober 2001 10:56 schreef Enigma69 het volgende:
Ik heb nu zelf een functie geschreven die het voor elkaar zou moeten krijgen, maar er gaat toch iets fout. Ik ben een beetje een newbie op VB, dus niet zeuren als de fout iets heel simpels blijkt te zijn :)
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Bar = Split(BarcodeStr, "")
Upper = UBound(Bar)
Interupted = False

For XX = 0 To Upper
  If (IsNumeric(Bar(Upper - XX)) And !Interupted) Then
    Counter = Bar(Upper - XX) + Counter
  Else
    Interupted = True
    Header = Bar(Upper - XX) + Header
  End If
Next XX

Counter = Counter + X
BarcodeStr = Header + Counter

De functie Split() split niet, de Array bar bevat 1 element (de hele input string)
Zo te zien ben je met een barcode programma bezig. Er zijn al een aantal van die progjes, zoals btool ;) ( www.dutrieux.nl)
Pagina: 1