Smilla Geschrieben 30. November 2005 Geschrieben 30. November 2005 Hallo, ich bins schon wieder Aktuelles Problem: Bei meinem Script sollen die Schleifendurchläufe gezählt werden und somit soll herausgefunden werden wie oft "str2" in "str1" enthalten ist ;-) Wie und wo muss ich eine Zählvariable einbauen? Option Explicit Dim str1 Dim str2 Dim x Dim ergebnis Dim anzahlEin str1 = "Deiner ist ein schöner Text, meiner nicht." str2 = "ein" x = 1 ergebnis = InStr (x, str1, str2) Do While ergebnis <> 0 x = ergebnis ergebnis = InStr (x, str1, str2) Loop Zitieren
jasso Geschrieben 30. November 2005 Geschrieben 30. November 2005 Option Explicit Dim str1 Dim str2 Dim x [B]Dim i[/B] Dim ergebnis Dim anzahlEin str1 = "Deiner ist ein schöner Text, meiner nicht." str2 = "ein" x = 1 [B]i = 0[/B] ergebnis = InStr (x, str1, str2) Do While ergebnis <> 0 x = ergebnis ergebnis = InStr (x, str1, str2) [B] i = i + 1[/B] Loop Zitieren
Amstelchen Geschrieben 30. November 2005 Geschrieben 30. November 2005 Option Explicit Dim str1 Dim str2 Dim x Dim ergebnis Dim anzahlEin [COLOR="Red"]Dim cnt[/COLOR] str1 = "Deiner ist ein schöner Text, meiner nicht." str2 = "ein" x = 1 [COLOR="red"]cnt = 0[/COLOR] ergebnis = InStr (x, str1, str2) Do While ergebnis <> 0 x = ergebnis ergebnis = InStr (x, str1, str2) [COLOR="red"] if ergebnis > 0 then cnt = cnt + 1 end if[/COLOR] Loop ach ja, guck doch mal da: http://www.romankoch.ch/capslock/strfun.htm willst du nicht doch lieber gleich sowas verwenden? s'Amstel Zitieren
jasso Geschrieben 30. November 2005 Geschrieben 30. November 2005 @Amstelchen: ich find es persönlich etwas umständlich die zählvariable mit 1 vorzubelegen und nacher zu überprüfen ob der string nochmals gefunden wurde, aber das ist sicher geschmackssache^^. Zitieren
Smilla Geschrieben 30. November 2005 Autor Geschrieben 30. November 2005 Wenn ich "i" dann mit wscript.echo ausgeben will dann habe ich eine Endlosschleife erzeugt! P.S. das ist jetzt auf Jasso´s erste Antwort bezogen Zitieren
Amstelchen Geschrieben 30. November 2005 Geschrieben 30. November 2005 @jasso: hab ich gleich korrigiert gehabt @smilla: wie, endlosschleife? wo setzt du denn das echo ein? s'Amstel Zitieren
jasso Geschrieben 30. November 2005 Geschrieben 30. November 2005 @Amstelchen: jetzt wenn du noch die überprüfung inner schleife rausnimmst bin ich glücklich (sonst wird eins zu wenig gezählt da er ja außerhalb der schleife die erste abfrage macht) was die endlosschleife angeht ... es kann auf jeden fall nicht an der zählervariable (i oder cnt oder wie auch immer) liegen. Zitieren
Smilla Geschrieben 30. November 2005 Autor Geschrieben 30. November 2005 Ich habe oberhalt des "Loop" das wscript.echo eingesetzt. Baue ich es unter die Do...Loop Schleife dann bekomme ich keine Ausgabe Zitieren
jasso Geschrieben 30. November 2005 Geschrieben 30. November 2005 Baue ich es unter die Do...Loop Schleife dann bekomme ich keine Ausgabe ist klar weil die endlosschleife ja nicht fertig wird (egal ob mit oder ohne die ausgabe) gib in der schleife lieber mal nicht die zählervariable sondern die "ergebnis"-variable aus, dann wirst du auch sehen warum er die schleife nicht verlässt. Zitieren
Smilla Geschrieben 30. November 2005 Autor Geschrieben 30. November 2005 @jasso: und was tue ich am besten dagegen? Die Do...Loop Schleife wird aber doch fertig wenn das Ergebnis 0 ist, wenn Instr. keine Übereinstimmung (mehr) findet, bekommt man als Rückgabe 0. Zitieren
jasso Geschrieben 30. November 2005 Geschrieben 30. November 2005 probier mal statt Do While ergebnis <> 0 einDo While ergebnis > 0 evtl wird nämlich nicht 0 sondern NULL als ergebnis geliefert. Zitieren
Smilla Geschrieben 30. November 2005 Autor Geschrieben 30. November 2005 Du meinst so? Dann gibts ne Endlosschleife wo "2" ausgegeben wird Option Explicit Dim str1 Dim str2 Dim x Dim ergebnis Dim anzahlEin str1 = "Deiner ist ein schöner Text, meiner nicht." str2 = "ein" x = 1 ergebnis = InStr (x, str1, str2) Do While ergebnis <> 0 x = ergebnis ergebnis = InStr (x, str1, str2) wscript.echo ergebnis Loop Zitieren
jasso Geschrieben 30. November 2005 Geschrieben 30. November 2005 *auf kopf hau* der fehler is eigentlich relativ klar nur stand ich wiedermal auf dem schlauch. probier das:Option Explicit Dim str1 Dim str2 Dim x Dim ergebnis Dim anzahlEin str1 = "Deiner ist ein schöner Text, meiner nicht." str2 = "ein" x = 1 ergebnis = InStr (x, str1, str2) Do While ergebnis <> 0 x = ergebnis + 1 ergebnis = InStr (x, str1, str2) Loop Zitieren
Smilla Geschrieben 30. November 2005 Autor Geschrieben 30. November 2005 @Jasso: Danke was lasse ich jetzt ausgeben? Zitieren
jasso Geschrieben 30. November 2005 Geschrieben 30. November 2005 *g* okok hier wirds schön langsam richtig unübersichtlich mit den ganzen ähnlichen codebeispielen. hier nochmal komplett: Option Explicit Dim str1 Dim str2 Dim x Dim i Dim ergebnis Dim anzahlEin str1 = "Deiner ist ein schöner Text, meiner nicht." str2 = "ein" x = 1 i = 0 ergebnis = InStr (x, str1, str2) Do While ergebnis <> 0 x = ergebnis + 1 ergebnis = InStr (x, str1, str2) i = i + 1 Loop wscript.echo i Zitieren
Smilla Geschrieben 30. November 2005 Autor Geschrieben 30. November 2005 Wenn ich jetzt X ausgeben lasse dann kommen 3 Zahlen (die 3 Positionen an denen sich "ein" befindet) aber jeweils eine Zahl zu hoch, also statt Pos. 2 kommt 3 usw. Eigentlich ja logisch, aber was lasse ich stattdessenausgeben? Zitieren
Smilla Geschrieben 30. November 2005 Autor Geschrieben 30. November 2005 Vielen Dank Jasso! :e@sy Jetzt passt es! Muss ich mir nur noch klar werden wie das alles funktioniert und das alles auch erklären können, dann geht das Beispiel per eMail ab zum Ausbilder Zitieren
Empfohlene Beiträge
Dein Kommentar
Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.