07. juli 2004 - 09:35Der er
4 kommentarer og 1 løsning
Problemer med , og & i txt-fil
Hej Eksperter
Jeg har en tekstfil indeholdende en masse sætninger i formatet: "dette er en","kommasepareret txtfil","som skal","splittes op" ... Jeg skal så ha lagt disse ord ind i variabler:
eks: Dim indhold As String = fr.ReadLine Dim records() As String = Split(indhold, """,""") Dim ord1 = records(0).Substring(1) Dim ord2 = records(1) ...
Mit problem er at min metode fejler hvis der er et komma eller et & i sætningerne, eks:
"dette er, en kommasepareret txtfil","& den fejler min metode","æv"
Nu forstår jeg slet ikke hvad problemet er med den &.
Men her er et lille stykke kode (oversat fra C#) som måske kan give lidt gode ideer:
Imports System Imports System.Text Imports System.Text.RegularExpressions
Class MainClass
Public Shared Sub replaceandsplit(ByVal s As String) Dim s2 As String() = s.Replace("""", "").Split(",".ToCharArray) Dim i As Integer For i = 0 To (s2.Length - 1) Console.WriteLine(" " + s2(i)) Next End Sub
Public Shared Sub splitandreplace(ByVal s As String) Dim s2 As String() = s.Split(",".ToCharArray) Dim i As Integer For i = 0 To (s2.Length - 1) Console.WriteLine(" " + s2(i).Replace("""", "")) Next End Sub
Public Shared Sub manualparse(ByVal s As String) Dim sb As StringBuilder = New StringBuilder Dim ix As Integer = 0 Dim inq As Boolean = False While ix < s.Length Select s.Chars(ix) Case """" If inq Then If ((ix + 1) < s.Length) AndAlso (s.Chars(ix + 1) = """") Then sb.Append(s.Chars(ix)) sb.Append(s.Chars(ix)) ix = ix + 1 Else inq = False End If Else inq = True End If Case "," If inq Then sb.Append(s.Chars(ix)) Else Console.WriteLine(" " + sb.ToString) sb = New StringBuilder End If Case Else sb.Append(s.Chars(ix)) End Select ix = ix + 1 End While If sb.Length > 0 Then Console.WriteLine(" " + sb.ToString) End If End Sub
Public Shared Sub regexparse(ByVal s As String) Dim res As MatchCollection = Regex.Matches(s, "([0-9]+)|([""]{1}(([^""])|(""""))*[""]{1})") Dim i As Integer For i = 0 To (res.Count - 1) Dim s2 As String = res(i).Value If s2.Chars(0) = """" Then Console.WriteLine(" " + s2.Substring(1, s2.Length - 2)) Else Console.WriteLine(" " + s2) End If Next End Sub
Private Shared Sub test(ByVal s As String) Console.WriteLine(s) Console.WriteLine("replace and split: ") replaceandsplit(s) Console.WriteLine("split and replace: ") splitandreplace(s) Console.WriteLine("manual parse: ") manualparse(s) Console.WriteLine("regex parse: ") regexparse(s) End Sub
Public Shared Sub Main(ByVal args As String()) test("123,""abc"",""""""quoted"""""",""partly """"quoted"""" !"",""a,b,c""") End Sub End Class
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.