Avatar billede kahs Nybegynder
07. juli 2004 - 09:35 Der 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"

Hvrodan kan jeg løse dette?

-KAHS
Avatar billede kahs Nybegynder
07. juli 2004 - 10:02 #1
Jeg har løst problemet med ,
Men har stadigt problemer med &

...
Dim records() As String = Split(Replace(indhold,""",""","§"),"§")
Avatar billede arne_v Ekspert
07. juli 2004 - 10:31 #2
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
Avatar billede kahs Nybegynder
07. juli 2004 - 10:32 #3
... kan man evt. sætte en type på streamreader?
Jeg læser det garanteret ind i HTML-format og derfor vil jeg også få problemer med < og > mm.
Avatar billede kahs Nybegynder
09. juli 2004 - 11:27 #4
Problemet er løst!
Problemet var ikke indlæsningen af filen, men behandlingen bagefter - så det havde ikke noget af gøre med streamreader
Avatar billede kahs Nybegynder
09. juli 2004 - 11:27 #5
lukker
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