Zahlen vergleichen

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

Prototyp
Posts: 21
Joined: 02 May 2017, 14:43
Location: Deutschland NRW

Zahlen vergleichen

03 May 2017, 02:35

Hallo, ich habe ein kleines Problem.

Es ist so, per Random erzeuge ich "Zufallszahlen" und packe die in ein String.

ifnotinstring,liste, % zahl
Liste := Liste Zahl " "

läuft soweit ganz gut aber, wenn z.B als erstes 56 kam und danach die 5 oder 6, dann verwirft er die 5 oder 6.

genau das selbe spiel mit dem Parsen

If InStr(A_LoopField, zahlen)

wenn die 1 oder die 6 kam aber in der liste z.B die 16 ist, dann sagt er mir das er es gefunden hätte..

Und noch ein Komfortproblem



Loop
{
Random, Zahl , 1, %bereich%
ifnotinstring,liste, % zahl
{
Liste := Liste Zahl " "
GuiControl,, Display, % Liste
eintrag += 1
Zahlen%Eintrag% := Zahl
}

if eintrag = %Anzahl%
{
eintrag = 0
break
}
}

Um die generierten Zahlen zu Parsen, verwende ich " Zahlen%Eintrag% := Zahl "

und dann muss ich Loopen

Loop, %Anzahl%
{
Zahlen := Zahlen%A_index%
If InStr(A_LoopField, zahlen)
Zaehlen++
}


Ich möchte wenn es geht die Liste mit dem A_loopfield vergleichen.

mache ich das, dann müssen die Generierten zahlen auch exakt in der selben Reihenfolge generiert worden sein...

z.B

1 4 9 15
ist die Reihenfolge nicht exakt

4 1 9 15

dann findet er nämlich Garnichts.

Mfg
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Zahlen vergleichen

03 May 2017, 05:15

Bin nicht sicher ob ich dein Problem verstanden habe ...
wenn die 1 oder die 6 kam aber in der liste z.B die 16 ist, dann sagt er mir das er es gefunden hätte..
Scheint mir logisch, da in dem string 16 die zahlen 1 als auch 6 jeweils vorkommen.

Code: Select all

FoundPos := InStr(16, 6) ; sucht die 6 im string 16
MsgBox % FoundPos ; ergebnis = 2, hat eine 6 an position 2 im string 16 gefunden
läuft soweit ganz gut aber, wenn z.B als erstes 56 kam und danach die 5 oder 6, dann verwirft er die 5 oder 6.
Hier soll er die 56 in der 5 oder der 6 suchen, welche er so jeweils nicht finden kann. Was wäre daran falsch?

Code: Select all

FoundPos := InStr(5, 56) ; sucht 56 im "string" 5
MsgBox % FoundPos ; ergebnis = 0, konnte 56 an keiner position im string 5 finden
Es ist so, per Random erzeuge ich "Zufallszahlen" und packe die in ein String.
Soll das tatsächlich ein string (hier eine fortlaufende zahlenkette) sein oder ein array in welchem alle ermittelten/deponierten werte einzeln abgefragt und verglichen werden können?

PS. wenn du im forum-editor die code-tags benutzt, lässt sich dein code besser lesen. Danke :)
Prototyp
Posts: 21
Joined: 02 May 2017, 14:43
Location: Deutschland NRW

Re: Zahlen vergleichen

03 May 2017, 06:13

Code: Select all

FoundPos := InStr(16, 6) ; sucht die 6 im string 16
MsgBox % FoundPos ; ergebnis = 2, hat eine 6 an position 2 im string 16 gefunden
Genau andersrum. er soll die 6 NICHT in 16 finden. Nur wenn auch wirklich die 6 in Array ist.
läuft soweit ganz gut aber, wenn z.B als erstes 56 kam und danach die 5 oder 6, dann verwirft er die 5 oder 6.
Hier soll er die 56 in der 5 oder der 6 suchen, welche er so jeweils nicht finden kann. Was wäre daran falsch?

Genau das Gegenteil. er soll nicht die 5 oder 6 in der 56 finden. nur wenn die 5 oder 6 auch tatsächlich vorhanden ist.

Code: Select all

FoundPos := InStr(5, 56) ; sucht 56 im "string" 5
MsgBox % FoundPos ; ergebnis = 0, konnte 56 an keiner position im string 5 finden
Es ist so, per Random erzeuge ich "Zufallszahlen" und packe die in ein String.
Soll das tatsächlich ein string (hier eine fortlaufende zahlenkette) sein oder ein array in welchem alle ermittelten/deponierten werte einzeln abgefragt und verglichen werden können?
wohl ein Array.

kenne auch leider den unterschied nicht zwischen String und Array.
User avatar
nnnik
Posts: 4500
Joined: 30 Sep 2013, 01:01
Location: Germany

Re: Zahlen vergleichen

03 May 2017, 07:17

Ein Array ist eine Liste von Werten. Ein String ist ein einzelner langer Textwert.
Bei dem String kannst du mit viel Arbeit und Code etwas wie einen Array erzeugen. Es lohnt sich jedoch eher direkt auf Arrays umzusteigen, da diese sich oftmals einfacher an die Problemstellung anpassen lassen.
Dein ( Zahlen%A_Index% ist z.B. ein Array jedoch kein echter Array im eigentlichen Sinne. )

In der deutschen Hilfe findest du unter Ausdrücke ( Expressions ) eine andere Form wie man mit AutoHotkey Code schreibt.
Man findet dort auch eine andere Form des Ifs, Vergleichsoperatoren und viele andere Dinge die dir sehr nützlich sein könnten.
Recommends AHK Studio
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Zahlen vergleichen

03 May 2017, 08:52

Genau andersrum. er soll die 6 NICHT in 16 finden. Nur wenn auch wirklich die 6 in Array ist.
kenne auch leider den unterschied nicht zwischen String und Array.
Hier liegt dein problem. Eine zeichenkette besteht aus aneinandergereihten zeichen ohne jegliche separierung.

Ein (echtes) array speichert jeden wert (an einer definierten position im speicher) separat ab - vergleichbar einer zelle in Microsoft Excel.
Diese position ist fix, lässt sich also ohne problem ansprechen, und die darin gespeicherten werte auswerten.

Code: Select all

#SingleInstance, Force

createArray(1,100,9)			; aufruf einer funktion zum erstellen eines arrays, welches genau 9 elemente/werte enthält. Der wertebereich liegt zw 1-100.
Sleep, 1000				; pause vor ...
ToolTip					; schließen des tooltips
Return

createArray(minNo,maxNo,arrayLength){		; funktion zur erstellung des arrays
  Global								; variablen zur weiteren verwendung "Global" setzen
  Loop, %arrayLength% {					; schleifendurchlauf nach anzahl der gewünschten elemente
    Random, randomNo, %minNo%, %maxNo%	; zufallswert ermitteln
    array%A_Index% := randomNo				; zufallswert im array ablegen. Elemente sind als einzelne variablen abfragbar: array1, array2, ...
    ; ------------------------------------------------------------------------------------------------------------------------------
    If (A_Index != 1)						; dies dient nur für die anzeige im tooltip ...
      separator := "|"						; und ...
    string := string separator array%A_Index%	; könnte ... 
    ToolTip %string%						; problemlos ... 
    Sleep, 500							; entfernt werden.
    ; ------------------------------------------------------------------------------------------------------------------------------    
    }
  Return								; zurück auf los
}

getArray(Position){														; abfrage der elemente des arrays über die tasten 1-9 der tastatur
	MsgBox % "Im array an position " Position " steht der Wert: " array%Position%	; ausgabe
	}

1::getArray(A_ThisHotkey) ; die taste 1 der tastatur liefert den 1. wert des arrays
3::getArray(A_ThisHotkey) ; und so weiter ...
4::getArray(A_ThisHotkey)
5::getArray(A_ThisHotkey)
6::getArray(A_ThisHotkey)
7::getArray(A_ThisHotkey)
8::getArray(A_ThisHotkey)
9::getArray(A_ThisHotkey)

!s::Suspend, Toggle 		; WICHTIG ! Durch drücken von Alt+s lassen sich die gerade zur Abfrage des arrays benutzten Hotkeys wieder zurücksetzen !!
!x::ExitApp			; Notausgang: Script beenden.
Wie nnnik bereits ausgeführt hat. Dies ist ein pseudo-array.
Falls du ein zeichenkettenjunkie bist wäre noch die csv-krücke eine alternative.
Good luck.
Prototyp
Posts: 21
Joined: 02 May 2017, 14:43
Location: Deutschland NRW

Re: Zahlen vergleichen

03 May 2017, 10:09

Vielen dank erstmal. ich versuche das erstmal zu kapieren. lg
Prototyp
Posts: 21
Joined: 02 May 2017, 14:43
Location: Deutschland NRW

Re: Zahlen vergleichen

04 May 2017, 09:22

Ok, ich habe es wohl verstanden, zu 50%. Zumindest Konnte ich mit dem Script was anfangen.
Habe mir natürlich paar Tage vorher schon die Deutsche Dokumentation von den Arrays durchgelesen, aber so wie Du es gelöst hast, ist nirgends zu lesen...


Habe nur noch das Problem mit dem Zahlen beim vergleichen und ausschließen..

Wenn Du dafür noch eine einfache :!: :crazy: Lösung für mich hättest dann wäre alles perfekt.

lg
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Zahlen vergleichen

04 May 2017, 09:45

Mir ist im Moment nicht ganz klar, wo die zahlen, welche du gegen die werte im array vergleichen möchtest, herkommen?

Datei/ebenfalls frisch generiert/manuelle eingabe (stichwort: input) ??
Wenn gefunden/verglichen, was dann - wohin mit dieser erkenntnis (stichwort:output) ?
In welchem kontext/zusammenhang steht denn die ganze aktion?? (persönliches interesse bzgl sinnhaftigkeit)

:)

PS.
a) sollen die werte im array eigentlich einzigartig sein, oder darf ein wert auch mehrfach vergeben werden (wie aktuell im script der fall)?
b) wenn mehrfachvergabe, soll nach dem ersten treffer weitergesucht werden oder nicht?
Prototyp
Posts: 21
Joined: 02 May 2017, 14:43
Location: Deutschland NRW

Re: Zahlen vergleichen

04 May 2017, 10:53

Also, ich vergleiche Randomzahlen mit einer eingelesenen txt Datei. Zeile für Zeile.

Matches werden in eine Liste gespeichert. Es muss einzigartig sein.

Läuft ja auch alles soweit ganz gut, nur eben das kleine Problem mit 1 Stelligen Zahlen. alles ab 2 Stellen läuft perfekt.

lg

Edit
So, habe das Problem mit den gleichen Zahlen gelöst. Aber nur beim generieren.


Code: Select all

	Ar :=[]
	i :=1
	Erneuern :=0
	Loop
		{
			Random, Zahlen,1,1000
			j:=1
			Loop 10
				{
					if (Ar[j]==Zahlen)
						{
							Erneuern :=1
							break
						}
					j++
				}
			if (Erneuern!=1)
				{
					Ar[i]:=Zahlen
					i++
					if (i==11)
						break
				}
			Erneuern := 0
		}
		i:=1
		Zwischenspeicher:=""
		Loop 10
		{
			Zwischenspeicher.=Ar[i] " "
			i++
		}
		msgbox, % Zwischenspeicher
	return
just me
Posts: 9425
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Zahlen vergleichen

05 May 2017, 02:46

Kannst Du mal ein Beispiel für eine Zeile aus Deiner Textdatei einstellen und etwas genauer beschreiben, welche Bedingungen für eine Übereinstimmung mit den generierten Zufallszahlen erfüllt sein müssen? Sind die Zahlen in den Zeilen der Textdatei sortiert?
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Zahlen vergleichen

05 May 2017, 04:01

just me wrote:Kannst Du mal ein Beispiel für eine Zeile aus Deiner Textdatei einstellen und etwas genauer beschreiben, welche Bedingungen für eine Übereinstimmung mit den generierten Zufallszahlen erfüllt sein müssen? Sind die Zahlen in den Zeilen der Textdatei sortiert?
Dachte schon ich bin plötzlich blöd geblieben. Mir verschließt sich dieser code und die zusammenhänge. So am I totally Bahnhof :crazy:
just me
Posts: 9425
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Zahlen vergleichen

05 May 2017, 09:33

Im Zweifel, frag den Angeklagten! ;)
Prototyp
Posts: 21
Joined: 02 May 2017, 14:43
Location: Deutschland NRW

Re: Zahlen vergleichen

12 May 2017, 14:18

just me wrote:Kannst Du mal ein Beispiel für eine Zeile aus Deiner Textdatei einstellen und etwas genauer beschreiben, welche Bedingungen für eine Übereinstimmung mit den generierten Zufallszahlen erfüllt sein müssen? Sind die Zahlen in den Zeilen der Textdatei sortiert?
habe es doch wieder mit if gemacht, ist zwar langsamer, aber es läuft... Performance habe ich durch andere Optimierung rausgeholt..

Code: Select all

	loop, parse, Vergleichzeile%Zeile%, %A_tab% `r ; xXx
																	{	
																		if a_index > %maenge%
																			break
																		GuiControl,, Vergleichzeile2Display, % Vergleichzeile%Zeile%

													
																			if A_loopfield = %Suchen%
																		{
																			Zaehlen++
																		}
																	}
Last edited by Prototyp on 15 May 2017, 09:39, edited 1 time in total.
just me
Posts: 9425
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Zahlen vergleichen

12 May 2017, 17:05

Prototyp wrote:Habe ein neues Problem.
Ich habe noch das alte Problem. Ich verstehe immer noch nicht, was Du da machen willst. Kannst oder willst Du meine Frage nicht beantworten?
Prototyp
Posts: 21
Joined: 02 May 2017, 14:43
Location: Deutschland NRW

Re: Zahlen vergleichen

13 May 2017, 06:01

just me wrote:
Prototyp wrote:Habe ein neues Problem.
Ich habe noch das alte Problem. Ich verstehe immer noch nicht, was Du da machen willst. Kannst oder willst Du meine Frage nicht beantworten?
Doch natürlich. Also, ich habe ein kleines Programm erstellt, der mir automatisch meine Überweisungen mit Prioritäten versieht, je nach Kontostand und Dringlichkeit, erledigt, verwaltet und überweist. dadurch entfallen die dauerauftragsgebühren.
zudem wird jede Konto Aktivität aufgezeichnet.




lg
User avatar
Gucky_87
Posts: 375
Joined: 03 Jul 2014, 05:09

Re: Zahlen vergleichen

09 Jun 2017, 03:59

Code? Wo ist Dein Code?

Oder hier klicken
BoBo
Posts: 6564
Joined: 13 May 2014, 17:15

Re: Zahlen vergleichen

09 Jun 2017, 05:58

Prototyp wrote:
just me wrote:
Prototyp wrote:Habe ein neues Problem.
Ich habe noch das alte Problem. Ich verstehe immer noch nicht, was Du da machen willst. Kannst oder willst Du meine Frage nicht beantworten?
Doch natürlich. Also, ich habe ein kleines Programm erstellt, der mir automatisch meine Überweisungen mit Prioritäten versieht, je nach Kontostand und Dringlichkeit, erledigt, verwaltet und überweist. dadurch entfallen die dauerauftragsgebühren.
zudem wird jede Konto Aktivität aufgezeichnet.




lg
Jetzt hast du zwar die frage zu seiner frage beantwortet, aber nicht seine ursprüngliche frage. Hier nochmal, weils scheinbar so schwer ist ...
just me wrote:
Kannst Du mal ein Beispiel für eine Zeile aus Deiner Textdatei einstellen und etwas genauer beschreiben, welche Bedingungen für eine Übereinstimmung mit den generierten Zufallszahlen erfüllt sein müssen? Sind die Zahlen in den Zeilen der Textdatei sortiert?
hd0202
Posts: 183
Joined: 04 Oct 2013, 03:07
Location: Germany near Cologne

Re: Zahlen vergleichen

21 Dec 2017, 01:16

Du musst die Zufallszahl für den Vergleich eindeutig machen, indem Du sie mit dem Trennzeichen der Liste umgibst:

Code: Select all

Liste := " "
Loop
{
Random, Zahl , 1, %bereich%
ifnotinstring,liste, % " " zahl " "
{
Liste := Liste Zahl " "
GuiControl,, Display, % Liste
eintrag += 1
Zahlen%Eintrag% := Zahl
}

if eintrag = %Anzahl%
{
eintrag = 0
break
}
}
Dein anderes Problem ist mir auch nicht klar :?:

Hubert

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: gero and 42 guests