Loop frage!

Stelle Fragen zur Programmierung mit Autohotkey

Moderator: jNizM

animagus46
Posts: 23
Joined: 19 Dec 2014, 15:23

Loop frage!

12 Jun 2016, 04:17

Hallo zusammen,
ich komme auf keine Lösung!
Hoffe es kann mir jemand einen Tipp geben, wie ich das lösen kann.

Ich versuche mit dem Next Button, das nächste MP3 File anzuzeigen.
Ohne den Befehl "MsgBox % mp3name", läuft es nur noch durch.
Wie kann ich dem Script dazu bringen das es nur ein MP3 File anzeigt und
beim nächsten klick auf Next das nächste anzeigt?

A_LoopFileName increase sollte nicht gehen, oder ich habes nicht heraus gefunden.
So könnte ich den Script ohne ein Loop ausführen.

Besten Dank für euren Tipp.

Gruss
Animagus

Code: Select all

Loop, C:\MP3P\*.mp3
mp3name = %A_LoopFileName%

Gui, Add, Text, vdateiname , %mp3name%
Gui, Add, Button, gButtonNext, Next
Gui, Show,
return

ButtonNext:
Loop, C:\MP3P\*.mp3 
{
mp3name = %A_LoopFileName%
GuiControl, Text, dateiname , %mp3name%
MsgBox % mp3name
}
return

GuiClose:
ExitApp
just me
Posts: 9451
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Loop frage!

12 Jun 2016, 04:46

Moin,

Code: Select all

Loop, C:\MP3P\*.mp3
   mp3name = %A_LoopFileName%
läuft durch sämtliche mp3-Dateien im Ordner und speichert dabei den jeweils aktuellen Dateinamen in der Variablen mp3name. Damit steht dort nach Ende der Schleife genau ein Name, und zwar der letzte.

Du solltest aber alle Dateinamen innerhalb der Schleife speichern. Dafür eignet sich bestens ein einfaches Array. Das sähe dann z.B. so aus:

Code: Select all

mp3array := [] ; Array initialisieren
Loop, C:\MP3P\*.mp3
   mp3array[A_Index] := A_LoopFileName ; aktuellen Dateinamen im Array unter dem aktuellen Index speichern.
Die Gesamtzahl der im Array abgelegten Dateien liefert Dir (siehe):

Code: Select all

mp3anzahl := mp3array.Length()
Die einzelnen Elemente werden mit

Code: Select all

mp3name := mp3array[1] ; Arrayelement mit Index 1
angesprochen. Anstelle eines direkten numerischen Werts kannst Du auch eine Variable verwenden:

Code: Select all

mp3index := 1
mp3name := mp3array[mp3index]
Diese Variable kannst Du dann in ButtonNext: 'increasen', bis die Gesamtzahl erreicht ist.



Edit:
Für den Fall, dass Du Dich damit wohler fühlst, hier noch eine 'traditionelle' Variante mit einem Pseudo-Array:

Code: Select all

Loop, C:\MP3P\*.mp3
{
   mp3array%A_Index% = %A_LoopFileName% ; aktuellen Dateinamen als Pseudoarray speichern.
   mp3anzahl = %A_Index% ; mitzählen
}
mp3index = 1
mp3name := mpp3array%A_Index% ; Wichtig: Hier muss es := sein!!!
animagus46
Posts: 23
Joined: 19 Dec 2014, 15:23

Re: Loop frage!

12 Jun 2016, 06:54

Besten Dank just me,

ich habe auch schon daran gedacht an so einer Lösung, aber ich habe gehofft das es einfacher wäre....
mit deinem Tipp, habe ich es so jetzt gelöst.

Danke dir nochmals.
Gruss
Animagus

Code: Select all

mp3array := [] ; Array initialisieren
mp3index := 1

Loop, C:\MP3P\*.mp3
   mp3array[A_Index] := A_LoopFileName ; aktuellen Dateinamen im Array unter dem aktuellen Index speichern.
   mp3anzahl := mp3array.Length()
   mp3name := mp3array[mp3index]

Gui, Add, Text, vdateiname , %mp3name%
Gui, Add, Button, gButtonNext, Next
Gui, Show, 

return

ButtonNext:
If  (mp3anzahl == mp3index)
	mp3index := 0

mp3index ++
mp3name := mp3array[mp3index]
GuiControl, Text, dateiname , %mp3name%
return

GuiClose:
ExitApp
just me
Posts: 9451
Joined: 02 Oct 2013, 08:51
Location: Germany

Re: Loop frage!

12 Jun 2016, 10:25

Na ja, noch 'einfacher' geht es ja kaum. Du wirst Dir übrigens auf Dauer einen Gefallen tun, wenn Du gleichartige Einrückungen auch nur für zusammenhängende Codeblöcke nutzt. Das bedeutet im konkreten Fall:

Code: Select all

Loop, C:\MP3P\*.mp3
   mp3array[A_Index] := A_LoopFileName ; aktuellen Dateinamen im Array unter dem aktuellen Index speichern.
mp3anzahl := mp3array.Length()
mp3name := mp3array[mp3index]
Nur die erste Anweisung nach der Loop Anweisung wird wiederholt, solange Du keine Blöcke per { ... } definierst. Und das ist in diesem Fall auch gut so, weil die letzen beiden Anweisung nur einmal ausgeführt werden müssen.
animagus46
Posts: 23
Joined: 19 Dec 2014, 15:23

Re: Loop frage!

12 Jun 2016, 11:04

Ja du hast recht just me.
Einfacher wird es wohl nicht mehr gehen.

Dein Info wegen dem "Einrückungen" habe ich nicht gedacht.
Bei einer IF Anweisung habe ich es so immer gemacht.

Merci.

Gruss
Animagus

Return to “Ich brauche Hilfe”

Who is online

Users browsing this forum: No registered users and 70 guests