Avatar billede el_coyote Nybegynder
28. januar 2003 - 15:54 Der er 12 kommentarer og
1 løsning

string af kommasepererede værdier.

jeg har en string der er hentet ind fra en kommasepereret tekstfil. heri kan der forekomme adresser med formatet """adresse1, adresse2"""
kommaet i adressen er så et problem når jeg trækker de enkelte dele ud.
Hvordan kan jeg lave så de værdier der står inden for de to """ bliver opfattet som en enkelt værdi?
Jeg bruger næmlig feltet efter komma nr 15 til en speciel funktion, og det er jo ikke smart at positionen på denne værdi ændrer sig.
Avatar billede martin_moth Mester
28. januar 2003 - 15:56 #1
"Hvordan kan jeg lave så de værdier der står inden for de to """ bliver opfattet som en enkelt værdi?"

Huh?

Vil du læse adresse1, adresse2, adresse3, ... ind i at array af strings - eller?
Avatar billede martin_moth Mester
28. januar 2003 - 16:01 #2
Ellers kan du bruge funktionen Split(), og vælge at din splitstring skal være """.
Så får du et array af strings, hver string er det der står mellem to """

Mht. split: http://msdn.microsoft.com/library/default.asp?url=/library/en-us/vbenlr98/html/vafctSplit.asp
Avatar billede martin_moth Mester
28. januar 2003 - 16:11 #3
Her lidt kode, der deler en string op ved hvert """ og smider de enkelte delstrenge ind i en listbox ved navn List1:

  Dim MinString As String
  Dim MitArray() As String
  Dim i As Integer
  MinString = Chr(34) & Chr(34) & Chr(34) & "adresse1, adresse2" _
              & Chr(34) & Chr(34) & Chr(34) & "adresse3" _
              & Chr(34) & Chr(34) & Chr(34) & "adresse4" _
              & Chr(34) & Chr(34) & Chr(34)
  MsgBox "MinString indeholder " & MinString
  MitArray = Split(MinString, Chr(34) & Chr(34) & Chr(34))
  For i = LBound(MitArray) To UBound(MitArray)
    List1.AddItem MitArray(i)
  Next i

Prøv at lav en form med en listbox, og kør koden, og se om det er det du vil...
Avatar billede el_coyote Nybegynder
28. januar 2003 - 16:32 #4
jeg bruger iforvejen split() til at opdele string'en ved kommaer (kommasepereret tekstfil) det er derfor jeg skal "hoppe over" et eventuelt komma i adressefeltet, der er omsluttet af """.
Avatar billede el_coyote Nybegynder
28. januar 2003 - 16:34 #5
hver linie i tekstfilen bliver læst ind som en string, der igen bliver lagt i et array, opdelt ved komma'er.
jeg skal have funktionen til at ignorere kommaer der er omkranset af """.
Avatar billede martin_moth Mester
28. januar 2003 - 17:34 #6
Prøv at vis hvordan din fil ser ud...
Avatar billede el_coyote Nybegynder
28. januar 2003 - 18:22 #7
295,"Lounge - Jørgen Vestergaard","""Østerbrogade 18 B, Design11""",8000,"Århus C",,,,,,Designers,,86120822,,,28-11-02,,,,100251,,1,0,,

et eksembel på hvordan string'en ser ud (fiktiv person). Adressen er omkabslet af """ og indeholder et komma, der skal ignoreres når man split()'er ved komma'er.
Avatar billede ocp Nybegynder
28. januar 2003 - 20:25 #8
Måske kunne ODBC text-driveren benyttes? Den er lavet til at håndtere det format.
Avatar billede el_coyote Nybegynder
28. januar 2003 - 20:29 #9
såvidt jeg kan forstå skal det installeres først, og det er ikke acceptabelt
Avatar billede ocp Nybegynder
28. januar 2003 - 20:55 #10
Værsågod - det er ikke helt gennemtestet men det virker med dit eksempel:

Sub Test()

    Dim sInp As String
    sInp = "295,""Lounge - Jørgen Vestergaard"",""""""""Østerbrogade 18 B, Design11"""""""",8000,""Århus C"",,,,,,Designers,,86120822,,,28-11-02,,,,100251,,1,0,,"
   
    Dim rs As New Recordset
    Dim cn As New Connection
    Dim t As Long
    Dim bFieldStarted As Boolean
    Dim bCommaFound As Boolean
    Dim bTextField As Boolean
    Dim sLastChar As String * 1
    Dim sThisChar As String * 1
    Dim sNextChar As String * 1
    Dim bFieldCompleted As Boolean
    Dim sField As String

    sLastChar = ""
    bCommaFound = True
    bFieldStarted = True
    For t = 1 To Len(sInp)
        sThisChar = Mid$(sInp, t, 1)
        If t < Len(sInp) Then
            sNextChar = Mid$(sInp, t + 1, 1)
        Else
            sNextChar = """"
        End If
        Select Case sThisChar
            Case """"
                If sNextChar = "," Then
                    bCommaFound = False
                    bFieldCompleted = True
                    bFieldStarted = False
                End If
                bTextField = bCommaFound
            Case ","
                bCommaFound = Not bTextField
                If bFieldStarted Then
                    bFieldCompleted = bCommaFound
                    If bTextField Then
                        sField = sField & sThisChar
                    End If
                Else
                    bFieldStarted = True
                End If
            Case Else
                If bCommaFound Or bTextField Then
                    sField = sField & sThisChar
                End If
        End Select
        If bFieldCompleted Then
            Debug.Print sField
            sField = ""
            bFieldCompleted = False
        End If
        sLastChar = sThisChar
    Next

End Sub
Avatar billede el_coyote Nybegynder
28. januar 2003 - 21:08 #11
ja, ser ud til at kunne gøre det, tnx
Avatar billede martin_moth Mester
29. januar 2003 - 09:31 #12
Aaargh - jeg skrev et kilometerlangt svar i går aftes - hvor er det blevet af?
Avatar billede el_coyote Nybegynder
29. januar 2003 - 11:50 #13
der var et tidspunkt hvor eksperten.dk failede... var nok der så :)
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

Seneste spørgsmål Seneste aktivitet
I går 10:21 Ny printer, men hvilken Af mort1 i Printere
13/0819:41 USB på Linux Af Uvanga i Linux
12/0818:26 Hvilken type mus Af mort1 i PC
11/0813:21 ms Forms Af leahcim i Andet software
10/0821:30 Blokeret på Snapchat? Af LineP i Chat & Messaging