String zerlegen
-
geri schrieb:
warum geht das nicht?
int counter = 0; ArrayList Numbers = new ArrayList(); MatchCollection matchCollection; Regex regex = new Regex(@"(.+);(\d+);(.+)"); matchCollection = regex.Matches(textBox_Receivers.Text); foreach (Match m in matchCollection) { Numbers.Add(m.Value); MessageBox.Show(Numbers[counter].ToString()); counter++; }
input: Gerald; 06761134421; Sabine
und sollte machen:
Array0 = Gerald
Array1 = 06761134421
Array2 = Sabinecu
check mal das:
int counter = 0; ArrayList Numbers = new ArrayList(); MatchCollection matchCollectionNamen; MatchCollection matchCollectionNummern; Regex regexNamen = new Regex(@"[a-zA-Z]+"); // richtige Namen Regex regexNummern = new Regex(@"[0-9]+"); // Nummern matchCollectionNamen = regexNamen.Matches(textBox_Receivers.Text); matchCollectionNummern = regexNummern.Matches(textBox_Receivers.Text); foreach (Match m in matchCollectionNummern) { Numbers.Add(m.Value); MessageBox.Show(Numbers[counter].ToString()); counter++; }
-
sed und awk Profitools unter UNIX/LINUX
Habe mich anderen Syntax gehalten und verlasse mich nicht unbedingt hier auf die
MSDN da es bei mir bisher gefunzt hat.
Aber is klar vor kleinen Fhlern bin auch ich nicht sicher deswegen teste ich halt auch
an kleinen BeispielCOde und debugge nathürlich.
-
geri schrieb:
warum geht das nicht?
int counter = 0; ArrayList Numbers = new ArrayList(); MatchCollection matchCollection; Regex regex = new Regex(@"(.+);(\d+);(.+)"); matchCollection = regex.Matches(textBox_Receivers.Text); foreach (Match m in matchCollection) { Numbers.Add(m.Value); MessageBox.Show(Numbers[counter].ToString()); counter++; }
input: Gerald; 06761134421; Sabine
und sollte machen:
Array0 = Gerald
Array1 = 06761134421
Array2 = Sabinecu
hab dies nochmal geändert in:
int counter = 0; ArrayList Numbers = new ArrayList(); MatchCollection matchCollection; Regex regex = new Regex(@".+;[0-9]+;.+"); matchCollection = regex.Matches(textBox_Receivers.Text); foreach (Match m in matchCollection) { Numbers.Add(m.Value); MessageBox.Show(Numbers[counter].ToString()); counter++; }
sollte jetzt eigentlich gehen
probier dies aber auch aus
-
Aber nun, habe deinen Code nur geringfügig auf meine ConsoleApplication angepasst:
int counter = 0; ArrayList Numbers = new ArrayList(); MatchCollection matchCollection; Regex regex = new Regex(@".+;[0-9]+;.+"); matchCollection = regex.Matches("Gerald;06789000;Sabine"); foreach (Match m in matchCollection) { Numbers.Add(m.Value); String text = Numbers[counter].ToString(); Console.WriteLine(text); counter++; }
mühsam ernährt sich Eichhörnchen
-
bei mir gehts so noch nicht...
ich muss schau das es egal ist ob der user nun
matchCollection = regex.Matches("Gerald; 06789000; Sabine");
oder
matchCollection = regex.Matches("Gerald;06789000;Sabine");
eingibt...cu+thx
-
für mich ins Bettchen zu gehen! Morgen ist wieder ein langer Tag also im letzten Posting ist zwar besgter Ausdruck auf den kompletten String angepasst jetzt findet er auch was aber ich habe die Vermuttung das es nathühlich nicht das ist was Du Dir vorgestellt hast.
Aber schliesslich habe ich nathürlich auch nicht die Einsicht in deine Projekt wie Du bin ja auch nicht direkt Vor Ort.
Ich sitze hier in Erfurt vor meiner Kiste und Du Gott weis wo.
Ich hoffe aber es konnte Dir alles wenigstens nen klein wenig helfen?also Gute Nacht erstma
ich denke ich bin morgen auch wieder im Forum, ist nathürlich auch abhängig von meiner Weiterbildung. Aber ansonsten schau ich schonmal einmal in der Woche hier rein. hier gibts immer mal was neues auch wenn vielmals auf irgend nen vorherugen Beitrag verlinkt wird.also den
-
meine lösung schaut nun so aus:
int counter = 0; ArrayList Numbers = new ArrayList(); Regex regex = new Regex(@"(.+);(.+);(.+)"); Match matchit = regex.Match(textBox_Receivers.Text); for (int i = 0; i < matchit.Groups.Count; i++) { Numbers.Add(matchit.Groups[i].Value); MessageBox.Show(Numbers[i].ToString().Trim()); }
ist nun unabhängig ob man ein leerzeichen nach dem ; oder nicht....
jedoch ist die erste ausgabe der gesamte string....komisch
cu
-
geri schrieb:
bei mir gehts so noch nicht...
ich muss schau das es egal ist ob der user nun
matchCollection = regex.Matches("Gerald; 06789000; Sabine");
oder
matchCollection = regex.Matches("Gerald;06789000;Sabine");
eingibt...cu+thx
also was mir jetzt noch auffiel da is nen Leezeichen im String das kann man auch
berücksichtigen im Regex
-
geri schrieb:
bei mir gehts so noch nicht...
ich muss schau das es egal ist ob der user nun
matchCollection = regex.Matches("Gerald; 06789000; Sabine");
oder
matchCollection = regex.Matches("Gerald;06789000;Sabine");
eingibt...cu+thx
geht so:
matchCollection = regex.Matches(@"[A-Za-z ]+;[ 0-9]+;[A-Za-z ]+");
jetzt isses aber wirklich Zeit fuer mich ....
-
nen Leerzeichen is zwar nen Whitespace aber ich hoffe es fällt dir an der
Regex - Instanzierung auf guck mal genau den Konstruktoraufruf an!
in allen 3 Möglichkeiten is jetzt auch nen Leerzeichen beruecksichtigtso ich zieh mir jetzt die Bettdecke drüber cih habe morgen sonst die Tastatur im Gesicht!
na denn
-
geri schrieb:
meine lösung schaut nun so aus:
int counter = 0; ArrayList Numbers = new ArrayList(); Regex regex = new Regex(@"(.+);(.+);(.+)"); Match matchit = regex.Match(textBox_Receivers.Text); for (int i = 0; i < matchit.Groups.Count; i++) { Numbers.Add(matchit.Groups[i].Value); MessageBox.Show(Numbers[i].ToString().Trim()); }
ist nun unabhängig ob man ein leerzeichen nach dem ; oder nicht....
jedoch ist die erste ausgabe der gesamte string....komisch
cuhi, irgendwas passt hier noch nicht;-( wenn ich 5 oder 6 telefonnummern + namen eingebe dann läuft nicht;-(
also sowas: Gerald, 0650123456; Sabine; Spech; 06761233333cu
-
noch da sclearscreen?;-)
-
geri schrieb:
hi, irgendwas passt hier noch nicht;-( wenn ich 5 oder 6 telefonnummern + namen eingebe dann läuft nicht;-(
also sowas: Gerald, 0650123456; Sabine; Spech; 06761233333cu
Hmm da haben Wir aneinander vorbeigeredet, soweit ich mich erinnere
hast Du einmal gesagt das Du eine Dateneingabe aus einem Eingabefeld erhäst die folgender Art entspricht beziehungsweise ein solches Datenmuster kommt aus diesen Eingabefeld: Gerald, 0650123456; Sabine;Name Semikolon Telefonnummer Semikolon Name <---- hatte gedacht Du muss nur diese 1 Sequenz in deinen Datenstrom suchen
ham na den habe ich auch den Regulären - Ausdruck auch nur so aufgebaut das in diesen Datenstrom auch nur ein Muster gefunden wird! Dieser Fehler lag daran das ich von falschen oder ungenauen Informationen ausgegangen bin!
p.S.: Du müsstest mir also nochmal genauer sagen Welche Information in deinem Datenstrom mehrfach auftreten kann? Weil dann kann ich das Suchmuster entsprechend anpassen!
mfg sclearscreen
-
hi
habs nun so:int counter = 0; ArrayList Numbers = new ArrayList(); MatchCollection matchCollectionNamen; Regex regexNamen = new Regex(@"(?>\w|\d)+"); matchCollectionNamen = regexNamen.Matches(textBox_Receivers.Text); foreach (Match m in matchCollectionNamen) { Numbers.Add(m.Value); MessageBox.Show(Numbers[counter].ToString()); counter++; }
nun muss ich halt noch die ersten 4 stellen der nummern prüfen...und wenn ich einen namen habe, den in eine nummer ersetzen...
cu
-
na gut auch wenn Wir mal vielleicht mal das eine oder andere Missverständniss hatten, so glaube ich das unser Brainstorming Dir reiche Früchte gebracht hat oder?
Dann bin ich wenigstens beruhigt!mfg sclearscreen
P.S.: noch nen schönen Sonntag wünsche ich Dir
-
hi, besten dank,
kannst du mir hier noch den fehler sagen?
mit der normalen for schleife klappt es (ist besser geeignet hier) aber mit foreach nicht, ich würd gerne verstehen warum?!?int counter = 0; ArrayList Receivers = new ArrayList(); MatchCollection matchCollectionReceivers; Regex regex = new Regex(@"(?>\w|\d)+"); matchCollectionReceivers = regex.Matches("Fuxxe; Gerald; 0676123456"); foreach (Match m in matchCollectionReceivers) { Receivers.Add(m.Value); MessageBox.Show(Receivers[counter++].ToString()); } int textBox_Receivers_length_old = 0; counter = 0; foreach (string str in Receivers) { regex = new Regex(@"[(0664),(0676),(0699),(0650),(0660),(0688)][ 0-9]+?"); Match m = regex.Match(str); // Ist es eine Handynummer mit folgendem Format: (@"[(0664),(0676),(0699),(0650),(0660),(0688)][ 0-9]+?"); // dann underlinen if(m.Success) { textBox_Receivers.SelectionStart = textBox_Receivers_length_old; MessageBox.Show(textBox_Receivers.SelectionStart.ToString()); textBox_Receivers.SelectionLength = str.Length; MessageBox.Show(str.Length.ToString()); textBox_Receivers.SelectionFont = new Font("Arial",8,FontStyle.Underline); textBox_Receivers_length_old += str.Length + 2; } else { // Ist Name im DataSet vorhanden, dann underlinen for(int j = 0; j < dataSet.Tables[0].Rows.Count; j++) { if(dataSet.Tables[0].Rows[j].ItemArray[0].ToString() == str.ToString()) { textBox_Receivers.SelectionStart = textBox_Receivers_length_old; MessageBox.Show(textBox_Receivers.SelectionStart.ToString()); textBox_Receivers.SelectionLength = str.Length; MessageBox.Show(textBox_Receivers.SelectionLength.ToString()); textBox_Receivers.SelectionFont = new Font("Arial",8,FontStyle.Underline); textBox_Receivers_length_old += str.Length + 2; // Namen in Handynummern ersetzen Receivers[counter] = dataSet.Tables[0].Rows[j].ItemArray[1].ToString(); // <---- hier der Fehler, Debugger zeigt dann auf foreach } } } counter++; } so klappt es, hmmmmmmmmmmmmmmmmmmmmmmmmmmm???????????????????? int counter = 0; ArrayList Receivers = new ArrayList(); MatchCollection matchCollectionReceivers; Regex regex = new Regex(@"(?>\w|\d)+"); matchCollectionReceivers = regex.Matches(textBox_Receivers.Text); foreach (Match m in matchCollectionReceivers) { Receivers.Add(m.Value); MessageBox.Show(Receivers[counter++].ToString()); } int textBox_Receivers_length_old = 0; counter = 0; for(int i = 0; i < Receivers.Count; i++) { regex = new Regex(@"[(0664),(0676),(0699),(0650),(0660),(0688)][ 0-9]+?"); Match m = regex.Match(Receivers[i].ToString()); // Ist es eine Handynummer mit folgendem Format: (@"[(0664),(0676),(0699),(0650),(0660),(0688)][ 0-9]+?"); // dann underlinen if(m.Success) { textBox_Receivers.SelectionStart = textBox_Receivers_length_old; MessageBox.Show(textBox_Receivers.SelectionStart.ToString()); textBox_Receivers.SelectionLength = Receivers[i].ToString().Length; MessageBox.Show(Receivers[i].ToString().Length.ToString()); textBox_Receivers.SelectionFont = new Font("Arial",8,FontStyle.Underline); textBox_Receivers_length_old += Receivers[i].ToString().Length + 2; } else { // Ist Name im DataSet vorhanden, dann underlinen for(int j = 0; j < dataSet.Tables[0].Rows.Count; j++) { if(dataSet.Tables[0].Rows[j].ItemArray[0].ToString() == Receivers[i].ToString()) { textBox_Receivers.SelectionStart = textBox_Receivers_length_old; MessageBox.Show(textBox_Receivers.SelectionStart.ToString()); textBox_Receivers.SelectionLength = Receivers[i].ToString().Length; MessageBox.Show(textBox_Receivers.SelectionLength.ToString()); textBox_Receivers.SelectionFont = new Font("Arial",8,FontStyle.Underline); textBox_Receivers_length_old += Receivers[i].ToString().Length + 2; // Namen durch Handynummern ersetzen Receivers[i] = dataSet.Tables[0].Rows[j].ItemArray[1].ToString(); } } } }
-
Regex regex = new Regex(@"[(0664),(0676),(0699),(0650),(0660),(0688)][0-9]+?"); Match m = regex.Match("45234234"); if(m.Success) { MessageBox.Show("True"); } else { MessageBox.Show("False"); }
warum kommt hier true? versteh ich gar nicht!
cu
-
geri schrieb:
Regex regex = new Regex(@"[(0664),(0676),(0699),(0650),(0660),(0688)][0-9]+?"); Match m = regex.Match("45234234"); if(m.Success) { MessageBox.Show("True"); } else { MessageBox.Show("False"); }
warum kommt hier true? versteh ich gar nicht!
cuDies geht lag am Regulären Ausdruck
Regex regex = new Regex(@"(0664)|(0676)|(0699)|(0650)|(0660)|(0688)([0-9]+)?"); Match m = regex.Match("45234234"); if(m.Success) { System.Windows.Forms.MessageBox.Show("True"); } else { System.Windows.Forms.MessageBox.Show("False"); }
Bedeuten Der Reguläre Ausdruck deckt eine Auswahl von 6 Möglichen Vorwahlnummern ab die unbedingt so stehen müssen! Alles andere sind unbekannte Telefonnummern!
| bdeute .... das Oder das.... usw.
mfg sclearscreen
-
geri schrieb:
hi, besten dank,
kannst du mir hier noch den fehler sagen?
mit der normalen for schleife klappt es (ist besser geeignet hier) aber mit foreach nicht, ich würd gerne verstehen warum?!?int counter = 0; ArrayList Receivers = new ArrayList(); MatchCollection matchCollectionReceivers; Regex regex = new Regex(@"(?>\w|\d)+"); matchCollectionReceivers = regex.Matches("Fuxxe; Gerald; 0676123456"); foreach (Match m in matchCollectionReceivers) { Receivers.Add(m.Value); MessageBox.Show(Receivers[counter++].ToString()); } int textBox_Receivers_length_old = 0; counter = 0; foreach (string str in Receivers) { regex = new Regex(@"[(0664),(0676),(0699),(0650),(0660),(0688)][ 0-9]+?"); Match m = regex.Match(str); // Ist es eine Handynummer mit folgendem Format: (@"[(0664),(0676),(0699),(0650),(0660),(0688)][ 0-9]+?"); // dann underlinen if(m.Success) { textBox_Receivers.SelectionStart = textBox_Receivers_length_old; MessageBox.Show(textBox_Receivers.SelectionStart.ToString()); textBox_Receivers.SelectionLength = str.Length; MessageBox.Show(str.Length.ToString()); textBox_Receivers.SelectionFont = new Font("Arial",8,FontStyle.Underline); textBox_Receivers_length_old += str.Length + 2; } else { // Ist Name im DataSet vorhanden, dann underlinen for(int j = 0; j < dataSet.Tables[0].Rows.Count; j++) { if(dataSet.Tables[0].Rows[j].ItemArray[0].ToString() == str.ToString()) { textBox_Receivers.SelectionStart = textBox_Receivers_length_old; MessageBox.Show(textBox_Receivers.SelectionStart.ToString()); textBox_Receivers.SelectionLength = str.Length; MessageBox.Show(textBox_Receivers.SelectionLength.ToString()); textBox_Receivers.SelectionFont = new Font("Arial",8,FontStyle.Underline); textBox_Receivers_length_old += str.Length + 2; // Namen in Handynummern ersetzen Receivers[counter] = dataSet.Tables[0].Rows[j].ItemArray[1].ToString(); // <---- hier der Fehler, Debugger zeigt dann auf foreach } } } counter++; }
Wo zählst Du die Variable (Indexvariable) i
hoch wenn Du das nicht machst ist diese undefiniert dann ist klar warums abschmiert!
-
also in dem Beispiel mit der For - Schleife
inkrementierst du ne Variable i dort gehts weil Sie dort auch
ständig korrekt initialisiert/gesetzt/gezählt wirdBei For each - Schleife vermisse ich das inkrementieren besagter Variable
-----> der Kolaps ist somit genau an deinr kommentierten Stelle im Code vorprogrammiert, ich bin mir sicher das ist nur nen kleiner Schussligkeitsfehler der unterläuft doch jedem einmal! Es fällt dir bestimmt wie Schuppen von den Augen was ich meine!mfg sclearscreen