Avatar billede mbl Juniormester
20. august 2003 - 20:33 Der er 10 kommentarer og
1 løsning

Opdele en tekst string

Hvordan kan dele en tekst string op i eks. 3 dele, jeg har følgende tekst string

Jeg har denne:
042IC-223-TE02m    18-08-2003 Kl.08:37:43      Nedre


Det skal deles:
1: 042IC-223-TE02m
2: 18-08-2003 Kl.08:37:43
3: Nedre
Avatar billede simonvalter Praktikant
20. august 2003 - 20:44 #1
nu har jeg ikke rodet med visual basic før .. så det er mest et skud.

MyArray() = Split(Text, " ")

hvor text er din string og " " er splitter char
Avatar billede Slettet bruger
20. august 2003 - 21:01 #2
loadet>> Der er desværre ingen split i VB :-(
mbl>> Hvis der altid er mellemrum mellem dine data så kan du bruge
Position = Instr(streng," ") til at finde positionen af det første mellemrum og så bruge Left eller Mid til at hente ud med, her så str1=mid(streng, 1, Position) og så fremdeles.
Avatar billede Slettet bruger
20. august 2003 - 21:02 #3
Ja og jeg ser nu det ikke duer da der er et mellemrum i dato/klokkeslet men hvis der så er 2 mellemrummer kan du gøre det samme Position = Instr(streng,"  ") men det skal være noget så man entydigt kan identificere.
Avatar billede simonvalter Praktikant
20. august 2003 - 21:07 #4
ok .... men et opslag på google giver en hel del hits på det .. det bliver bla brugt her
http://www.udvikleren.dk/article.php?aid=109&techid=4

men der er måske noget jeg har misforstået ?
Avatar billede simonvalter Praktikant
20. august 2003 - 21:11 #5
og check feks det accepterede svar her
http://www.experts-exchange.com/Programming/Programming_Languages/Visual_Basic/Q_20697962.html

men .. der er måske forskellige visual basic . eller blander folk det og vbscript sammen ?
Avatar billede Slettet bruger
20. august 2003 - 21:21 #6
Loadet>> En undskyldning til dig fra mig, du har jo ret og vil i fremtiden have sparet mig for en masse arbejde :-)
Da jeg hørte om funktionen i VBScript søgte jeg på den i VB hjælpen men da jeg ikke kunne finde den gik jeg ud fra at den ikke var med i VB, jeg overvejede egentlig ikke at teste det :-(

mbl>> Du kan godt bruge loadet's svar, men som nævnt før så skal der nok splittes på 2 mellemrum istedet for 1 :-)
Avatar billede simonvalter Praktikant
20. august 2003 - 21:45 #7
nu ved jeg ikke hvor mange spaces du har imellem dine strings men jeg kan få det til at der i det her tilfælde er 4 fra første ord til andet og  6 til næste ..
det skal helst være konstant ..
hvis det er så brug feks 4 spaces i splitter char og kald trim() på strings.
det skulle fjerne whitespaces hvis jeg har læst rigtigt... men det er lidt svært at se uden at man selv sidder med det konkrete problem.
jeg ved ikke helt hvordan den vil reagere hvis du bruger 2 spaces som splitter .. og der er 4 spaces .. opretter den så en tom entry i array ?
Avatar billede Slettet bruger
20. august 2003 - 21:48 #8
Trim() fjerner blanke før og efter så den er god nok.
Avatar billede sjh Nybegynder
20. august 2003 - 22:02 #9
'------------------------ Form1 ------------------------
Option Explicit

Private Sub Form_Load()
Dim intCnt As Integer
Dim strOut As String
Dim strSplit As String
Dim varSplit As Variant
Dim varElement As Variant

  strSplit = "042IC-223-TE02m    18-08-2003 Kl.08:37:43    Nedre"
  varSplit = Split(strSplit, "  ")

  For Each varElement In varSplit

    strSplit = Trim$(varElement)
    If strSplit <> "" Then
      intCnt = intCnt + 1
      strOut = strOut & (intCnt & ": " & strSplit) & vbCrLf
    End If

  Next

  MsgBox strOut
End Sub
'------------------------ Form1 ------------------------


'----------------- Form1 eller Module1 -----------------
'Option Explicit
'
' Split for vb4/vb5
Public Function Split(Expression As String, Optional Delimiter As String = " ", Optional Compare As VbCompareMethod = vbBinaryCompare)
Dim c As Long
Dim iLen As Long
Dim iCur As Long
Dim iLast As Long
Dim ResultSplit() As String
  iLen = Len(Delimiter)

  If iLen Then
    iCur = InStr(Expression, Delimiter)
    Do While iCur
      iCur = InStr(iCur + iLen, Expression, Delimiter, Compare)
      c = c + 1
    Loop

    ReDim Preserve ResultSplit(0 To c) As String
    c = 0: iLast = 1
    iCur = InStr(1, Expression, Delimiter, Compare)

    Do While iCur
      ResultSplit(c) = Mid$(Expression, iLast, iCur - iLast)
      iLast = iCur + iLen
      iCur = InStr(iLast, Expression, Delimiter, Compare)
      c = c + 1
    Loop
     
    ResultSplit(c) = Mid$(Expression, iLast)
    Split = ResultSplit

      Else

    ReDim ResultSplit(0 To 0) As String
    ResultSplit(0) = Expression
    Split = ResultSplit
  End If
End Function
'----------------- Form1 eller Module1 -----------------
Avatar billede mbl Juniormester
20. august 2003 - 23:19 #10
Tak til alle for deres deltagelse, en særlig tak til sjh idet der var dele af dit eks. som jeg kunne bruge med lidt tilpasning.
Avatar billede sjh Nybegynder
20. august 2003 - 23:21 #11
selv tak
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