Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Schleifendurchläufe zählen bei Do While...Loop in VBS

Empfohlene Antworten

Veröffentlicht

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 

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 


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

@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^^.

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 ;)

@jasso: hab ich gleich korrigiert gehabt ;)

@smilla: wie, endlosschleife? wo setzt du denn das echo ein?

s'Amstel

@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.

Ich habe oberhalt des "Loop" das wscript.echo eingesetzt.

Baue ich es unter die Do...Loop Schleife dann bekomme ich keine Ausgabe :(

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.

@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.

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 

*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 

@Jasso: Danke :) was lasse ich jetzt ausgeben?

*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

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?

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 ;)

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.