String zerlegen



  • Du musst zusehn das die Info auch immer schön der Reihe nach vorliegt
    nur dann kannst Du mit der Stringmanipulation als:
    Numern gegen Namen ersetzn beginnen.

    die datensätze liefert nicht die datenbank, sondern der user gibt diesen string: Gerald; 06501234567; Sabine ein!
    ich werd mal namen gegen telefonnummern ersetzen mit paar string operationen...wie kann ich ein zeichen oder einen teilstring in einem string suchen?

    bye 😃



  • Ich bastele mir C# ne Klasse Person:

    class Person
    	{
    		private String Name;
    		private String TelefonNummer;
    
    		public Person()
    		{
    		}
    
    		public Person(String Name, String TelefonNummer)
    		{
    			NeuerName(Name);	
    			NeueTelefonNummer(TelefonNummer);
    		}
    
    		public String ZeigeName()
    		{
    			return this.Name;
    		}
    
    		public String ZeigeTelefonNummer()
    		{
    			return this.TelefonNummer;
    		}
    
    		public void NeuerName(String Name)
    		{
    			this.Name = Name;
    		}
    
    		public void NeueTelefonNummer(String TelefonNummer)
    		{
    			this.TelefonNummer = TelefonNummer;
    		}
    	}
    

    Soweit klar

    jetzt besorgst du dir geordnete Information aus ner Datenbank wo die
    Personen sind, ermittle vorher noch die Datensatzanzahl der Personen:

    using System;
    
    namespace KlassenArrays
    {
    	class Person
    	{
    		private String Name;
    		private String TelefonNummer;
    
    		public Person()
    		{
    		}
    
    		public Person(String Name, String TelefonNummer)
    		{
    			NeuerName(Name);	
    			NeueTelefonNummer(TelefonNummer);
    		}
    
    		public String ZeigeName()
    		{
    			return this.Name;
    		}
    
    		public String ZeigeTelefonNummer()
    		{
    			return this.TelefonNummer;
    		}
    
    		public void NeuerName(String Name)
    		{
    			this.Name = Name;
    		}
    
    		public void NeueTelefonNummer(String TelefonNummer)
    		{
    			this.TelefonNummer = TelefonNummer;
    		}
    	}
    
    	/// <summary>
    	/// Zusammenfassung für Class1.
    	/// </summary>
    	class Class1
    	{
    		/// <summary>
    		/// Der Haupteinstiegspunkt für die Anwendung.
    		/// </summary>
    		[STAThread]
    		static void Main(string[] args)
    		{
    			//
    			// TODO: Fügen Sie hier Code hinzu, um die Anwendung zu starten
    			//
    			int DatensatzAnzahl = 5; // musst Du aber aus Datenbank holen habs hier nur zum probieren gesetzt hab ja keine Datenbank
    			Person [] personen = new Person[DatensatzAnzahl];
    
    			// ToDo: Jetzt Namen und Nummern holen und die einzelnen Personen damit Initialisieren
    			// kriegst du wahrscheinlich über dein DataSet
    			for(int i = 0; i<DatensatzAnzahl; i++)
    			{
    				personen[i].NeuerName("Name aus DataSet aus DataSet oder wo andersher");
    				personen[i].NeueTelefonNummer("TelefonNummer aus DataSet aus DataSet oder wo andersher");
    			}
    
    			// jetzt hast du nen Geordnetes Array mit verifizierbaren Informationen
    			// ToDo: Innerhalb zweier verschachtelter Schleifen jetzt nach übereinstimmungen Suchen
    			// und nach belieben Strings manipulieren d.h. Suche nach Übereinstimmungen zwischen Array "personen"
    			// und der Chaotischen Zeichenkette und mache bei Übereinstimmung ne Manipulation
    			for(...; ...; ...)
    			{
    				for(...; ...; ...)
    				{
    
    				}
    			}
    		}
    	}
    }
    


  • soweit danke, schaut gut aus;-)

    wie kann ich aber ein zeichen oder einen teilstring in einem string suchen? und die pos des ersten zeichen des strings bekommen...
    kenn jetzt nur für c++ die funktionen die es da gibt!
    cu



  • Du musst schon sicherstellen das Du ne geordnet Collection oder nen Array mit Referenzdaten hast! Weil dort ist dann auch nen Name direkt logisch an seine Telefonnummer gebunden!

    baust Du dir nun ne Personen - Collection oder nen Personen - Array mit der Klasse - Person, hast du deine
    verifizierte geordnete Informationsmenge parat!

    Dan kannste über diese wohldefinierte Informationsmenge in der konfusen Datenmenge
    rumsuchen und somit rummanipulieren.

    mfg sclearscreen 🙂

    P.S.: Ich hoffe ich konnte mich verständlich machen 💡



  • sclearscreen schrieb:

    Du musst schon sicherstellen das Du ne geordnet Collection oder nen Array mit Referenzdaten hast! Weil dort ist dann auch nen Name direkt logisch an seine Telefonnummer gebunden!

    baust Du dir nun ne Personen - Collection oder nen Personen - Array mit der Klasse - Person, hast du deine
    verifizierte geordnete Informationsmenge parat!

    Dan kannste über diese wohldefinierte Informationsmenge in der konfusen Datenmenge
    rumsuchen und somit rummanipulieren.

    mfg sclearscreen 🙂

    P.S.: Ich hoffe ich konnte mich verständlich machen 💡

    nö *g*
    ich hatte jetzt vor den string mit stringfunktionen zu zerstückeln usw...
    Gerald; 06761111111; Sabine <---- gibt der user in eine textbox ein, dann soll der button gedrückt werden und alle namen mit telefonnummern ersetzt werden....
    dh ich nehme den string von pos 0 pos vor ; ist es ein name und keine nummer dann schau im dataset nach ob es eine handynummer zu diesen namen gibt!
    wenn ja dann lösche ich den namen raus und ersetz diesen durch die nummer...

    das mit den referenzdaten hört sich mal gut an, ist ja nicht viel anders als das dataset...aber wie willst du schließlich den string zerstücken? sag mir bitte wie such ich ein zeichen oder teilstring in einem string!???????
    cu 👍



  • geri schrieb:

    soweit danke, schaut gut aus;-)

    wie kann ich aber ein zeichen oder einen teilstring in einem string suchen? und die pos des ersten zeichen des strings bekommen...
    kenn jetzt nur für c++ die funktionen die es da gibt!
    cu

    hier so gehts:

    String testString = "aaaaTestbbb";
    			Regex regex = new Regex(@"(Test)");
    			String substring = (regex.Match(testString)).ToString();
    

    wenn dein Konkreter Ausdruck nen Muster ist dann so
    diesen Code -Snippet musst Du in Verbindung mit meiner Klasse Person betrachten!
    und musst Dir noch ne Scleif zum suchen trumrumdenken!!!

    String pattern = @"(" + personen[i].ZeigeName() + ")";
    			String testString = "aaaaGeraldbbb";
    			Regex regex = new Regex(pattern);
    			String substring = (regex.Match(testString)).ToString();
    

    Du solltest jetzt sagen "AHA leuchtet mir ein"
    Alles klar?



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


Anmelden zum Antworten