Laden...

String splitten, aber besonders!

Erstellt von freako32 vor 15 Jahren Letzter Beitrag vor 15 Jahren 1.723 Views
F
freako32 Themenstarter:in
26 Beiträge seit 2008
vor 15 Jahren
String splitten, aber besonders!

Hallo zusammen,

ich möchte einen String splitten anhand eines '+'.
Zum Beispiel: VKG+03+107436557+5++07++++00' aus einer Edifact Datei.

Das besondere an edifact dateien ist allerdings, dass in einem Feld (das was zwischen zwei plussen ist) auch ein + stehen kann wenn ein ? fragezeichen davor steht.
Wenn ich jetzt ("VKG+03+107436557+5++07++++00'").Split(new string[] {"+"}) machen würde, ginge das ja mit dem sonderfall nicht. wie kann ich das fragezeichen beachten.
wenn ein fragezeichen vor einem doppelpunkt steht, soll alles genau behandelt werden.

mfg
freako

B
196 Beiträge seit 2007
vor 15 Jahren

Dafür würde ich RegEx empfehlen.
(siehe [Artikel] Regex-Tutorial)

your fragile folded wings
are just tired from the pure blue sky
you dont have to force your smiles for anyone
its okay to smile...for yourself

F
freako32 Themenstarter:in
26 Beiträge seit 2008
vor 15 Jahren

mh wusste gar nich dass man anhand von regex splitten kann, danke für den tipp.

aber was mir noch kopfzerbrechen macht, ist der regex ansich.

string[] ergebnis = System.Text.RegularExpressions.Regex.Split("VKG+03+10743?+6557+5++07++++00'",@"[^\?]\+");

gibt bei mir: VK, 0, 10743?+655, <leer>, +0, <leer>, +00

bin leider auch nich so der experte mit regulären ausdrücken

946 Beiträge seit 2008
vor 15 Jahren

Hallo. Also mit RexEx geht das ganz sicher.

Mache aber mal genauere Angaben. Möchtest du im string :::{style="color: darkred;"}&quot;A+B++C+++D?+E&quot;){darkred} nur :::{style="color: darkred;"}&quot;A&quot;){darkred}, :::{style="color: darkred;"}&quot;B&quot;){darkred}, :::{style="color: darkred;"}&quot;C&quot;){darkred} und :::{style="color: darkred;"}&quot;D?+E&quot;){darkred} erhalten oder auch die (:::

Noch ein Tipp zum Herausfinden des Pattern: On-the-fly Regex-Tester: Regex-Lab

mfg
SeeQuark

F
freako32 Themenstarter:in
26 Beiträge seit 2008
vor 15 Jahren

Hi, danke schonmal für deine Hilfe SeeQuark.

Aus dem String "A+BC+D?+E" möchte ich nur "A", "B", "C" und "D?+E" rausholen. Das Pattern von dir zerlegt alles in einzelne Buchstaben. (fast)

946 Beiträge seit 2008
vor 15 Jahren

Das war implizit versteckt mit meinem "die Matches durchgehen".

foreach (Match match in Regex.Matches("A+B++C+++D?+E", @"(\?\+|[^+])+"))
    MessageBox.Show(match.Value);

Funktioniert bei mir auf jeden Fall.

mfg
SeeQuark

F
freako32 Themenstarter:in
26 Beiträge seit 2008
vor 15 Jahren

und das hier ?

foreach(string feld in System.Text.RegularExpressions.Regex.Split("VKG+03+10743?+6557+5++07++++00'", @"(\?\+|[^+])+"))
    MessageBox.Show(feld);
946 Beiträge seit 2008
vor 15 Jahren

... geht nicht.

Schau dir mal meine RegEx-Funktion an.

Imho ist das einfacher als die Split-Methode.

mfg
SeeQuark

F
freako32 Themenstarter:in
26 Beiträge seit 2008
vor 15 Jahren

hm ja stimmt schon, aber die leeren felder z.B. wie bei

A+B+CDE?+F

(zwischen C und D und E) überspringt er...
das + durch n stern im pattern ersetzen bringts leider auch nicht, dann macht er zwischen jedem ein leeres feld.

B
196 Beiträge seit 2007
vor 15 Jahren

Der passende Regex für dich (zum splitten) müsste lauten:

(?<=[^?])[+]

your fragile folded wings
are just tired from the pure blue sky
you dont have to force your smiles for anyone
its okay to smile...for yourself