Jump to content

Sky Slate Blueberry Blackcurrant Watermelon Strawberry Orange Banana Apple Emerald Chocolate
Photo

FileReadline need help pls



  • Please log in to reply
26 replies to this topic
Servan
  • Members
  • 108 posts
  • Last active: Mar 20 2015 02:03 AM
  • Joined: 08 Dec 2013

Hallo

 

bin neu bei Autohotkey

hab problem mit FileReadline -.-

will das eine Textdatei gelesen wird aber nicht die ganze Textdatei sonder eine zeile davon und die soll per zufall ermittelt werden.

also er tut alles bis auf das random -.- er wählt immer die erste zeile -.-

 

hier mein code:

1::


Textdateipfad = C:\Users\Vita\Desktop\chatlog.txt
Loop, read, %Textdateipfad%

FileReadLine, Var, %Textdateipfad%, %rand%
send %Var%


Randzeile()
{
	Random, rand, 1, 100
}



2::ExitApp

danke schonmal



Rodney McKay
  • Members
  • 36 posts
  • Last active: Jun 29 2015 05:51 PM
  • Joined: 13 Dec 2012

Hallo!

Textdateipfad = C:\Users\Vita\Desktop\chatlog.txt
Loop,
{
  FileReadLine, Ausgabevariable, %Textdateipfad%, %A_Index%
  If Errorlevel
  {
    Zeilenanzahl := A_Index
    break
  }
}

Random, rand , 1, %Zeilenanzahl%
FileReadLine, Var, %Textdateipfad%, %rand%
send %Var%

mit freundlichen Grüßen

Rodney



Servan
  • Members
  • 108 posts
  • Last active: Mar 20 2015 02:03 AM
  • Joined: 08 Dec 2013

Geht leider nicht jetzt tut es nichts und beendet sich

Textdateipfad = C:\Users\Vita\Desktop\chatlog.txt
Loop,
{
  FileReadLine, Ausgabevariable, %Textdateipfad%, %A_Index%
  If Errorlevel
  {
    Zeilenanzahl := A_Index
    break
  }
}

Random, rand , 1, %Zeilenanzahl%
FileReadLine, Var, %Textdateipfad%, %rand%
send %Var%



Rodney McKay
  • Members
  • 36 posts
  • Last active: Jun 29 2015 05:51 PM
  • Joined: 13 Dec 2012

Hallo!

 

Wenn ich das richtig verstanden habe willst du jedesmal wenn du 1 dückst einen Zufallszeile aus der Datei.

 

Deine Funktion Randzeile bewirkt eigentlich gar nichts, ebenso das Loop, read.

 

So müsste es eigentlich funktionieren:

Textdateipfad = C:\Users\Vita\Desktop\chatlog.txt
Loop,
{
  FileReadLine, Ausgabevariable, %Textdateipfad%, %A_Index%
  If Errorlevel
  {
    Zeilenanzahl := A_Index
    break
  }
}
1::
Random, rand , 1, %Zeilenanzahl%
FileReadLine, Var, %Textdateipfad%, %rand%
Send, %Var%
Return



Servan
  • Members
  • 108 posts
  • Last active: Mar 20 2015 02:03 AM
  • Joined: 08 Dec 2013

danke funkt super eine kleinichkeit noch bitte siehe unten



Servan
  • Members
  • 108 posts
  • Last active: Mar 20 2015 02:03 AM
  • Joined: 08 Dec 2013

hab wieder ein prob mit dem selben code der ist super nur eine kleinichkeit noch -.-

also der wählt die zeile per zufall aber nur einmal nicht mehrmals im laufenden programm

 

zb::

 

send %Var%    ;;ergbnis ist per zufall  zeile 5

send %Var%    ;;ergbnis ist per zufall  zeile 5

send %Var%    ;;ergbnis ist per zufall  zeile 5

send %Var%    ;;ergbnis ist per zufall  zeile 5

 

und ich will aber das er das jedesmal neu per zufall auswählt im laufenden programm siehe unten

 

zb::

send %Var%    ;;ergbnis ist per zufall  zeile 7

send %Var%    ;;ergbnis ist per zufall  zeile 9

send %Var%    ;;ergbnis ist per zufall  zeile 4

send %Var%    ;;ergbnis ist per zufall  zeile 1

send %Var%    ;;ergbnis ist per zufall  zeile 3

 

 

hier der code von Rodney McKay

Textdateipfad = C:\Users\Vita\Desktop\chatlog.txt
Loop,
{
  FileReadLine, Ausgabevariable, %Textdateipfad%, %A_Index%
  If Errorlevel
  {
    Zeilenanzahl := A_Index
    break
  }
}
1::
Random, rand , 1, %Zeilenanzahl%
FileReadLine, Var, %Textdateipfad%, %rand%
Send, %Var%
Return

danke für eure mühen -.-



Servan
  • Members
  • 108 posts
  • Last active: Mar 20 2015 02:03 AM
  • Joined: 08 Dec 2013

 



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012
Wem du 1 drückst sollte genau das passieren.
Schau dir den Code unter 1:: nochmal an.

Visit the new forum ahkscript.org.

http://ahkscript.org


Servan
  • Members
  • 108 posts
  • Last active: Mar 20 2015 02:03 AM
  • Joined: 08 Dec 2013

nein genau das passiert nicht ich weiss schon das das so aussieht weil nur eine send %var% befehl enthalten ist aber nimm denn code zb und schreib dazu

 

send %Var%  

send %Var%  

send %Var%   

 

dann bekommst du nehmlich drei mal die gleichzeile, hoffe das versteht jemand,...    -.-



nnnik
  • Members
  • 1625 posts
  • Last active: Jan 24 2019 02:19 PM
  • Joined: 28 Jul 2012
Ja wieso sollte sich auch der Inhalt von var verändern ?
Sein Code Unter 1:: bedeutet das folgende:
Errechne eine Zufallszahl von 1 bis zur anzahl der Zeilen und schreibe das Ergebnis in rand.
Lese die.Zeile nr rand und schreibe das Ergebnos in var.
Sende var als tasteneingaben.
Deins befeutet sende var als tasteneingabe.
Dann ist es logisch, dass der gesendete text immer.gleich bleibt, solange var gleich bleibt.
Dir fehlen die schritte zum verändern von var.

Visit the new forum ahkscript.org.

http://ahkscript.org


Servan
  • Members
  • 108 posts
  • Last active: Mar 20 2015 02:03 AM
  • Joined: 08 Dec 2013

Ja ich brauch Hilfe wie ich das mache das es immer eine andere Zeile auswählt zb wenn ich
Sand %var%
Sand %var%
das es nicht die selbe Zeile ist per rundam zwei mal gleich ausgibt sondern verschieden Zeilen und das macht er nicht und ich finde auch im Internet nichts dazu hab es drei mal schon erklärt kann mir bitte jemand helfen



Rodney McKay
  • Members
  • 36 posts
  • Last active: Jun 29 2015 05:51 PM
  • Joined: 13 Dec 2012

Hallo!

 

Ich glaube du verstehts den Script nicht.

Hier ist er nochmal mit erklärung hinter dem ;

Textdateipfad = C:\Users\Vita\Desktop\chatlog.txt
Loop, ;in der Schleife wird die Zeilenanzahl ermittelt
{
  FileReadLine, Ausgabevariable, %Textdateipfad%, %A_Index% ;Hier wird eine Zeile nach der anderen ausgelesen, A_Index zählt mit jeder Zeile weiter
  If Errorlevel ;wenn keine Zeile mehr da ist wird Errorlevel ausgelöst
  {
    Zeilenanzahl := A_Index-1 ;Hier wird die Letze Zeile in die Variable geschrieben ACHTUNG fehler von mir: nach dem A_Index gehört noch ein -1
    break ;Hier wird die Schleife abgebrochen
  }
}
1:: ;Der Hotkey 1 startet folgende Zeilen
Random, rand , 1, %Zeilenanzahl% ;hier wird eine Zufallszahl zwischen 1 und der Zeilenanzahl ermittelt und in rand geschrieben
FileReadLine, Var, %Textdateipfad%, %rand% ;hier wird Zeile %rand% in die Variable Var ausgelesen
Send, %Var% ;hier wird die Variable Var gesendet
Return ;hier wird der Hotkey beendet

Jedes mal wenn du die Taste 1 drückst erhälts du eine Zufallszeile, willst du aber mehr Zufallszeile hintereinander musst du das so machen:

Textdateipfad = C:\Users\Vita\Desktop\chatlog.txt
Loop, ;in der Schleife wird die Zeilenanzahl ermittelt
{
  FileReadLine, Ausgabevariable, %Textdateipfad%, %A_Index% ;Hier wird eine Zeile nach der anderen ausgelesen, A_Index zählt mit jeder Zeile weiter
  If Errorlevel ;wenn keine Zeile mehr da ist wird Errorlevel ausgelöst
  {
    Zeilenanzahl := A_Index-1 ;Hier wird die Letze Zeile in die Variable geschrieben ACHTUNG fehler von mir: nach dem A_Index gehört noch ein -1
    break ;Hier wird die Schleife abgebrochen
  }
}
1:: ;Der Hotkey 1 startet folgende Zeilen
Loop, 2 ;Die Schleife sendet jetzt 2 Zufallszeilen
{
  Random, rand , 1, %Zeilenanzahl% ;hier wird eine Zufallszahl zwischen 1 und der Zeilenanzahl ermittelt und in rand geschrieben
  FileReadLine, Var, %Textdateipfad%, %rand% ;hier wird Zeile %rand% in die Variable Var ausgelesen
  Send, %Var% ;hier wird die Variable Var gesendet
}
Return ;hier wird der Hotkey beendet

und wenn sich deine Datei chatlog.txt verändert/verlängert dann musst du jedes mal wenn du den Hotkey drückst die Zeilenanzahl ermittlen, was aber den Script je nach länge der chatlog.txt mehr oder weniger verlangsamt:

Textdateipfad = C:\Users\Vita\Desktop\chatlog.txt
1:: ;Der Hotkey 1 startet folgende Zeilen
Loop, ;in der Schleife wird die Zeilenanzahl ermittelt
{
  FileReadLine, Ausgabevariable, %Textdateipfad%, %A_Index% ;Hier wird eine Zeile nach der anderen ausgelesen, A_Index zählt mit jeder Zeile weiter
  If Errorlevel ;wenn keine Zeile mehr da ist wird Errorlevel ausgelöst
  {
    Zeilenanzahl := A_Index-1 ;Hier wird die Letze Zeile in die Variable geschrieben ACHTUNG fehler von mir: nach dem A_Index gehört noch ein -1
    break ;Hier wird die Schleife abgebrochen
  }
}
Loop, 2 ;Die Schleife sendet jetzt 2 Zufallszeilen
{
  Random, rand , 1, %Zeilenanzahl% ;hier wird eine Zufallszahl zwischen 1 und der Zeilenanzahl ermittelt und in rand geschrieben
  FileReadLine, Var, %Textdateipfad%, %rand% ;hier wird Zeile %rand% in die Variable Var ausgelesen
  Send, %Var% ;hier wird die Variable Var gesendet
}
Return ;hier wird der Hotkey beendet

mit freundlichen Grüßen

Rodney



Servan
  • Members
  • 108 posts
  • Last active: Mar 20 2015 02:03 AM
  • Joined: 08 Dec 2013

ok jetzt also der code ist gut und ich verstehe das schon hab nehmlich auch so gedacht gestern das ich das mit einer zweiten loop lösen kann funkt aber nicht....

und zwar habe ich den hotkey 1:: gesetzt damit ich das testen kann weill sonst das programm einfach los schreibt und ich nicht dazu komme es zu testen im notepad darum der hotkey 1::

 

und ich kann nicht so viele loops machen da würd ich warscheinlich weit über 300 loops machen müssen und wie du schon sagtest das würd dann extrem langsam werden....

 

also im orginalen script wo ich das einbauen will brauch ich garkein hotkey .... und wenn ich denn code oben von dir in mein orginal code einbauen passiert genau das selbe halt nur zweimal wiederhollung die selben  "zwei " zeilen aus zufall ausgesucht und die sich aber wiederholen bis ich das prog neustartet dann kommt gibt es mir zwei andere zeile aber auch wieder zweimal die gleich ausgabe immer wieder solange bis ich das prog neustarte mhhh ka wie ich das erklären soll aber ich denke mit ein einfachen randomsleep funktion kann ich das erklären....

 

diese randomsleep funktion wartet unterschiedlich  genau so eine funktion siehe unten brauche ich aber für " filereadline"

 

----------------------------------------------

RandomSleep(10000,360000)   ;;ergebnis ist sagen wir 4000

RandomSleep(10000,360000)   ;;ergebnis ist sagen wir 80000

RandomSleep(10000,360000)   ;;ergebnis ist sagen wir 1000

 

RandomSleep(min,max)
{
    Random, random, %min%, %max%
    Sleep %random%
}
-----------------------------------------

 

 

sorry echt sorry für die ganze mühe -.- ich krieg das einfach nicht hin -.-



Servan
  • Members
  • 108 posts
  • Last active: Mar 20 2015 02:03 AM
  • Joined: 08 Dec 2013

ich habs jetzt entlich muahahahahahahaha

 

also ich schreib den beitrag fals nochjemand das selbe problem haben sollte hier die lösung

man muss nur jedesmal wenn man  zb: "send %var%"  macht, die variable "var" leeren dann kommt der Random und FileReadLine und zum schluss wieder send %var%

in den letzten 7 zeilen code seht ihr was ich meine.

 

ergebniss:

somt bekommt man jedesmal eine andere zeile als random auch dann wenn man kein hotkey gesetzt hat und man muss nicht 300 loops schreiben  :) und ein großen dank an Rodney McKay ohne seine hilfe hätt ich mich aufgehängt hahah XD

Textdateipfad = C:\Users\Vita\Desktop\chatlog.txt

Loop,
{
  FileReadLine, Ausgabevariable, %Textdateipfad%, %A_Index%
  If Errorlevel
  {
    Zeilenanzahl := A_Index-1
    break
  }


}


Random, rand , 1, %Zeilenanzahl%
FileReadLine, var, %Textdateipfad%, %rand%
SendRaw, %var%        ;wichtig SendRaw ist besser (wenn man txt oder ini lesen tut) als Send sonst gibt es probleme mit Hotkeys wie zb  "!"

var:=""
Send {ENTER}

Random, rand , 1, %Zeilenanzahl%
FileReadLine, var, %Textdateipfad%, %rand%
SendRaw, %var%



Rodney McKay
  • Members
  • 36 posts
  • Last active: Jun 29 2015 05:51 PM
  • Joined: 13 Dec 2012
✓  Best Answer

Hallo!

 

 

und ich kann nicht so viele loops machen da würd ich warscheinlich weit über 300 loops machen müssen und wie du schon sagtest das würd dann extrem langsam werden....

Nö, nur einen:

Textdateipfad = C:\Users\Vita\Desktop\chatlog.txt
Loop,
{
  FileReadLine, Ausgabevariable, %Textdateipfad%, %A_Index%
  If Errorlevel
  {
    Zeilenanzahl := A_Index-1
    break
  }
}
Loop, 2
{
  Random, rand , 1, %Zeilenanzahl%
  FileReadLine, Var, %Textdateipfad%, %rand%
  Send, %Var%
  Return
}