String zerlegen



  • String testString = "aaaaTestbbb";
    			Regex regex = new Regex(@"(Test)");
    			Match m = regex.Match(testString);
    
    			String substring = (regex.Match(testString)).ToString();
    			Console.WriteLine("Beginn: {0} Ende: {1}",m.Index, (m.Index + substring.Length));
    
    			Console.WriteLine(substring);
    

    mfg sclearscreen 😉



  • {0} und {1} sind im übrigen Platzhalter Joker etc, ala
    Formatstring wie bei

    printf(...);
    

    in ANSI - C

    alles Klärchen oder?



  • Also Du musst fuer jede Person im personen - Array Dir dort den Namen holen
    mit diesen Namen den Pattern - String bauen einen fuer den Namen einen fuer die Telefonnummer!
    Mit dem Pattern - String kannst Du nun einmal den Namen suchen und einemal die TelefonNummer.

    Solange Personen im Array Tue:
    chaotischen String
    mit nem Telefonnumer - Pattern den chaotischen String durschuchen
    wenn gefunden manipulieren

    und nochmal mit nem Namen - Pattern den chaotischen String
    durchsuchen
    wenn gefunden manipulieren

    Gut Okay mein PseudoCode is etwas unglücklich!
    Wie ich die Position bestimmt habe hast Du ja gesehn diese Positionen
    kannst Du dann in der Methode: SubString(Anf, End) einsetzen und Du schnibbelst den TeilSting raus. Mit der Methode:Insert(Pos,String)
    kannste Dann nen einzelnens Zeichen oder nen kompletten String ab nem bestimmte Offset reinbauen!



  • sclearscreen schrieb:

    {0} und {1} sind im übrigen Platzhalter Joker etc, ala
    Formatstring wie bei

    printf(...);
    

    in ANSI - C

    alles Klärchen oder?

    aso, gibt wohl nur mehr regex;-) jo schon klar jetzt...jetzt hab ich ne idee:

    String testString = "Gerald; 067612345; Sabine";
    Regex regex = new Regex(@"(hmmm???)]+;?");
    Match m = regex.Match(testString);
    

    Wie kann ich mit regex alle Namen suchen ohne ; ? weiss man dann das 067612345 kein regulärer ausdruck ist, eigentlich ja schon! weil ich die pos wissen muss....für zusammenbauen...
    ich machs nun so das er mit diesem regex alle Namen raussucht, die dann erstzt gegen nummern und mit dem alten regex das in ein StringArray klopfe!

    bin grad beim regex lesen, aber noch nicht das passende gefunden...
    cu + big thx



  • hi, aber vielleicht hab ich das nicht ganz gut erklärt, nicht jede telefonnummer muss in der datenbank stehen, der user kann zb nur seine freunde rein schreiben! deswegen steht da dann bei der eingabe nicht immer gleich der name, sondern gemischt!
    cu



  • geri schrieb:

    sclearscreen schrieb:

    {0} und {1} sind im übrigen Platzhalter Joker etc, ala
    Formatstring wie bei

    printf(...);
    

    in ANSI - C

    alles Klärchen oder?

    aso, gibt wohl nur mehr regex;-) jo schon klar jetzt...jetzt hab ich ne idee:

    String testString = "Gerald; 067612345; Sabine";
    Regex regex = new Regex(@"(hmmm???)]+;?");
    Match m = regex.Match(testString);
    

    Wie kann ich mit regex alle Namen suchen ohne ; ? weiss man dann das 067612345 kein regulärer ausdruck ist, eigentlich ja schon! weil ich die pos wissen muss....für zusammenbauen...
    ich machs nun so das er mit diesem regex alle Namen raussucht, die dann erstzt gegen nummern und mit dem alten regex das in ein StringArray klopfe!

    bin grad beim regex lesen, aber noch nicht das passende gefunden...
    cu + big thx

    Ne die Platzhalter haben nischt mit regex zu tun sondern mit

    Console.Writline(Hallo ich bins der {0}", "sclearscreen");
    

    dem Äquivalent zu:

    char name[] = "sclearscreen";
    printf("Hallo ich bins der %s",name);
    

    im ANSI - C

    CSharp Platzhalter -> {...} und ANSI - C - Gegenstueck %...



  • 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 = Sabine

    cu



  • Aus ner Zeichenkette die nem konkreten Namen entspricht nen
    konkreten regulären Ausdruck machen geht, indem man um den Namen
    Runde Klammernsetzen

    Name: Regulärer Ausdruck dafür:

    sclearscreen (sclearscreen)

    dies führt dann zu folgendem CodeKonstrukt

    String VerstecktInDieserZeichenkette = "0676999;sclearscreen;Sabine";
    String ZuSuchenderName               = "sclearscrenn";
    String PatternFuerRegex              = @"(" + ZuSuchenderName + ")"; /* jetz habe ich aus den Namen einen Konkreten 
    gültigen Regulären Ausdruck gemacht mit Hilfe der Metazeichen    (     und     ) */
    Regex regex = new Regex(PatternFuerRegex);
    Match m = regex.Match(VerstecktInDieserZeichenkette);
    String DurchPatternAbgedeckterTeilstring = (regex.Match(VerstecktInDieserZeichenkette)).ToString();
    


  • 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 = Sabine

    cu

    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 = Sabine

    cu

    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 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?;-)


Anmelden zum Antworten