Platzhalter
C.A
- programmiertechnik
0 Julian von Mendel0 C.A
0 Karl-Heinz Osmer0 C.A0 Ingo Turski0 C.A0 Christoph Zurnieden0 C.A
0 Ingo Turski
ich habe mal wieder eine Frage.
ich bin grade da bei automatische Platzhalter in einer Datei zu setzten.
es funktioniert auch halb aber ich bekomme nicht meine Fehler raus das es ganz klappt.
Kurz erklärt.
ich lese eine Datei, Zeile für Zeile aus und wenn ich ein <H3 finde merke ich mir das und lese weiter bis das nächste <Hx kommt. Nur das er bis zum nächsten <H3 list statt bis zum nächstes <Hx.
Irgend wie weiß ich nicht wie ich da weiterkommen soll. Habt ihr eine Idee??
Hallo!
Irgend wie weiß ich nicht wie ich da weiterkommen soll. Habt ihr eine Idee??
Willst du, das wir jetzt versuchen, den Fehler in deinem Code zu erraten?
Schöne Grüße
Julian
Willst du, das wir jetzt versuchen, den Fehler in deinem Code zu erraten?
ist ein versuch wert, nein. Hier ist mal um was es sich dreht aber es hätte ja sein können das ihr Ideen habt wo ich nicht drauf gekommen wäre.
Egal an was ich für ein Quell text habe.
Ist aber erst meine Test Version deswegen sieht das wie kraut und Rüben ab und zu aus. es ist aber nicht grade wenig.
FileStream fs_zeile = File.OpenRead("C:\Dokumente und Einstellungen\andrae\Eigene Dateien\corinna\OpenHTML_Text\WIS_Benutzerhandbuch.html");
StreamReader sr_zeile = new StreamReader(fs_zeile);
string input;
Regex digitregex_test = new Regex("<H3");
Regex endeUH1 = new Regex(UH1);
FileStream fs_zeile_s = File.OpenWrite("C:\Dokumente und Einstellungen\andrae\Eigene Dateien\hallo_test.html");
StreamWriter sw_zeile = new StreamWriter(fs_zeile_s);
while ((input=sr_zeile.ReadLine())!=null)
{
MatchCollection mc = digitregex_test.Matches(input);
MatchCollection mc1 = endeUH1.Matches(input);
Match[] m2 = new Match[mc1.Count];
IEnumerator ie = mc1.GetEnumerator();
while(ie.MoveNext())
{
m2[i] = (Match)ie.Current;
i++;
MessageBox.Show(mc1.Count.ToString());
Console.WriteLine(input.ToString()); }
foreach(Match mm in mc)
{
if(input.IndexOf("<H3") == mm.Index)
{
AnfangsPunkt = mm.Index;
Console.WriteLine("anfang: " + mc.Count.ToString()); counter = AnfangsPunkt;
sw_zeile.WriteLine(input);
while ((input=sr_zeile.ReadLine())!=null)
{ if(mc1.Count > i)
{
MessageBox.Show("H1");
EndPunkt = m2[ArrayZaehler].Index;
MessageBox.Show(ArrayZaehler.ToString());
ArrayZaehler++;
}
if((input.IndexOf("<H3") == mm.Index)||(input.IndexOf("<H1") == m2[ArrayZaehler].Index))
//||(input.IndexOf("<H2").ToString() == "<H2")||(input.IndexOf("<H1").ToString() == rausUH1))
{
w_zeile.WriteLine("###ENDE_H3###");
//MessageBox.Show("stop");
}
sw_zeile.WriteLine(input); }
}
}
sw_zeile.WriteLine(input);
}
sw_zeile.Close();
fs_zeile_s.Close();
sr_zeile.Close();
fs_zeile.Close();
Hallo, C.A.
ich habe mal wieder eine Frage.
Fein, davon lebt das Forum.
Habt ihr eine Idee??
Zum Thema PLatzhalter? Oh ja, heute bin ich voller Ideen, das ist aber nicht jeden Tag so.
Also meine Idee ist, dass du einen "<h3" - Block komplett ersetzen willst. Also auch die untergeordneten "<h4", "<h5" usw.
Wenn du auf einen neuen Block "<h3" ODER "<h2" ODER "<h1" stößt, weisst du, dass der alte "<h3" beendet ist.
Liege ich noch richtig?
Und das klappt also nicht.
Möglichkeit 1: Du suchst gezielt nach "<H3" und findest das auch. Aber du willst etwas anderes.
Möglichkeit 2: Du hast Probleme mit Gross- und Kleinschreibung. "<H" ist etwas anderes als "<h".
Natürlich habe ich HEUTE noch viel mehr Ideen, aber vielleicht habe ich im Blindflug dein Ziel schon getroffen.
LG Kalle
Hallo Kalle, (wenn ich denn namen höre denke ich immer an...)
Also meine Idee ist, dass du einen "<h3" - Block komplett ersetzen willst. Also auch die untergeordneten "<h4", "<h5" usw.
Wenn du auf einen neuen Block "<h3" ODER "<h2" ODER "<h1" stößt, weisst du, dass der alte "<h3" beendet ist.
Liege ich noch richtig?
Du liegst fast richtig. Aber im Ansatz nicht falsch außer das <H4 und <H5 nicht untergeordnet H3 liegen soll. <H3 als Absatz allein.
Und das klappt also nicht.
Möglichkeit 1: Du suchst gezielt nach "<H3" und findest das auch. Aber du willst etwas anderes.
ich suche nach <H3 das ist richtig aber ich glaube ich muss auch Parallel nach den anderen suchen H’s suchen. Irgend wie bekomme ich das nicht hin ich habe es mit Arrays versucht da kommt ein Arrayfehler ich kann mir auch denken warum. Weil er was ein mal findet und denn nie wieder und das Array ist leer wenn es benötigt wird. so weit bin ich mit mein Debuggern gekommen..
Möglichkeit 2: Du hast Probleme mit Gross- und Kleinschreibung. "<H" ist etwas anderes als "<h".
nein an Groß- und Kleienschreibung liegt es nicht.
Natürlich habe ich HEUTE noch viel mehr Ideen, aber vielleicht habe ich im Blindflug dein Ziel schon getroffen.
na kannst du noch weiter machen mit deine Ideen
ich gebe dir mal ein Beispiel wie meine Ausgabe aussieht
<H3>Überschrift 3</H3>
(hier sieht er es ist <H3 (merkt er sich)
Test...
..
..
Text ende
Platzhalter ###ENDE_H3###
<H3>Überschrift 3</H3>
(hier sieht er es ist <H3 (hier sieht er ist <H3 muss ein Platzhalter setzten weil erster Absatz zuende( und denn merkt er sich wieder das es H3 ist und liest weiter )
Test...
..
..
Text ende
„hier müsste jetzt ein Platzhalter kommen kommt aber nicht!“
<H1>Überschrift 1</H1>
(hier sieht er nicht das es <H1 und das H3 zuende ist also und setzt er kein Platzhalter was falsch ist ) (das ist was ich möchte und ich komme nicht weiter)
Test...
..
..
Text ende
<H2>Überschrift 2</H2>
(hier sieht er es ist nicht <H2 )
Test...
..
..
Text ende
Platzhalter ###ENDE_H3### (jetzt denkt er es ist H3 zuende was ja nicht stimmt. Er schaut nicht ob es H1 oder H2 ist nur wenn H3 kommt wird ein Platzhalter gesetzt.)
<H3>Überschrift 3</H3>
(hier sieht er es ist H3 (merkt er sich)
Test...
..
..
Text ende
Hi,
Platzhalter ###ENDE_H3###
wozu überhaupt diese ominösen Platzhalter?
Eine ordentliche Dokumentenstruktur vorausgesetzt, wird <hx durch </hx> beendet und es sollte doch reichen, ab dem öffnenden Tag danach zu suchen.
freundliche Grüße
Ingo
Hi,
Platzhalter ###ENDE_H3###
wozu überhaupt diese ominösen Platzhalter?
Eine ordentliche Dokumentenstruktur vorausgesetzt, wird <hx durch </hx> beendet und es sollte doch reichen, ab dem öffnenden Tag danach zu suchen.
nein, ich möchte nicht nach dem ende Tag </Hx> suche das wäre ja kein Problem ich benötige den ganzen Absatz nicht nur die Überschrift .
wenn ich deine aussage richtig verstanden habe.
Hi,
Platzhalter ###ENDE_H3###
wozu überhaupt diese ominösen Platzhalter?
Das ist ein gute Frage, Ingo, der würde ich mich gerne anschließen. Aber es mag gute Gründe dafür geben, z.B. eine Weiterverarbeitung mit nur begrenzten Möglichkeiten.
nein, ich möchte nicht nach dem ende Tag </Hx> suche das wäre ja kein Problem ich benötige den ganzen Absatz nicht nur die Überschrift .
Dann solltest Du Dir überlegen, was so einen Absatz ausmacht.
Bis jetzt habe ich Dich so verstanden, das alles, was zwischen mittels eines Hx-Elementes markierten Überschriften steht der gesuchte Absatz ist. Ich nehme mal an, das die Überschrift selber nicht mit reinkommt? Dann mußt Du d Ende von der Überschrift suchen und alles zwischen diesem Punkt und dem Anfang der nächsten Überschrift ist das Gesuchte.
(<hx>)(Abfall)(</hx>)(Hier ist der gesuchte Absatz)(<hx>)(Abfall)(</hx>)...
So hast Du drei Blöcke mit zwei Zwischenräumen. Wenn Du nun am Ende des Absatzes, aber noch vor dem Anfang der nächsten Überschrift etwas reinpacken willst, packst Du das eben einfach in den Zwischenraum, der durch die beiden Blöcke links und rechts begrenzt ist.
so short
Christoph Zurnieden
Ich habe es raus bekommen! Aber denn Fehler darf man nicht sagen.
Aber mit meinen Platzhalter
Danke für eure Tipps
Hi,
Ich habe es raus bekommen! Aber denn Fehler darf man nicht sagen.
findest Du das nicht auch selber ein kleines bischen unverschämt gegenüber dem Forum?
so short
Christoph Zurnieden
Hi,
findest Du das nicht auch selber ein kleines bischen unverschämt gegenüber dem Forum?
nein, weil es zu peinlich. Es ist ja auch nicht schlimm weil die Leute
die hier arbeiten haben mich auch nicht verstanden und wenn man mit
einem Array nicht richtig arbeit ist selber schuld und das war bei mir
und jetzt.....
unverschämt bin ich nie!!!!
Hi,
findest Du das nicht auch selber ein kleines bischen unverschämt gegenüber dem Forum?
nein, weil es zu peinlich.
Das spielt keine Rolle, da mußt Du wohl durch.
Hier haben mehrere Leute Zeit in Dein Problem investiert, das mindeste ist es da am Ende zu sagen, woran es gelegen hat. Die Wahrscheinlichkeit, das hier im Forum nochmal jemand mit Deinem Problem aufschlägt ist recht hoch und dann müßte genau die gleiche Zeit nochmal aufgewandt werden, wo ansonsten ein Link in's Archiv ausreichen würde.
Auch wenn Dir das nicht so vorkommt, ich finde das egoistisch und unverschämt.
so short
Christoph Zurnieden
Ich habe mein Array an der falsch stelle deklariert so einfach ist das und nix anders.
Regex endeUH1 = new Regex(UH1);
MatchCollection mc = endeUH1.Matches(String);
Foreach(Match x in cm)
{
EndPunkt = x.Index;
}
untern wird denn einfach abgefragt an welcher stelle IndexOf(Hx)== x.Index und fertig ist die ganze Sache.
Nix aufregendes, einfach nur zu einfach auf so was zu kommen.
Über das ... und ... lese ich ganz dezent weg. Jeder hat eine Meinung die soll er meintet wegen auch vertreten.
Hi,
ich benötige den ganzen Absatz nicht nur die Überschrift .
ok, jetzt verstehe ich Dein Problem.
Vorausgesetzt, die Überschriftenhierarchie ist korrekt, müßte folgendes Vorgehen funktionieren:
HxLevel = 0
suche Hx + vergleiche mit HxLevel
Hx > HxLevel : merke HxLevel (z.B. 1 > 0 : merke 1)
Hx <= HxLevel : setze Endekennung HxLevel (z.B. 1 < 2 : setze EndeH2)
Hx < HxLevel : vergrößere HxLevel bis Hx = HxLevel + setze Endekennung HxLevel
freundliche Grüße
Ingo