String zerlegen
-
String nummerOhneNullundSemikolon; foreach (Match m in matchCollection) { nummerOhneNullundSemikolon = m.Value; if(nummerOhneNullundSemikolon.StartsWith("0")) nummerOhneNullundSemikolon = nummerOhneNullundSemikolon.Remove(0,1); if(nummerOhneNullundSemikolon.EndsWith(";")) nummerOhneNullundSemikolon = nummerOhneNullundSemikolon.Remove((nummerOhneNullundSemikolon.Length - 1), 1); Console.WriteLine(nummerOhneNullundSemikolon); }
-
using System; using System.Collections; using System.Collections.Specialized; using System.Text.RegularExpressions; namespace StringZerlegen { /// <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 // String nummern = @"065012345;06761234567;066422222222"; MatchCollection matchCollection; Regex regex = new Regex(@"[(0664),(0676),(0699),(0650),(0660),(0688)][ 0-9]+;?"); // findet Telefonnummern Semikolon lässt sich dann mit den normalen Methoden des Stringobjektes rausseparieren matchCollection = regex.Matches(nummern); foreach (Match m in matchCollection) Console.WriteLine(m.Value); Console.WriteLine(); // Abschneiden von führender 0 und letzten Semikolon String nummerOhneNull; foreach (Match m in matchCollection) { nummerOhneNull = m.Value; if(nummerOhneNull.StartsWith("0")) nummerOhneNull = nummerOhneNull.Remove(0,1); if(nummerOhneNull.EndsWith(";")) nummerOhneNull = nummerOhneNull.Remove((nummerOhneNull.Length - 1), 1); Console.WriteLine(nummerOhneNull); } } } }
gucks mal an
-
So ich nehme jetzt ne Mütze voll Schlaf, muß morgen zu meiner EDVtechnischen Weiterbildung die zieht sich über den ganzen Tag.
Dein Problem sollte jetzt gelöst sein, hoffe ich!
also denn machs gut, ich bin schon ganz müde
das Bett ruft.
mfg sclearscreen
-
hi,
ich habs so probiert:
ArrayList Numbers = new ArrayList(); int count = 0; MatchCollection matchCollection; Regex regex = new Regex(@"[(0664),(0676),(0699),(0650),(0660),(0688)][ 0-9]+;?"); // findet Telefonnummern Semikolon lässt sich dann mit den normalen Methoden des Stringobjektes rausseparieren matchCollection = regex.Matches(textBox_Receivers.Text); foreach (Match m in matchCollection) { Numbers.Add(m.Value.Remove(0,1)); // erste Zeichen wegschneiden // Wenn Numbers[count] an letzten pos ein ';' hat dann { // letztes zeichen wegschneiden } MessageBox.Show(Numbers[count++].ToString()); }
kann man in einer foreach schleife irgendwie an den aktuellen index kommen, ich hab eine variable count verwendet geht das auch schöner?
und ich weiss nicht genau wie ich das ';' weg bekomme;-)
cu
-
ok funzt nun prima;-) danke wieder was gelernt;-)
nur möcht noch wissen ob ich in einer foreach schleife auch irgendwie auf den index komme? ich hab ja hier nun eine count var...
aber sonst müsste der code habswegs schön sein?;-)ArrayList Numbers = new ArrayList(); int count = 0; MatchCollection matchCollection; Regex regex = new Regex(@"[(0664),(0676),(0699),(0650),(0660),(0688)][ 0-9]+;?"); // findet Telefonnummern Semikolon lässt sich dann mit den normalen Methoden des Stringobjektes rausseparieren matchCollection = regex.Matches(textBox_Receivers.Text); foreach (Match m in matchCollection) { Numbers.Add(m.Value); if(Numbers[count].ToString().StartsWith("0")) { Numbers[count] = Numbers[count].ToString().Remove(0,1); } if(Numbers[count].ToString().EndsWith(";")) { Numbers[count] = Numbers[count].ToString().Remove((Numbers[count].ToString().Length - 1), 1); } MessageBox.Show(Numbers[count++].ToString()); }
bye
-
hm, wie kann ich das nun mit Namen in Handynummer erstzen machen....
so kann ich die telefonnummer eines namens suchen:
// Loop through each column in the dataSet for(int i = 0; i < dataSet.Tables[0].Rows.Count; i++) { if(dataSet.Tables[0].Rows[i].ItemArray[0].ToString() == Name) { return dataSet.Tables[0].Rows[i].ItemArray[1].ToString(); //Telnr zurückgeb } }
also ich hab ja dann folgenden input:
Gerald; 06501234567; Sabine
hier soll dann Gerald und Sabine durch eine Handynummer ersetzt werden...
und darauf hin ist das der input für die im vorigen post gebastelte regex zerlegung...hab mir dadacht ich nimm da so eine funktion die einen teilstring im string sucht..falls ich da was finde
bye
-
Hi bin wieder da Wegen der foreach-/ Indexgeschicht
verstehe nicht wareum Du da noch den Index Brauchst?
Der Sinn und Zweck einer foreach - Schleife gegenüber ner for -Schleife ist das ich keinen Index brauche und man vermeidet sozusagen eine IndexOutOfBounds - Exception sprich Indexüberlauf
wenn Du aber denoch dein MatcheCollection - Objekt mit ner for - schleife durchlaufen willst hast du die IndexGrenze durch den MatchCollection.Count - MemberGuck Dir mal die grundlegenden Code - Samples zu ner For/ Foreach - Schleife an! Das ist lediglich nen Design - Frage vom Code her gesehen.
Foreach - Konstrukt hilft den Programmlogik - Fehler zu vermeiden, vorausgesetzt man hat Vorausgedacht und die richtigen Datentypen verwendet.
Aber nen Collection - Datentyp habe ich ja mit weisser Voraussicht in meinem Beispiel verwendet!Wenn du unnnnnnnbedingt nen Index brauchst zähl doch in der foreach - Schleife einfach mit Wenn die Wertemenge sprich Collection nicht leer ist werde doch auch Runden in der Schleife gedreht! kling doch logisch jedenfalls fuer mich.:
Guckst du und machst du soString nummerOhneNull; int MatchIndexCount = 0; foreach (Match m in matchCollection) { MatchIndexCount++; // Das is dein Index der sogar gezählt wird nummerOhneNull = m.Value; if(nummerOhneNull.StartsWith("0")) nummerOhneNull = nummerOhneNull.Remove(0,1); if(nummerOhneNull.EndsWith(";")) nummerOhneNull = nummerOhneNull.Remove((nummerOhneNull.Length - 1), 1); Console.WriteLine(nummerOhneNull); }
-
geri schrieb:
hm, wie kann ich das nun mit Namen in Handynummer erstzen machen....
so kann ich die telefonnummer eines namens suchen:
// Loop through each column in the dataSet for(int i = 0; i < dataSet.Tables[0].Rows.Count; i++) { if(dataSet.Tables[0].Rows[i].ItemArray[0].ToString() == Name) { return dataSet.Tables[0].Rows[i].ItemArray[1].ToString(); //Telnr zurückgeb } }
also ich hab ja dann folgenden input:
Gerald; 06501234567; Sabine
hier soll dann Gerald und Sabine durch eine Handynummer ersetzt werden...
und darauf hin ist das der input für die im vorigen post gebastelte regex zerlegung...hab mir dadacht ich nimm da so eine funktion die einen teilstring im string sucht..falls ich da was finde
bye
Also irgenwie muss du doch in deinem Projekt über die Datenerfassung Name und Telefonnummern in Beziehung setzen können!
Da wie Du ja gesagt hast Die XML - Threads von gestern auch von Dir sind!
Gehe ich davon aus das eine XML - File existiert wo Personendatensätze logisch mit Hilfe von XML - Tags aufbereitet sind! ala<Person> <PersonenName>Gerald</PersonenName> <Rufnummer>067688888888</Rufnummer> </Person>
ne lösung wäre fuer solch einen Datensatz nen Regex zu basteln.
der Person - Tag setzt hier PersonenName als auch Rufnummer
klar und eindeutig in Beziehung das sieht man sofort ein "Regex" würde Dir jeden Datensatz rausziehn der auf sein Muster passt! Da als Ergeniss ne Teilzeichekette rauskommt kann man diese Daten in jeder Hinsicht schön manipulieren Ersetzen. Einfügen und Löschen fuer dei Nummer den Namen Rausgeben
alles ist möglic was die Zeichenkettenverarbeitung hergibt.Der Vorteil von Regex: Das XML - Dokument muss nichtmal wie sagt man *grübel* wohlgeformt sein. Es findet trotzdem solche Datensätze!
Wenn dein XML - Dokument aber wohlgeformt ist und entspricht auch den Regeln des Schema oder der DTD, sofern man noch DTD verwendet, gibts auch ne andere Möglichkeit! .NET hat Klassen für alle Belange die XML betreffen.
XMLReader; XMLWriter etc.
Du musst dann folgende using - Klauseln einbinden ums sowas zu verwenden
using System.Xml; using System.Xml.Schema; using System.Xml.Serialization; using System.Xml.Xsl; using System.Xml.XPath;
mfg sclearscreen
-
Wenn ich aus deinen Posting folgendes lese:
Gerald; 06501234567; Sabine
Könnte ich auch vermuten ->
Auf nen Namen folgt auch die passente Telefonummer
Na denn könntest Du auch nen Regulären Ausdruck fuer genau diese Konstellation basteln, das wäre auch kein Problem! Wäre auch ganz
mfg sclearscreen
-
geri schrieb:
ok funzt nun prima;-) danke wieder was gelernt;-)
nur möcht noch wissen ob ich in einer foreach schleife auch irgendwie auf den index komme? ich hab ja hier nun eine count var...
aber sonst müsste der code habswegs schön sein?;-)ArrayList Numbers = new ArrayList(); int count = 0; MatchCollection matchCollection; Regex regex = new Regex(@"[(0664),(0676),(0699),(0650),(0660),(0688)][ 0-9]+;?"); // findet Telefonnummern Semikolon lässt sich dann mit den normalen Methoden des Stringobjektes rausseparieren matchCollection = regex.Matches(textBox_Receivers.Text); foreach (Match m in matchCollection) { Numbers.Add(m.Value); if(Numbers[count].ToString().StartsWith("0")) { Numbers[count] = Numbers[count].ToString().Remove(0,1); } if(Numbers[count].ToString().EndsWith(";")) { Numbers[count] = Numbers[count].ToString().Remove((Numbers[count].ToString().Length - 1), 1); } MessageBox.Show(Numbers[count++].ToString()); }
bye
Wenn in der foreach - Schleife das Match - Objekt
rausgezogen wird bekommt das Match - Objekt über seine Eigenschaft Index
auch dessen Position in der Collectiongesagt siehe mein Code:String nummerOhneNull; foreach (Match m in matchCollection) { nummerOhneNull = m.Value; if(nummerOhneNull.StartsWith("0")) nummerOhneNull = nummerOhneNull.Remove(0,1); if(nummerOhneNull.EndsWith(";")) nummerOhneNull = nummerOhneNull.Remove((nummerOhneNull.Length - 1), 1); m.Index; // hier Dein Index ganz ohne mitzählen mit ner extra Variable Console.WriteLine(nummerOhneNull); }
-
Die ganze zugrundelegende ClassLibrary ist sehr intuitiv designed
jedes Ding zieht sich wien Roter Faden durchs ganze Framework!Echt genial durchdacht, und durch die
InteliSense - Technologie
der IDE
brauch man sich noch nichtmal richtig auskennenglatt zum verlieben diese Sache.
mfg sclearscreen
-
sclearscreen schrieb:
Wenn ich aus deinen Posting folgendes lese:
Gerald; 06501234567; Sabine
Könnte ich auch vermuten ->
Auf nen Namen folgt auch die passente Telefonummer
Na denn könntest Du auch nen Regulären Ausdruck fuer genau diese Konstellation basteln, das wäre auch kein Problem! Wäre auch ganz
mfg sclearscreen
kann aber auch so aussehen:
06501234567; Sabine; sclearscreen; Geralddas analysieren mit der xml wär nicht so gut! denn ich nehme vielleicht mal ne andere datenbank testweise...aber egal!
wie soll man hier einen regulären ausdruck basteln?;-)cu
-
is nen Fehler von mir hier der Code mit behobenen Fehler
using System; using System.Collections; using System.Collections.Specialized; using System.Text.RegularExpressions; namespace StringZerlegen { /// <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 // // sind alles Telefonnummern separiert durch Semikolon // Aufgabe Telefonnummern durch Reguläre Ausdrücke finden führende 0 abschneiden sowie letztes Semikolon String nummern = @"065012345;06761234567;066422222222"; MatchCollection matchCollection; Regex regex = new Regex(@"[(0664),(0676),(0699),(0650),(0660),(0688)][ 0-9]+;?"); // findet Telefonnummern Semikolon lässt sich dann mit den normalen Methoden des Stringobjektes rausseparieren matchCollection = regex.Matches(nummern); foreach (Match m in matchCollection) { Console.WriteLine("{0}: an Position {1} im Collection", m.Value , m.Index); } Console.WriteLine(); String nummerOhneNull; foreach (Match m in matchCollection) { nummerOhneNull = m.Value; if(nummerOhneNull.StartsWith("0")) nummerOhneNull = nummerOhneNull.Remove(0,1); if(nummerOhneNull.EndsWith(";")) nummerOhneNull = nummerOhneNull.Remove((nummerOhneNull.Length - 1), 1); Console.WriteLine("{0}", nummerOhneNull); } } } }
-
Wenn ich mir die Ausgabe so anschau auf der Console so lässt das folgendes vermuten im Hinblick auf jeglich Collections
Alle Patterns wwerden in dem Collection - Objekt zu ner grossen Zeichenkette zusammengebaut und als Index wird sich nur gemerkt wo das nächste gefunden
Muster anfängt zähl mal durch dann hast Du nen AHA - Effekt!!!
Also wunder dich nicht warum nicht Index 0, Index 1 usw. rauskommt.Es liegt an der Tatsache wie das Collection intern arbeitet.
mfg sclearscreen
-
geri schrieb:
sclearscreen schrieb:
Wenn ich aus deinen Posting folgendes lese:
Gerald; 06501234567; Sabine
Könnte ich auch vermuten ->
Auf nen Namen folgt auch die passente Telefonummer
Na denn könntest Du auch nen Regulären Ausdruck fuer genau diese Konstellation basteln, das wäre auch kein Problem! Wäre auch ganz
mfg sclearscreen
kann aber auch so aussehen:
06501234567; Sabine; sclearscreen; Geralddas analysieren mit der xml wär nicht so gut! denn ich nehme vielleicht mal ne andere datenbank testweise...aber egal!
wie soll man hier einen regulären ausdruck basteln?;-)cu
Ja auf diese Situation bist Du mit Regex nicht gefeit sowas sind chaotische Datenverhältnisse Du musst schon irgendwie sorgetragen das Dir die Datenbank aufbereitet Datensätze liefert!
D.h. Aus diesen Datenstrom kannst Du bei solchen chaotischen Datenverhältnessen
auch keine verifitzierbare Information rausziehn, das sollte Dir aber klar sein oder!Also wenn dieser Datenstrom Ergenis einer Datenbankabfrage mit SQL ist dann:
Ist entweder dies Datenbank nicht korrekt designed
Oder die SQL - Abfrage ist nicht korrekt designedDu 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.mfg sclearscreen
-
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