String-Zerlegung

notausgang

Grünschnabel
Hallo zusammen
ich möchte folgenden String zerlegen:

"test1, test2","tesst",2334,"testxx"

das ergebnis sollte schlussendlich in einem Array stehen
arr(0) = "test1, test2"
arr(1) = "tesst"
arr(2) = 2334
arr(3) = "testxx"

die Schwierigkeit die ich habe ist, dass wenn ich die split funktion verwende und nach dem Komma trenne wird der erste String ("test1, test2") auch getrennt welcher jedoch den Hochkommas zu urteilen eigentlich zusammen bleiben müsste!
wenn ich nach dem "," trenne wird die Zahl nicht herausgetrennt, da sie nicht in Hochkommas steht!
wie kann ich dieses Problem lösen?!
Vielen Dank für eure Hilfe
Gruss
 
Für solche Fälle solltest du dir eine eigene Funktion schreiben, die jedes Zeichen durchläuft. Wenn ein "-Zeichen gefunden wird, muss die Position des nächsten "-Zeichens gefunden werden, ansonsten nur die Position des nächsten Kommas.

Gruß
PhoenixLoe
 
Hallo,

ich werf einfach mal das Stichwort „Reguläre Ausdrücke“ in den Raum. Und verzieh mich im Anschluss auch gleich wieder, weil ich keine Ahnung hab, wie man diese in .NET verwendet ;) Beim Erstellen des Ausdrucks könnte ich aber behilflich sein, wenn du dich dafür entscheiden solltest.

Grüße,
Matthias
 
Alles viel zu kompliziert. Die Split-Funktion kann ein String-Array annehmen.

String.Split (String[], StringSplitOptions)

Was liegt also näher, als nach "," und nach " zu splitten. Geschichte erledigt. Eventuell noch leere Array-Items entfernen.
 
@ Norbert Eder

Da gibt's nur ein kleines Problem. Wenn du so splittest, wird auch der erste Ausdruck "test1,test2" auseinandergerissen und in zwei Teile zerlegt. Und genau das ist es ja, was nicht erwünscht ist!

Gruß
PhoenixLoe
 
Sagt wer?
Code:
string strTest = "\"test1, test2\",\"tesst\",2334,\"testxx\"";
string[] strSplitParts = new string[] { "\",", ",\"", "\",\"", "\"" };
string[] splitted = strTest.Split(strSplitParts, StringSplitOptions.RemoveEmptyEntries);

foreach (string s in splitted)
    Console.WriteLine(s);
Console.Read();
Ausgabe:
Code:
test1, test2
tesst
2334
testxx
 
hab's jetzt mit folgender Funktion gelöst...
Code:
    Function zerlegen(ByVal line As String)
        Dim i As Integer
        Dim anfuhrungszeichen As Boolean
        Dim temp, datname As String
        For i = 0 To line.Length - 1
            If line(i) = Chr(34) And anfuhrungszeichen = False Then
                anfuhrungszeichen = True
            ElseIf line(i) = Chr(34) And anfuhrungszeichen = True Then
                anfuhrungszeichen = False
            ElseIf line(i) = "," And anfuhrungszeichen = False Then
                datname = datname + temp + ";"
                temp = ""
            Else
                temp = temp + line(i)
            End If
        Next
        datname = datname + temp
        Return datname
    End Function
es trennt schliesslich die Teile mit einem Semikolon ab.
Somit kann ich dies dann leicht weiterverarbeiten.
Vielen Dank für eure Bemühungen
Gruss
 

Neue Beiträge

Zurück