Avatar billede Nicolai Nybegynder
29. december 2003 - 12:46 Der er 12 kommentarer og
2 løsninger

Trække info ud fra tekst streng!

Hejsa.

Jeg har behov for at opdele info fra en tekststreng i flere forskellige nye strenge.

Eksempel:

En bruger taster følgende streng i en tekstboks (lad os kalde den MySearchString(uden "): "N:Otto;Z:2000;S:295062552123"

Jeg har nu brug for at overføre det indtastede til tre nye felter. I feltet vi kan kalde MyName skal der stå "Otto", i feltet MyZipCode skal der stå 2000 og i feltet MySerialNo skal der stå 295062552123.

How to do??... I'm lost! :o)

/Takker...
Avatar billede Nicolai Nybegynder
29. december 2003 - 12:55 #1
Det skal lige siges at alle værdier ikke nødvendigvis behøver at være indtastet. Derfor kan MySearchString sagtens se sådan ud: "N:Otto" eller "S:295062552123" eller "S:295062552123;Z;2000" osv...
Avatar billede kabbak Professor
29. december 2003 - 13:04 #2
A = Replace("N:Otto;Z:2000;S:295062552123", ":", ";")
b = Split(A, ";")
For C = 0 To UBound(b)
If b(C) = "N" Then
MyName = b(C + 1)
End If
If b(C) = "Z" Then
MyZipCode = b(C + 1)
End If
If b(C) = "S" Then
MySerialNo = b(C + 1)
End If
Next C
Avatar billede kabbak Professor
29. december 2003 - 13:16 #3
Med variabel således

MySearchString = "Z:2000;S:295062552123"
A = Replace(MySearchString, ":", ";")
Avatar billede martin_moth Mester
29. december 2003 - 15:57 #4
Hvorfor Replace - kan du ikke bare bruge

b = Split(A, ":")
Avatar billede kabbak Professor
29. december 2003 - 17:02 #5
fordi der er både ";" og ":"
Avatar billede sjh Nybegynder
29. december 2003 - 18:05 #6
Sådan, så kan det næsten skrives som man vil..

'------------------------------ Form1 ------------------------------
Option Explicit

Public Function SplitString(ByVal strIn As String) As Variant
Dim i As Long
Dim strOne As String
Dim intSel As Integer
Dim adding As Boolean
Dim strLarst As String
Dim arrOut(2) As String
  For i = 1 To Len(strIn)
    strOne = Mid$(strIn, i, 1)
    Select Case strOne
          Case ":", ";"
            adding = IIf(adding, False, True)
            Select Case strLarst 'UCase$(strLarst)
                  Case "N": intSel = 0
                  Case "Z": intSel = 1
                  Case "S": intSel = 2
                  Case Else: adding = False
            End Select
          Case Else
            If adding Then
              arrOut(intSel) = (arrOut(intSel) & strOne)
            End If
    End Select
    strLarst = strOne
  Next
SplitString = arrOut()
End Function

Private Sub Form_Load()
Dim MyName As String, _
    MyZipCode As String, _
    MySerialNo As String, _
    MySearchString As String

  MySearchString = ";;:g:;S;295062552123:;;Z:2000;Hej bøvs;N;Otto::Ubs::"
  'MySearchString = "N:Otto;Z:2000;S:295062552123"
  'MySearchString = "N;Otto;Z:2000;S;295062552123"
  'MySearchString = "N;Otto"
  'MySearchString = "Z:2000"
  'MySearchString = "S;295062552123"

'Her opdeles MySearchString.
Dim varString As Variant
  varString = SplitString(MySearchString)

'Her kommer de ud.
  MyName = varString(0)    'Name er altid varString(0)
  MyZipCode = varString(1)  'ZipCode er altid varString(1)
  MySerialNo = varString(2) 'SerialNo er altid varString(2)

'Lige for at teste :-)
  Me.AutoRedraw = True
  Print MyName
  Print MyZipCode
  Print MySerialNo
End Sub
'------------------------------ Form1 ------------------------------
Avatar billede sjh Nybegynder
29. december 2003 - 19:37 #7
eller den her string.. den kan ikke sådan lige opdele med...

MySearchString = ";;:g:;S;295062;;Z:2:Z:00;Z:0;Hej bøvs;N;Ot:N;to::Ubs:S;552123"

A = Replace(MySearchString, ":", ";")
b = Split(A, ";")
For C = 0 To UBound(b)
.....
......

:D
Avatar billede kabbak Professor
29. december 2003 - 21:38 #8
nej, men nicolailund skriver jo at MySearchString kan indeholde bestemte ting, så hvorfor gør det sværer end det er. ;-p
Avatar billede sjh Nybegynder
29. december 2003 - 21:41 #9
Det var bare for at brugeren ikke kunne skrive så meget forkert :P
Avatar billede sjh Nybegynder
29. december 2003 - 21:43 #10
og så virker min kode både i vb5 og vb6 :D
Avatar billede Nicolai Nybegynder
30. december 2003 - 09:35 #11
Kabbak - du mangler lige at give et svar istedet for dine kommentarer... Din kode virker perfekt..Den er meget simpel og virker perfekt i mit lille program.

Også tak til dig sjh - din kode virker som om at den er lidt bedre til at håndtere fejlindtastninger fra brugeren. Den vil jeg lige lege lidt med. :o)

Tusind tak for hjælpen begge to - kabbak og sjh. Og med fare for at folk kommer op at slås. vil jeg tillade mig at dele point her. Kabbak du giver en lynhurtig løsning som jeg havde implemteret 15 minutter efter jeg stillede spørgsmålet. Sjh, du har tilsyneladende givet mig en løsning der sikrer at brugeren kan indtaste mange mærkelige ting, og stadig få en brugbart søgeresultat ud...

Tak til begge....
Avatar billede kabbak Professor
30. december 2003 - 10:47 #12
et svar ;-))
Avatar billede kabbak Professor
30. december 2003 - 14:26 #13
tak for point. ;-D
Avatar billede sjh Nybegynder
30. december 2003 - 20:10 #14
Na.. op at slås kommer vi vel ikke, men vi har bare vær vores måde at gøre tingene på :D

Men tag ikke fejl af min koden, selvom den fylder lidt.. VB6 -> Replace() er faktisk ikke så hurtig endda, se her:

http://www.xbeat.net/vbspeed/c_Replace.htm
http://www.xbeat.net/vbspeed/cod_Replace09.htm

og tak for point ;)
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