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"
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.