InStr() mit mehreren Nadeln

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Folllast
Posts: 91
Joined: 24 Jan 2018, 04:57

InStr() mit mehreren Nadeln

14 Mar 2018, 01:57

Hallo,

ist es bei dem Befehl InStr()Fundposition := InStr(Heuhaufen, Nadel , GroßKleinSensitiv := false, Startposition := 1, Vorkommen := 1) möglich, mehrere "nadeln" anzugeben?
Ich möchte quasi im Heuhaufen nicht nur nach einer Nadel suchen, sondern auch nach Nägeln, Stiften und Schrauben suchen. und wenn einwas von denen vorkommt, wird die If-Schleife If InStr(Heuhaufen, "Nadel") nicht übersprungen.

2. Frage: ist es möglich, die zwei If-Bedingungen zu verknüpfen?
Momentan sieht mein Script so aus:

Code: Select all

if nummer between V250 and V251								; wenn die Artikelnummer zwischen V250 & V251 ist
	{				
		InStr(Heuhaufen, "Nadel")
		{
			blablabla
			continue
			}
		}
ich würde gerne die beiden Bedingungen auf eine Zeile zu bekommen. Nur der Optik halber.

Vielen Dank Schonmal.
User avatar
LuckyJoe
Posts: 335
Joined: 02 Oct 2013, 09:52

Re: InStr() mit mehreren Nadeln

14 Mar 2018, 02:28

Hallo,

bei deiner ersten Frage tippe ich mal auf RegExMatch(Heuhaufen, NadelRegEx [, AusgabeVar, Startposition := 1]), wobei RegEx (noch) nicht so mein Steckenpferd ist.

Viel Erfolg!
Lucky Joe
Herzliche Grüße aus dem Rheinland
Lucky Joe
User avatar
divanebaba
Posts: 804
Joined: 20 Dec 2016, 03:53
Location: Diaspora

Re: InStr() mit mehreren Nadeln

14 Mar 2018, 02:55

Je nach Aufgabenstellung und Lehrerempfehlung, also künstlich niedrig gehaltenem Bildungsniveau, könnte man sicherlich auch if Var contains MatchList einsetzen.
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: InStr() mit mehreren Nadeln

14 Mar 2018, 03:29

Ja in der Tat denn es ist nicht zu empfehlen if Var contains MatchList einzusetzen.
Du kannst mehrere Bedingungen über eine Oder/Und Verknüpfung kombinieren.
So wie ich das sehe willst du Entweder Schrauben oder Nadeln oder Nägel findest:
|| steht für ein logisches oder.

Code: Select all

If ( inStr( var, "Nadel" ) || inStr( var, "Schraube" ) || inStr( var, Nägel ) )
Recommends AHK Studio
just me
Posts: 9424
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: InStr() mit mehreren Nadeln

14 Mar 2018, 04:09

Abgesehen davon, dass diese Anweisung in AHK v2 nach aktuellem Stand (so) nicht mehr existieren wird, spricht meiner Meinung nach nichts gegen die Verwendung von if Var contains MatchList. Die Anweisung ist ja 'maßgeschneidert' für genau diese Problemstellung.

Wann AHK v2 für den produktiven Einsatz 'freigegeben' wird, ist weiterhin unklar. Ich bin gespannt, was früher in Betrieb geht: AHK v2 oder mein (isch bin ein Bärliner) Haupstadtflughafen BER.
Folllast
Posts: 91
Joined: 24 Jan 2018, 04:57

Re: InStr() mit mehreren Nadeln

14 Mar 2018, 04:17

nnnik wrote:Ja in der Tat denn es ist nicht zu empfehlen if Var contains MatchList einzusetzen.
Du kannst mehrere Bedingungen über eine Oder/Und Verknüpfung kombinieren.
So wie ich das sehe willst du Entweder Schrauben oder Nadeln oder Nägel findest:
|| steht für ein logisches oder.

Code: Select all

If ( inStr( var, "Nadel" ) || inStr( var, "Schraube" ) || inStr( var, Nägel ) )

ist es theoretisch auch möglich, sowas wie

Code: Select all

If ( nummer between V250 and V251 && inStr( var, "Nadel" ) || inStr( var, "Schraube" ) || inStr( var, "Nagel" ) )
zu verwenden? Also folgende Bedingung: nummer soll zwischen 250 und 251 sein und eins der Worte Nadel, Schraube und Nagel soll vorkommen.

Sind die Leerzeichen nach und vor den Klammern Pflicht oder nur "optik"?
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: InStr() mit mehreren Nadeln

14 Mar 2018, 04:26

Die Leerzeichen nach und vor der Klammer sind mein persönlicher Stil, da ich es so besser lesen kann.

Leider ist es nicht Möglich If between mit anderen Ausdrücken so zu kombinieren - gleiches gilt auch für if contains.
In AHK v2 wird zumindest contains ein Operator sein, den du dann auch kombinieren kannst.
Ich empfehle:

Code: Select all

If ( ( nummer = "V250" || nummer = "V251" ) && ( inStr( var, "Nadel" ) || inStr( var, "Schraube" ) || inStr( var, "Nagel" ) ) )
Recommends AHK Studio
Folllast
Posts: 91
Joined: 24 Jan 2018, 04:57

Re: InStr() mit mehreren Nadeln

14 Mar 2018, 04:33

nnnik wrote:Die Leerzeichen nach und vor der Klammer sind mein persönlicher Stil, da ich es so besser lesen kann.

Leider ist es nicht Möglich If between mit anderen Ausdrücken so zu kombinieren - gleiches gilt auch für if contains.
In AHK v2 wird zumindest contains ein Operator sein, den du dann auch kombinieren kannst.
Ich empfehle:

Code: Select all

If ( ( nummer = "V250" || nummer = "V251" ) && ( inStr( var, "Nadel" ) || inStr( var, "Schraube" ) || inStr( var, "Nagel" ) ) )

Code: Select all

If ( ( nummer = "V250" || nummer = "V251" ) && ( inStr( var, "Nadel" ) || inStr( var, "Schraube" ) || inStr( var, "Nagel" ) ) )
schlägt ja nur an, wenn die nummer V250 oder V251 ist. Ich brauche also alle nummern dazwischen, also auch V2501258979 und V250XABCF.
Man müsste also benutzen If ( ( nummer > "V250" && nummer < "V251" ) && ( inStr( var, "Nadel" ) || inStr( var, "Schraube" ) || inStr( var, "Nagel" ) ) ).

BTW habe ich mich entschieden, einfach ( nummer > "V250" && nummer < "V251" ) durch ( inStr( nummer, "V250" ) zu ersetzen.
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: InStr() mit mehreren Nadeln

14 Mar 2018, 04:44

Ja es wäre komisch gewesen wenn das funktioniert, da V250 schon keine Nummer ist.
250 wäre eine
Recommends AHK Studio
User avatar
Ragnar
Posts: 611
Joined: 30 Sep 2013, 15:25

Re: InStr() mit mehreren Nadeln

14 Mar 2018, 05:00

Gegebenenfalls kannst du auch, wie bereits von LuckyJoe vorgeschlagen, RegExMatch bzw. die Kurzschreibweise davon verwenden:

Code: Select all

if (var ~= "Nadel|Schraube|Nagel")
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: InStr() mit mehreren Nadeln

14 Mar 2018, 13:33

Ragnar wrote:Gegebenenfalls kannst du auch, wie bereits von LuckyJoe vorgeschlagen, RegExMatch bzw. die Kurzschreibweise davon verwenden:

Code: Select all

if (var ~= "Nadel|Schraube|Nagel")
Da bin ich doch mal hin & weg ! Das funktioniert 1:1 wie If var in ... und zwar case-sensitive. :thumbup: Merci fürs (be)lehren :thumbup:
User avatar
divanebaba
Posts: 804
Joined: 20 Dec 2016, 03:53
Location: Diaspora

Re: InStr() mit mehreren Nadeln

14 Mar 2018, 14:12

BoBo wrote:... Das funktioniert 1:1 wie If var in ... und zwar case-sensitive. :thumbup: Merci fürs (be)lehren :thumbup:
WAS? es gibt hier was zu lernen und ich stehe außen vor? War ja klar. :trollface:

Eine Needle im Haystack sollte doch, in der Regel, keineswegs vollkommen identisch mit dem Haystack sein, sondern zumeist (soll bedeuten: bei einem Großteil aller ähnlichen Anwendungen) nur ein Teil des Haystacks.
if var in ... ist übereinstimmende Identität (Case-sensitive oder nicht, weiß ich jetzt nicht). if var contains ... würde auch die Schraube in der Variablen var = Schraubendreher finden und auch im Satz var := "Schraubenzieher sind Schraubendreher" einen Treffer landen.

PS: (var ~= "Nadel|Schraube|Nagel") das ist so ziemlich der einzige RegEx-Befehl, den ich kenne und vollkommen beherrsche. :crazy: :crazy:
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: InStr() mit mehreren Nadeln

14 Mar 2018, 14:43

in: (var ~= "^(Nadel|Schraube|Nagel)$") e.g. Nagel, Schraube oder Nadel
contains: (var ~= "Nadel|Schraube|Nagel") e.g. Schraubenzieher, Schraube...
Recommends AHK Studio

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 25 guests