28. januar 2003 - 15:54Der 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.
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 """
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 """.
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 """.
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.
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
der var et tidspunkt hvor eksperten.dk failede... var nok der så :)
Synes godt om
Ny brugerNybegynder
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.