String zerlegen



  • 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 beruecksichtigt

    so 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 😕
    cu

    hi, irgendwas passt hier noch nicht;-( wenn ich 5 oder 6 telefonnummern + namen eingebe dann läuft nicht;-(
    also sowas: Gerald, 0650123456; Sabine; Spech; 06761233333

    cu 😃



  • 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; 06761233333

    cu 😃

    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!
    cu

    Dies 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 wird

    Bei 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



  • for each sollten der reine For - Schleife vorgezogen werden
    wenn ich durch ne Menge durchiterieren muss deren Menge unbekannt ist oder wo ich vorher nicht weiss obs ne leere Menge ist!

    P.S.: Das ist nen Gut gemeinter tipp der Ärger ersparen hilft, somit kann man Sagen
    ne for each - konstrukt hilft immer Endloss-schleifen zu vermeiden sofern dort nicht andere Schleifen eingeschachtelt sind

    mfg sclearscreen 👍



  • 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++;
    }
    

    Da wo der Fehler auftritt ist auch keine Variable i, sondern counter. Und der wird oben erstellt.



  • DJ BlackEagle schrieb:

    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++;
    }
    

    Da wo der Fehler auftritt ist auch keine Variable i, sondern counter. Und der wird oben erstellt.

    Ich glaube Du hast den Kontext nicht so ganz verstanden was geri
    Ich habe Ihn bei seinem Projekt seit etwa 4 tagen ein bisschen unterstützt!

    Er htte diese Scheleifenkonstrukte niemals innerhalb eines Moduls hintereinander im Code! Sondern er hatte seinen Code einmal mit ner for - Schleife laufen inderer Schleife auch die Variable war dann ist es klar das die Variable lokal vorhanden war! und das es auch lief.

    Dann hatte geri das Codestueck editiert dahingegen das oben aus ner for -Schleife ne for each - Schleife wurde aber hatte vergessen das da noch ne Variable i ist die natührlich vom foreach - konstrukt niemals itterriert wurde.

    Also Du kannst mich kritisieren aber in der unterern Reihenfolge oder auflistung
    :

    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();
                }
            }
        }
    }
    

    hatte geri es nie in seinem Programm stehen er hat die 2 Code - Snippets
    hier einfach hintereinander gepostet und wenn man erst später in den thread kommt kann man es nathürlich falsch interpretieren! Ich glaube geri hatte mich schon richtig verstanden. 😉 🙂

    mfg sclearscreen


Anmelden zum Antworten