Ordnerpfad aus Textdatei auslesen

  • Hallo, ich bin neu hier und habe mich jetzt kurz in AutoIt eingearbeitet.

    Was ich wissen müsste: im selben Ordner in dem sich die Script-Datei befindet, befindet sich auch eine Textdatei. Ich nenne sie jetzt mal "einstellungen.txt" (welches Dateiformat würdet ihr empfehlen?). Und in dieser Textdatei steht irgendwo eine Pfadangabe (pfad1="c:/test"). Da sich diese Pfadangabe nicht immer an der selben Stelle befindet, müsste das Script also diese Zeile suchen und als Variable speichern. Wie geht das?

    Achja nochwas: Ich habe gelesen, wenn ich auf Compile (Strg+F5) klicke, kann ich ein Icon für die Datei auswählen. Bei mir kommt da aber kein Menü, es passiert also das Selbe als würde ich einfach nur auf Build (F5) klicken. Wie kann ich das ändern?

    Einmal editiert, zuletzt von CreatorX (9. August 2014 um 13:47)

  • Ich würde dir empfehlen mit Ini's zu arbeiten. Sieh dir am besten mal die beiden Befehle und deren Beispiel an:

    [autoit]


    Iniread()
    Iniwrite()

    [/autoit]

    Hast du Scite extra installiert oder verwendest du das Scite von der Autoit installation?
    Ich würde mal empfehlen Scite4Autoit3 (neu) zu installieren:
    http://www.autoitscript.com/site/autoit-sc…itor/downloads/

  • Super, das hilft mir schonmal weiter. Ja ich hatte bisher nur autoit-v3-setup installiert. Hab jetzt nochmal Scite4Autoit3 hinzugefügt und damit klappt alles :)

    Ja ok, ich werde .ini-Dateien verwenden, scheint mir das Beste. Dennoch komme ich nicht drum rum, bei bestehenden Dateien anderer Programme Text- oder XML-Dateien auszulesen und sie nach bestimmten Wörtern zu durchsuchen. Wie geht das?

  • Ich habs jetzt via If-Abfrage gelöst:

    [autoit]


    ;Datei einlesen
    $file = FileOpen(@ScriptDir & "\settings.txt")

    [/autoit][autoit][/autoit][autoit]

    for $t=1 to 400
    $line = FileReadLine($file,$t)

    [/autoit][autoit][/autoit][autoit]

    ; Zeile, in der der String steht, wird ermittelt
    $str = StringMid($line,1)
    If StringInStr($str, "Teeeeeeeeest!!!!") Then

    [/autoit][autoit][/autoit][autoit]

    ;String wird ausgelesen
    $Str2 = StringRight( $str, 16 )

    [/autoit][autoit][/autoit][autoit]

    ;String wird angezeigt
    msgbox (0,"String:",$Str2 )

    [/autoit][autoit][/autoit][autoit]

    ;Schleife wird geschlossen
    ExitLoop
    EndIf
    Next

    [/autoit][autoit][/autoit][autoit]

    ;FileHandle schließen
    FileClose($file)

    [/autoit][autoit][/autoit][autoit]

    ;~ String wurde gefunden--------------

    [/autoit]

    Ich werd noch einbauen, dass ausgelesen wird, wieviele Zeilen die Datei hat, aber im Prinzip sollte das ja so immer funktionieren oder?

    Einmal editiert, zuletzt von CreatorX (8. August 2014 um 13:57)

  • Hi,

    Zitat

    aber im Prinzip sollte das ja so immer funktionieren oder?

    Ja, das funktioniert immer so^^
    Einfache Probleme löst man mit einfachen Funktionen.
    Du könntest natürlich auch den kompletten Text aus der Datei "am Stück" und nicht zeilenweise einlesen, das hätte den Vorteil, schnell überprüfen zu können, ob der gesuchte String überhaupt in der Datei steht, und auch wo.

    [autoit]

    $Dateiinhalt=FileRead("Datei.txt") ;der Inhalt der Datei befindet sich als String in der Variablen

    [/autoit]

    Übrigens sehr schön deine verwendeten Kommentare, da sollten sich einige "gestandene Programmierer" mal eine dicke Scheibe abschneiden!

  • Übrigens sehr schön deine verwendeten Kommentare, da sollten sich einige "gestandene Programmierer" mal eine dicke Scheibe abschneiden!


    Kein sehr wertvoller Post, aber in Ermangelung eines "Bedanken"-Buttons, möchte ich doch schreiben, dass ich das auch sehr gut finde. :thumbup:

    Grüße autoiter

    • Offizieller Beitrag

    Von mir auch noch eine kurze Anmerkung. Das hier:

    [autoit]


    for $t=1 to 400
    $line = FileReadLine($file,$t)

    [/autoit]


    ist ungünstig, weil es bei großen Dateien sehr lange dauert (es wird jedes Mal vom Anfang der Datei gelesen).
    Wenn Du sowieso die ganze Datei zeilenweise abarbeiten willst, dann lasse den Line-Parameter ($t) bei FileReadLine weg.

    Siehe hierzu auch die Hilfe:

    Zitat

    From a performance standpoint it is a bad idea to read line by line specifying "line" parameter whose value is incrementing by one. This forces AutoIt to reread the file from the beginning until it reach the specified line.

  • Hallo, ich komme mit meinem "Projekt" gut voran, bin im Prinzip schon fertig :)
    Jetzt hätte ich nur nochmal eine kurze Frage:
    Ich habe festgestellt, dass Icon-Dateien mehrere Icons (beispielsweise in verschiedener Auflösung) enthalten können. Gib es die Möglichkeit sich aus mehreren Icons einer Datei das Icon auszusuchen, welches die Exe dann letztendlich haben soll?

  • Bei GUISetIcon kannst Du als zweiten Parameter die Icon-ID angeben. Damit wählst Du (bei mehreren Icons) das entsprechende Icon aus.


    Hm, irgendwas mache ich da falsch.
    Ich hab mir mal das Bespiel der Onlinehilfe zu dem Befehl genommen und versucht die Icon-ID zu wechseln, aber da tut sich nix:

    [autoit]

    #include <GUIConstantsEx.au3>

    [/autoit][autoit][/autoit][autoit]

    Example()

    [/autoit][autoit][/autoit][autoit]

    Func Example()
    Local $sFile = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\AutoIt v3\AutoIt", "InstallDir") & "\icons\au3script_v9.ico"
    Local $msg

    [/autoit][autoit][/autoit][autoit]

    GUICreate("Meine GUI mit neuem Icon") ; Erstellt ein GUI-Fenster welches mittig ausgerichtet wird

    [/autoit][autoit][/autoit][autoit]

    GUISetIcon($sFile,9) ; Ändert das Symbol (Icon)

    [/autoit][autoit][/autoit][autoit]

    GUISetState() ; Zeigt ein leeres Dialogfenster an

    [/autoit][autoit][/autoit][autoit]

    ; Die Schleife wiederholt sich, bis der Benutzer die Beenden-Aktion der GUI auslöst
    While 1
    $msg = GUIGetMsg()

    [/autoit][autoit][/autoit][autoit]

    If $msg = $GUI_EVENT_CLOSE Then ExitLoop
    WEnd
    EndFunc ;==>Example

    [/autoit]


    Außerdem scheint sich das, wenn überhaupt ja nur auf dieses GUI-Fenster zu beziehen, dass ich ja gar nicht verwende, beim Kompilieren erhält die Exe dadurch ja kein Icon. Oder ich stelle mich gerade ziemlich doof an ?(

  • Ich hab mir mal das Bespiel der Onlinehilfe zu dem Befehl genommen und versucht die Icon-ID zu wechseln, aber da tut sich nix

    Ausführbare Dateien und DLLs können mehrere Icons enthalten, .ico Dateien meines Wissens nach nicht.

    Außerdem scheint sich das, wenn überhaupt ja nur auf dieses GUI-Fenster zu beziehen, dass ich ja gar nicht verwende, beim Kompilieren erhält die Exe dadurch ja kein Icon.

    Stimmt. Das Icon für das Programm solltest du eigentlich beim Kompilieren einstellen können, vorausgesetzt du benutzt SciTE4AutoIt3. Das ist zumindest in den älteren Versionen so, die aktuelle Stable habe ich noch nicht getestet.

  • Ausführbare Dateien und DLLs können mehrere Icons enthalten, .ico Dateien meines Wissens nach nicht.


    Das sollte erstmal grundsätzlich geklärt werden. Soweit ich weiß eben doch. Du kannst ja unter Windows ein Icon-Datei anklicken und, zumindest wenn sich der System eigene Bild-Viewer öffnet, die verschiedenen Icons die eine .icon-Datei enthält, durchschalten. Lässt sich ganz einfach testen, im Programmverzeichnis von AutoIT gibt es nen Icons-Verzeichnis (C:\Program Files (x86)\AutoIt3\Icons)
    Da mal auf eins der Icons draufklicken und dann lassen sich die verschiedenen Icons innerhalb der Datei durchklicken.

  • Gut zu wissen; wieder was gelernt.

    Wenn du die Datei allerdings in enumicons.au3 in Examples\GUI\Advanced öffnest wird immer das selbe Icon angezeigt, d.h. es scheint mit den Standardfunktionen nicht zu funktionieren.