Dateien zählen, Dateinamen auslesen und in eigene Variable speichern?

  • Hallo zusammen,

    ich benötige Hilfe bei einem kleinen Skript.

    Zum eigentlichen Vorhaben:

    Ich benötige eine Droplist mit Einträgen. Diese Einträge sollen aus den Dateinamen gefüllt werden, die aus den Dateinamen ausgelesen werden, die sich in einem Ordner befinden. Die ausgelesenen Dateinamen sollen separat in eine Variable gespeichert werden.

    C:\TEMP\ORDNER\Datei_a.txt

    C:\TEMP\ORDNER\Datei_b.txt

    C:\TEMP\ORDNER\Datei_c.txt

    C:\TEMP\ORDNER\Datei_d.txt

    Variable_a = Datei_a.txt

    Variable_b = Datei_b.txt

    Variable_c = Datei_c.txt

    Variable_d = Datei_d.txt

    Da sich die Anzahl der Dateien unterscheiden kann, ist die Sache etwas schwieriger...

    Hierzu habe ich irgendwie keine passende Funktion gefunden. Dann kam mir die Idee, die Dateinamen auszulesen und in einer Textdatei zu packen - Das hat auch wunderbar funktioniert (obwohl es bestimmt nicht die kleverste Lösung ist). Ich habe auch versucht die Anzahl der benötigten Variablen per FileFindFirstFile zu setzen.

    Jetzt aber soll jeder Dateinamen in einer eigenen Variable gespeichert werden und dann auch in der Droplist auftauchen, aber das bekomme ich nicht hin...

  • Hallo @ValleAIT

    Das ist eigentlich überhaupt kein Problem. Wie du die Combobox füllst, weißt du? Du musst nur einen String aus den gefundenen Dateien bauen. Da brauchst du auch noch gar keine Variablen zu füllen. Wenn eine Datei ausgewählt wurde kannst du einfach den gewählten Eintrag auslesen. Das wird alles in der Hilfe zu GUICtrlCreateCombo durchexerziert.

    Grüße autoiter

  • Danke für die Antwort.

    Ich muss gestehen, ich habe zwar schon einige Skripte/Programm gebastelt, jedoch habe ich auf solch eine Funktion nie zugreifen müssen.

    Wie ich die Funktion fülle weiß ich (denke ich), allerdings hört es bei mir auf, wenn es um Splitten geht oder die Funktion auch Werte in den Klammern bekommen soll (GUICtrlCreateCombo ($Variable, $Variable_b)) :(

  • Das wäre einfach in einer For-To-Schleife zu machen, in der du alle Elemente des Arrays, dass du vorher vermutlich hast, durchgehst. Aber auch dafür gibt es schon eine fertige Funktion (_ArrayToString).

    Schau dir das mal an und vergleiche es mit der Beispielfunktion in der Hilfe zu GUICtrlCreateCombo. Die Änderungen sind minimal.

    (Damit hier etwas in der Combobox landet, müssen txt-Dateien im Skriptverzeichnis liegen (siehe _FileListToArray-Zeile im Skript).

    Grüße autoiter

  • Dankesehr, das ist die Lösung, die ich Stundenlang gesucht habe!

    Das wäre einfach in einer For-To-Schleife zu machen, in der du alle Elemente des Arrays, dass du vorher vermutlich hast, durchgehst. Aber auch dafür gibt es schon eine fertige Funktion (_ArrayToString).

    Schau dir das mal an und vergleiche es mit der Beispielfunktion in der Hilfe zu GUICtrlCreateCombo. Die Änderungen sind minimal.

    (Damit hier etwas in der Combobox landet, müssen txt-Dateien im Skriptverzeichnis liegen (siehe _FileListToArray-Zeile im Skript).


    EDIT:

    Kannst du mir vielleicht bei einer Sache noch helfen?

    Es sind immer .txt Dateien. Ich habe gerade schon versucht mit StringTrimLeft die Dateiendung zu entfernen, aber irgendwie funktioniert das nicht so ganz.

    Zudem wäre es super, wenn es eine Auswahl der Dateien als GUICtrlCreateRadio gäbe. DAS wird aber schwierig mit den Koordinaten auf der GUI, stimmt's?

    2 Mal editiert, zuletzt von ValleAIT (16. August 2018 um 17:06)

  • Hallo @ValleAIT 

    Es sind immer .txt Dateien. Ich habe gerade schon versucht mit StringTrimLeft die Dateiendung zu entfernen, aber irgendwie funktioniert das nicht so ganz.

    Du könntest _ArrayToString($aFiles, "|", 1, -1) durch StringTrimRight(StringReplace(_ArrayToString($aFiles, "|", 1, -1), ".txt|", "|"), 4) ersetzen. Ist zwar hässlich, würde aber seinen Zweck tun.

    Zudem wäre es super, wenn es eine Auswahl der Dateien als GUICtrlCreateRadio gäbe. DAS wird aber schwierig mit den Koordinaten auf der GUI, stimmt's?

    Die Koordinaten sind eigentlich nicht das Problem. Du erstellst die Radio-Controls einfach ein einer Schleife. Als Pixelkoordinate für die Höhe sagen wir mal du nimmst die Variable $iY = 15. Nach jeder Erstellung addierst du nun bspw 15 dazu ($iY += 15). Dann erhältst du eine Reihe von Controls, die 15 Pixel untereinander liegen.

    Allerdings musst du die Controls in einem Array speichern, um sie später auszuwerten. Und du musst beachten, dass du unter Umständen die GUI in der Größe anpassen musst, damit alle Radios darauf passen. Wenn es zu viele Dateien sind, bieten sich Balken an (und vllt. eine auf der GUI eingebettete GUI, die du mit Balken versiehst, um so nur diesen Bereich auf dem die Radio-Controls sind zu verschieben)..

    Der Aufwand ist deutlich höher als bei der Listview. Aber du würdest sicher einiges lernen können.

    Grüße autoiter

    • Offizieller Beitrag

    Man kann übrigens sehr schön die Fülle an Funktionen der _GuiCtrlListBox_ -UDF in Verbindung mit einer Combobox nutzen.

    Wenn man das Handle der Liste einer Combobox abfragt, kann man dieses mit den Funktionen der Listbox-UDF bearbeiten. (Dann spart man sich z.B. das Zusammenpfriemeln der Item.)

    Hier ein Bsp.