Schleife
c
- sonstiges
Guten Morgen alle mit einander,
ich bin an einer schleife dran und sie macht einfach nicht das was ich möchte.
Die habe ich mehrmals umgeschrieben und es kommt nie das raus was ich möchte. Wenn ich es einzeln mache geht es wunder aber wenn ich das ganze in er schleife packe Zählt er nicht mehr weiter!
Seht ihr einen fehler
int counter = 0; try {
FileStream fs_lesen = File.OpenRead("C:\Dokumente und Einstellungen\andrae\Eigene Dateien\corinna\OpenHTML\WIS_Benutzerhandbuch.html"); StreamReader sr_lesen = new StreamReader(fs_lesen);
Regex digitregex = new Regex("<H3");//"(?<number>\d+)"); Regex ende = new Regex("###WERT###"); String s = sr_lesen.ReadToEnd(); //"abc 123 def 456 ghi 789";
sr_lesen.Close(); fs_lesen.Close();
MatchCollection mc = digitregex.Matches(s); MatchCollection mc1 = ende.Matches(s);
if (( mc.Count > 0 ) || (mc1.Count > 0)) { //einzel Ausgabe System.Console.WriteLine(mc.Count.ToString()); System.Console.WriteLine(mc1.Count.ToString());
System.Console.WriteLine("anfang: "+ s.IndexOf("<H3")); System.Console.WriteLine("ende: " + s.IndexOf("###WERT###")); System.Windows.Forms.MessageBox.Show("###WERT###");
int h3 = s.IndexOf("<H3"); int h4 = s.IndexOf("###WERT###"); int summe;
summe = h4 - h3; System.Console.WriteLine("Summe: " + summe.ToString()); System.Console.WriteLine(s.Substring(h3,summe));
System.Console.WriteLine("Ziffern:");
int wert; int test; int i = 0;
foreach (Match m in mc) { foreach(Match m1 in mc1) { if(i< mc1.Count) { wert = m.Index; Console.WriteLine("anfang: " + wert); i++; counter = wert;
test = m1.Index; int summe1 = test - counter; Console.WriteLine("ende: " + test); Console.WriteLine("summe: "+ summe1); //Console.WriteLine(s.Substring(counter, summe1)); } } } }
Einzelausgabe:
47 4 anfang: 43964 ende: 44755 Summe: 791
Mehrfachausgabe:
Ziffern: anfang: 43964 ende: 44755 summe: 791 anfang: 43964 ende: 45599 summe: 1635 anfang: 43964 ende: 46145 summe: 2181 anfang: 43964 ende: 46764 summe: 2800
(erzählt einfach nicht den Anfang weiter!)
Was habe ich falsch gemacht?????
Ps. Das ganze ist in c# geschrieben!! aber das seht ihr bestimmt.
hi,
ich bin an einer schleife dran und sie macht einfach nicht das was ich möchte.
ja, schuhe zubinden muss jeder mal lernen.
Die habe ich mehrmals umgeschrieben und es kommt nie das raus was ich möchte.
ja was möchte das kleine c denn, sagt es uns das auch?
gruß,
wahsaga
ja was möchte das kleine c denn, sagt es uns das auch?
Was habe ich falsch gemacht?????
Habe ich mich wieder nicht deutlich ausgedrückt, ist verständlich für mich! Es ist schon bekannt was der Quellcode macht.
Wenn nicht: ich suche <H3 in der Datei X und möchte wissen an welcher stelle <H3 steht und mit ###WERT### ist das ende so das ich immer bestimmt Ansätze habe die in einer anderen Datei geschrieben werden.
Denn habe ich ein Counter der mir sagt wie viele <H3 und ###WERT### in der Datei vorkommen. So kann ich die Anzahl der Dateien bestimmen
Mit foreach(Macht m in mc) zählt er mir alle auf.
Was ich möchte das der Anfang immer weiter rutscht.
Der Anfang zählt nicht weiter das ende ja.
Jetzt ist meine Ausgabe immer noch so:
Ziffern: anfang: 43964 ende: 44755 summe: 791 anfang: 43964 ende: 45599 summe: 1635 anfang: 43964 ende: 46145 summe: 2181 anfang: 43964 ende: 46764 summe: 2800
und es wäre schön wenn der Anfang weiter rutschen könnte (z.B. wenn an der stelle in der Datei jetzt ein <H3 steht)
Ziffern: anfang: 43964 ende: 44755 summe: 791 anfang: 45110 ende: 45599 summe: 489 anfang: 45964 ende: 46145 summe: 181 anfang: 45999 ende: 46764 summe: 765
Habe ich mich jetzt besser ausgedrückt???
Hallo,
ich bin an einer schleife dran und sie macht einfach nicht das was ich möchte.
[... jede Menge Code ...]
Die von dir verwendete Entwicklungsumgebung hat mit an Sicherheit grenzender Wahrscheinlichkeit einen Debugger integriert. Was hast du schon ausprobiert? Wie, du hast noch nicht damit gearbeitet? Dann ist jetzt ein idealer Zeitpunkt gekommen diesen "Debugger" auszuprobieren.
Welche Werte nimmt "Wert" in der Zeile wert = m.Index; an wenn du an dieser Stelle einen Haltepunkt setzt.
Grüße,
Jochen
Hallo,
ich bin an einer schleife dran und sie macht einfach nicht das was ich möchte. [... jede Menge Code ...]
Die von dir verwendete Entwicklungsumgebung hat mit an Sicherheit grenzender Wahrscheinlichkeit einen Debugger integriert. Was hast du schon ausprobiert? Wie, du hast noch nicht damit gearbeitet? Dann ist jetzt ein idealer Zeitpunkt gekommen diesen "Debugger" auszuprobieren.
Welche Werte nimmt "Wert" in der Zeile wert = m.Index; an wenn du an dieser Stelle einen Haltepunkt setzt.
Grüße,
Jochen
ich habe raus bekommen mit Debug an was das liegt nur ich habe noch keinen Ansatz wie ich das Problem in der foreach schleife löse.
foreach in foreach schliefe will irgend wie nicht. also muss ich doch einen anderen weg gehen.
Hallo c,
ich habe raus bekommen mit Debug an was das liegt nur ich habe noch keinen Ansatz wie ich das Problem in der foreach schleife löse.
foreach in foreach schliefe will irgend wie nicht. also muss ich doch einen anderen weg gehen.
nein, das kann ich nicht glauben. Die Verschachtelung von 2 foreach Schleifen klappt bestimmt. (Auch wenn der Compiler von Microsoft kommt)
Versuche es noch einmal mit dem Debugger. Mit ganz einfachen Eingangsdaten bei denen du die Ausgabe und die Schleifen vorher auf Papier nachvollziehst.
Grüße,
Jochen
nein, das kann ich nicht glauben. Die Verschachtelung von 2 foreach Schleifen klappt bestimmt. (Auch wenn der Compiler von Microsoft kommt)
ich habe mal einfach man die if(i< mc1.Count) Anweisung rausgenommen. und dabei ist rausgekommen. Er schreibt den ersten punkt so oft wie es Endpunkte gibt z.B. man hat 4 entpunkte also hat man auch viel mal den gleichen Anfang.
z.B. Ziffern: anfang: 43964 ende: 44755 summe: 791 anfang: 43964 ende: 45599 summe: 1635 anfang: 43964 ende: 46145 summe: 2181 anfang: 43964 ende: 46764 summe: 2800
Versuche es noch einmal mit dem Debugger. Mit ganz einfachen Eingangsdaten bei denen du die Ausgabe und die Schleifen vorher auf Papier nachvollziehst.
habe ich und ich komme immer zum gleichen punkt zur zweiten foreach schleife. aber ich habe schon mehrer schleifen ausprobiert und Variationen wo ich sagen muss ich weiß jetzt erst mal keine Variante mehr
so besser ich weiß schon wie das geht aber ab und zu denke ich nicht dran
Hi c,
ich habe mal einfach man die if(i< mc1.Count) Anweisung rausgenommen. und dabei ist rausgekommen. Er schreibt den ersten punkt so oft wie es Endpunkte gibt z.B. man hat 4 entpunkte also hat man auch viel mal den gleichen Anfang.
OK, so kommen wir nicht weiter. Das was du da beschreibst ist so. Und erstmal kein Fehler. Mir fehlt momentan die Phantasie mir vorzustellen, welche Start und Endpunkte in welcher Verteilung vorkommen und welche Informationen extrahiert werden sollen.
Deine Ausführungen in https://forum.selfhtml.org/?t=108204&m=673412 hätten etwas präziser sein können.
Wieviele "End"punkte gibt es denn je <h3>? Gibt es je <h3 genau ein (zugehöriges) ###WERT###? Wenn das so ist, ist deine Konstruktion mit dem verschachtelten foreach() eher nix ...
foreach (Match m in mc) // Die "Start"punkte <H3
{
foreach(Match m1 in mc1) // Die "End"punkte ###WERT###
{
// hier werden _alle_ Endpunkte _eines_ h3 abgearbeitet.
// ... was du anscheinend nicht möchtest.
}
}
aber ich habe schon mehrer schleifen ausprobiert und Variationen wo ich sagen muss ich weiß jetzt erst mal keine Variante mehr
Spontan würde ich sagen 1 Schleife:
foreach (Match m in mc)
{
start = m.Index;
end = s.IndexOf("###WERT###", start);
Console.WriteLine(s.Substring(start, end));
}
Wenn meine Annahme, dass es je <h3 ein zugehöriges ###WERT### gibt, zutrifft.
Grüße,
Jochen
Guten morgen liebes c
foreach (Match m in mc)
{
foreach(Match m1 in mc1)
{
also, vielleicht liegt es daran, daß m erst dann weitergezaehlt wird, wenn m1 das Ende von mc1 erreicht hat, oder ?
Gruß
Hans