InStr -Suche mit mehreren Kriterien

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

User avatar
Meister Lampe
Posts: 231
Joined: 06 Apr 2014, 13:28

InStr -Suche mit mehreren Kriterien

Post by Meister Lampe » 03 Jan 2024, 17:05

Hallo zusammen!

Zuerst wünsche ich allen in der Community nochmal ein Gutes Neues Jahr!

Dann zu meinem Anliegen:
Ich hadere gerade mit der If InStr-Funktion. Es geht darum, eine Zeichenfolge zu trennen, falls darin spezifische Trennzeichen enthalten sind.
Beispiel:

Code: Select all

If InStr(Zeichenkette, "_")
      {Split ...
}
else
...
Das trennt die Zeichenkette beim Unterstrich, falls einer existiert. Analog funktioniert das mit dem Bindestrich. Ich möchte jetzt aber trennen, falls ein Unterstrich oder ein Bindestrich vorhanden ist. Ich denke, ich muß dazu keine weitere If-Anweisung einbauen und kann das bei dem InStr() in die Klammer setzen. Ich habe das mal ohne Erfolg versucht, aber die beiden Zeichen als Trennkriterien vermutlich dort falsch verknüpft.
Wie also mache ich das korrekt?

Viele Grüße von Meister Lampe

User avatar
KruschenZ
Posts: 45
Joined: 20 Jan 2021, 07:05
Location: Germany (Rheinhessen)
Contact:

Re: InStr -Suche mit mehreren Kriterien

Post by KruschenZ » 03 Jan 2024, 17:24

Frohes Neues Jahr :-)

Ich würde es nun spontan mit

Code: Select all

StrSplit()
machen.

Schau mal hier:
https://ahkde.github.io/docs/v1/lib/StrSplit.htm

Viele Grüße

just me
Posts: 9576
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: InStr -Suche mit mehreren Kriterien

Post by just me » 04 Jan 2024, 03:13

Moin und auch für Dich ein gutes neues Jahr!
Meister Lampe wrote:Ich denke, ich muß dazu keine weitere If-Anweisung einbauen und kann das bei dem InStr() in die Klammer setzen. Ich habe das mal ohne Erfolg versucht, aber die beiden Zeichen als Trennkriterien vermutlich dort falsch verknüpft.
Was in der Doku zu InStr() hat Dich auf diese Idee gebracht?

Wenn Du die Zeichenfolge beim Vorkommen bestimmter Zeichen auftrennen willst, könnte @KruschenZs Vorschlag tun, was Du willst.

garry
Posts: 3795
Joined: 22 Dec 2013, 12:50

Re: InStr -Suche mit mehreren Kriterien

Post by garry » 04 Jan 2024, 08:38

evtl so

Code: Select all

xx :="This-is- a_test-with_followed - many words"
arr:=strsplit(xx,["-","_"])
tot:=arr.maxindex()
loop,%tot%
  {
  xx:=Arr[a_index]
  if (xx="")
    continue
  xx=%xx%
  e .= xx . "`r`n"
  }
msgbox,%e%
ExitApp

User avatar
Meister Lampe
Posts: 231
Joined: 06 Apr 2014, 13:28

Re: InStr -Suche mit mehreren Kriterien

Post by Meister Lampe » 05 Jan 2024, 18:48

Hallo!

Vielen Dank für Eure Empfehlungen. Allerdings ist das noch nicht das, was ich mir eigentlich vorgestellt hatte. Mir geht es je darum, erstmal zu wissen, ob die Trennzeichen - oder _ überhaupt in der Zeichenkette enthalten sind, denn mit Zeichenketten, wo diese sich nicht darin befinden, wird anders verfahren. Deshalb das If InStr() noch vor dem StrSplit(). Eigentlich handelt es sich um eine Negation, also If !InStr() , aber ich wollte erstmal grundsätzlich wissen, ob das überhaupt geht. Es werden also die Strings, die weder das eine, noch das andere Trennzeichen enthalten, zuerst abgearbeitet.

@ justme:
Inspirieren lassen habe ich mich insbesondere an den vielen Optionen, bei den RegEx-Funktionen unterschiedliche und eben auch mehrere zu suchende Zeichen einzugeben. Allerdings steht dort zwar, wie man einzelne alphanumerische Zeichen und auch den Unterstrich angeben kann, nicht aber den Bindestrich als Zeichen, weil der selber dort eine eigene Funktion für die Aufzählung hat.
Und dann hatte ich eben herumexperimentiert und analog wie garry es gepostet hat versucht:

Code: Select all

If !InStr(Zeichenkette, ["-","_"])
Das hat aber auch nichts gebracht.

Viele Grüße von Meister Lampe

User avatar
flyingDman
Posts: 2848
Joined: 29 Sep 2013, 19:01

Re: InStr -Suche mit mehreren Kriterien

Post by flyingDman » 05 Jan 2024, 21:03

Code: Select all

var := "Zuerst-wünsche ich allen_in der Community-nochmal ein_Gutes Neues Jahr!"
if instr(var,"-") or instr(var,"_")
	{
	for x,y in strsplit(var,["_","-"])
		lst .= y "`n"
	msgbox lst
	}
else
	msgbox "nein - oder _"
oder

Code: Select all

if (z := strsplit(var,["_","-"])).length > 1
	{
	for x,y in z
		lst .= y "`n"
	msgbox lst
	}
else
	msgbox "nein - oder _"
14.3 & 1.3.7

just me
Posts: 9576
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: InStr -Suche mit mehreren Kriterien

Post by just me » 06 Jan 2024, 03:45

@flyingDman, I'm pretty sure he's still using v1 / Ich bin ziemlich sicher, dass er noch v1 nutz!

@Meister Lampe,
Du kannst nicht einfach die Syntax einer anderen Funktion auf InStr() anwenden. Der 2. Parameter von InStr() ist laut Doku "Die Zeichenkette, nach der gesucht werden soll.", d.h. eine Zeichenkette und kein Array.

Wie flyingDman zeigt, kannst Du Dein Problem durch zwei oder mehr InStr() Aufrufe lösen.
Alternativ kannst Du unbedingt splitten (SplitArray := StrSplit(var, ["_","-"])) und danach prüfen, ob die Anzahl der Elemente in SplitArray > 1 ist: SplitArray.Length() > 1 (wenn nicht, wurden die Zeichen nicht gefunden).
Wenn Du die mehrfachen InStr() Aufrufe nicht willst, bleibt noch RegExMatch() oder dessen Kurzform:

Code: Select all

If (DeineVariable ~= "-|_") {
	(Split)

User avatar
Meister Lampe
Posts: 231
Joined: 06 Apr 2014, 13:28

Re: InStr -Suche mit mehreren Kriterien

Post by Meister Lampe » 09 Jan 2024, 17:15

Hallo zusammen!

Ich habe das Problem jetzt - zumindest vorläufig - ganz anders gelöst, indem ich die Bindestriche erstmal durch Unterstriche ersetzen lasse.

Code: Select all

 Zeichenkette := StrReplace(Zeichenkette, "-", "_")
        If !InStr(Zeichenkette, "_")
Das beinhaltet zwar noch nicht die Option, die Namen dann auch unterschiedlich wiederherzustellen, indem zwischen den Trennzeichen unterschieden wird, aber in den meisten Fällen ist das wohl nicht nötig.
Aber irgendwann bekomme ich das auch noch hin.

Vielen Dank und viele Grüße von Meister Lampe

User avatar
Meister Lampe
Posts: 231
Joined: 06 Apr 2014, 13:28

Re: InStr -Suche mit mehreren Kriterien

Post by Meister Lampe » 11 Jan 2024, 17:42

Hallo!

Ich habe noch eine ähnliche Frage zum selben Script, die sich ebenfalls mit der If InSrt() -Funktion beschäftigt. Im Tutorial sind alle möglichen optionalen Werte aufgeführt, die man einfügen kann, um die Such- oder die Ausgabekriterien fetzulegen. Ich habe allerdings noch nicht herausbekommen, wie ich ganz konkret ein Zeichen an einem bestimmen Platz in der Zeichenkette (für den konkreten Fall wäre beträfe es das erste Zeichen) überprüfen kann. Ich möchte herausbekommen, ob das erste Zeiche einer beliebig langen Zeichenkette ein Buchstabe ist und dort eine Entscheidung einbauen.
Kann ich das mit If InStr() oder muß ich dafür wieder auf RedEx zurückgreifen? Welche Optionen müßte ich dann dort eintargen?

Viele Grüße von Meister Lampe

User avatar
flyingDman
Posts: 2848
Joined: 29 Sep 2013, 19:01

Re: InStr -Suche mit mehreren Kriterien

Post by flyingDman » 11 Jan 2024, 18:16

Code: Select all

str := "a111111"
var := substr(str,1,1)
if var is alpha
	msgbox % var " ist ein Buchstabe"
else
	msgbox % var " ist kein Buchstabe"
oder

Code: Select all

str := "a111111"
msgbox % str ~= "[a-zA-Z]" = 1 ? "Buchstabe" : "kein Buchstabe"
14.3 & 1.3.7

Rohwedder
Posts: 7774
Joined: 04 Jun 2014, 08:33
Location: Germany

Re: InStr -Suche mit mehreren Kriterien

Post by Rohwedder » 24 Jan 2024, 10:32

Hallo,
auch für äÄüÜöÖßẞ geeignet:

Code: Select all

str := "ẞ111111"
msgbox % str ~= "(*UCP)^[[:alpha:]]" ? "Buchstabe" : "kein Buchstabe"

just me
Posts: 9576
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: InStr -Suche mit mehreren Kriterien

Post by just me » 24 Jan 2024, 10:44

Moin @Rohwedder,
auch für äÄüÜöÖß geeignet
Ist mir entgangen, dass mit irgendeiner Rechtschreibreform ein Großbuchstabe eingeführt wurde?

gregster
Posts: 9113
Joined: 30 Sep 2013, 06:48

Re: InStr -Suche mit mehreren Kriterien

Post by gregster » 24 Jan 2024, 10:46

Ja, den gibt's inzwischen offiziell - seit 2017. Zum Beispiel für Majuskelschrift oder Kapitälchen nützlich.

just me
Posts: 9576
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: InStr -Suche mit mehreren Kriterien

Post by just me » 25 Jan 2024, 17:29

@gregster, danke. Dass ich das noch erleben durfte ... :o

Post Reply

Return to “Ich brauche Hilfe”