String zerlegen
-
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
-
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!
cuhier 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 beiprintf(...);
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 manipulierenund nochmal mit nem Namen - Pattern den chaotischen String
durchsuchen
wenn gefunden manipulierenGut 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 beiprintf(...);
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 beiprintf(...);
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 thxNe 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 = Sabinecu
-
Aus ner Zeichenkette die nem konkreten Namen entspricht nen
konkreten regulären Ausdruck machen geht, indem man um den Namen
Runde KlammernsetzenName: 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 = 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.