1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Thorkfumble

Beiträge von Thorkfumble

  • Stringmanipulation in einer Funktion

    • Thorkfumble
    • 27. November 2020 um 11:20

    Hallo

    Ganz herzlichen Dank für die tolle Unterstützung und Ratschläge von euch allen!

    In der Zwischenzeit habe ich "meinen" Skript fertig und es funzt (hat aber bestimmt noch Luft nach oben was die Qualität anbelangt)!

    Gruss Thork

  • Stringmanipulation in einer Funktion

    • Thorkfumble
    • 27. November 2020 um 06:47

    Morgen allerseits,

    Besten Dank fuer die Tipps, muss erst mal verstehen was eure Vorschläge machen.

    Eine Frage hätte ich schon, ich lese ja den string in eine Variable ($ABCinfo) ein, in euren Beispielen deklariert ihr den Wert aber statisch (der String im json File kann dauernd ändern, nur das Format bleibt beständig).

    Wie auch immer, muss mich mit trial und error herantasten.

    Gruss thork

  • Stringmanipulation in einer Funktion

    • Thorkfumble
    • 27. November 2020 um 00:00

    Hallo

    Ich habe eine Funktion geschrieben welche mittels FileRead eine Variable mit Text abgefüllt >>> {"version":"0.170.14.7","oldVersion":"0.170.13.804"}

    In einem zweiten Schritt versuche ich nun den Wert welcher zwischen dem 3. und 4. Anführungszeichen steht "0.170.14.7" wiederum in eine Variable zu schreiben, aber hier scheitere ich!

    Mein Versuch mit StringMid funktioniert, aber das Resultat ist nur solange korrekt, wie sich die Versionierung (Anzahl Char) nicht ändert.

    Kann mir jemand Hilfestellung leisten und sagen wie ich das, resp. mit welchem Befehl sowas gemacht werden kann ich lese im Tutorial nach aber verstehe es nicht?

    Gibt es etwas das sich wie awk, sed oder dergl. anfühlt?

    Besten Dank für Unterstützung

    Gruss Thork


    Func _Read_info()

    $ABCinfo = FileRead("C:\Program Files (x86)\ABC\install.json")

                            ;MsgBox (0, "JASON File", "Ergebnis ist: " & $ABCinfo)

                            $ABCinfo2 = StringMid($ABCinfo, 12, 12)

    ;MsgBox(0, "12 chars extracted from position 11 are:", $ABCinfo2)

    EndFunc ;==>_Read__info

  • Variablen Wert in Schleife vergleichen

    • Thorkfumble
    • 14. Dezember 2018 um 16:16

    Hallo

    Ich habe einen Script welcher aus der Registry einen numerischen Wert ausliest der sich nach erfolgtem Login der Applikation ändert (was bis zu 2-5 Minuten dauern kann.

    $Variable1 = RegRead("HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\XYZ\\XYZ Info", "ID ")

    Gerne möchte ich eine Schleife bilden die den numerischen Wert solange vergleicht bis dieser eine Änderung erfahren hat, dann die Schleife verlassen und mit dem script fortfahren.

    Ich habe einige Beispiele gesehen welche einen Zähler 1 -n verwenden, ist aber für mich nicht praktikabel da ich nicht genau weiss wie lange es dauert bis der RegKey resp. die Variable1 eine Änderung erfährt.

    Wie muss ich es anstellen das der Loop solange läuft bis die Variable1 ändert?

    Für Hilfestellung besten Dank

    Thorkfumble

  • sftp durch winscp.com in autoit ersetzen

    • Thorkfumble
    • 7. Mai 2018 um 16:40

    Hallo community

    Ich bin derzeit daran ein best. autoit Program anzupassen, dabei muss ich den sftp.exe Aufruf durch WinScp.com ersetzen.

    mittels WinScp.com kann ich folgendes erfolgreich umsetzen

    C:\Program Files (x86)\path\winscp\winscp.com /privatekey="C:\Program Files (x86)\path\winscp\ftp_ppk.ppk" user@host:/data_in /script="c:\Program Files (x86)\path\winscp\scp_script.txt"

    wenn ich diesen Code aber versuche in Autoit zu integrieren, kriege ich nichts gebacken.

    Run('"C:\Program Files (x86)\path\winscp\winscp.com"/privatkey="C:\Program Files (x86)\path\winscp\ftp_ppk_mm.ppk" "user@host:/data_in" /script="c:\Program Files (x86)\path\winscp\scp_script.txt"'


    Hat jemand Rat was ich falsch mache?

    Gruss thork

  • Dedizierten string aus File auslesen und in Variable abfüllen

    • Thorkfumble
    • 12. März 2018 um 14:26

    Hallo

    Ich drehe mich wieder mal im Kreis.

    Versuche eine Funktion zu erstellene die ein File öffnet, die erste Zeile liest und das ganze in eine Variable abfüllt.

    Soweit so gut, der Output den ich erhalte ist erwartungsgemäss die ganze Zeile.

    13:50:39:352 [main] INFO - Starting APP| Version: 1.2.3.44| 17625654| 15.02.2018 07:37:55

    Aber eigentlich interresiert mich nicht die ganze Zeile sondern nur die rot markierten Werte.

    Unter UNIX würde ich das ganze mit awk -F " " '{print $7,$9,$10) auslesen, mit Autoit kriege ich das nicht hin.

    Kann mir jemand einen Tipp geben wie ein awk ähnlicher Befehl eingebaut werden kann?

    Besten Dank für Hilfe

    Thorkfumble


    Func _ReadSIXid_Version()

    $f = FileOpen("C:\Program Files (x86)\Appl\log\error.log",0)

    if $f = -1 Then

    MsgBox("Error", "No File available: ", $f)

    Else

    if $f = 1 Then

    $line = FileReadLine ($f,1)

    $str = StringLeft($line,69)

    MsgBox(0, "The Version loaded is: ", $str)

    FileClose ($f)

    Exit

    EndIf

    Endif

    EndFunc

  • Fokus auf geöffnetes Programm festlegen/geht verloren

    • Thorkfumble
    • 6. Januar 2017 um 08:58

    Besten Dank Alpines

    Ich habe Deinen Tipp umgesetzt und teste mal über einen längeren Zeitpunkt ob das beobachtete Verhalten eliminiert wird.

    Danke und Gruss
    Thork

  • Fokus auf geöffnetes Programm festlegen/geht verloren

    • Thorkfumble
    • 5. Januar 2017 um 15:09

    Hallo

    Ich habe nachfolgendes Problem wo ich nicht weiterkomme und irgendwie an Ort trete.

    Das Skript welches mir ein Problem verursacht macht im wesentlichen folgendes:

    1. Funktion: Start eines Programmes Prog.exe
    2. Funktion: Sammeln von Informationen um diese in einem info_file.txt File bereitzustellen
    3 Funktion: Mittels sFtp das info_file.txt an einen entfernten Server übermitteln.

    In seltenen Fällen tritt das Problem auf, dass ich offensichtlich den Fokus von sFtp verliere und den String Always
    (angedacht damit die sFtp Verbindung beim erstmaligen Anmelden das Login im known_host Files von sFtp schreibt - no, once, Always)
    nicht in die DOX Box mit dem laufenden sFtp sende, sondern in die Login Maske welche durch Funktion 1 ebenfalls gestartet ist.

    Wie gesagt trifft dies selten zu und ist m.E. timing abhängig (resourcen/performance).

    Ich habe daraufhin das Skript angepasst (rote Zeile) in der Meinung das ich den Focus auf dass, in der Dos Box laufende, sFTp.exe Programm lege > leider ohne Erfolg.
    Es kommt immer noch vor das der String "Always" an das aktive Login Fenster gesendet wird.

    Hat vielleicht jemand einen guten Rat oder weiss was ich falsch mache?

    Gruss thork


    Func _Send_Info_File()
    if FileExists ($sftp_exe) then
    Run ("sftp -i " & $key & " " & $info_file & " uid@tr_fis:/data_in")
    If WinWaitActive("C:\Program Files (x86)\Attachmate\Reflection\sftp.exe", "", 5) Then
    WinActivate("C:\Program Files (x86)\Attachmate\Reflection\sftp.exe")
    Send("Always{Enter}")
    EndIf
    else

    endif

    EndFunc

  • Funktion erstellen welche Text analysiert und einzelne Werte in Variable abfüllt

    • Thorkfumble
    • 12. Oktober 2016 um 13:48

    Hallo Autoiter & Kanashius

    Besten Dank für die Zeit die ihr meinem Problem resp. mir Unwissenden zu Teil kommen habt lassen.

    Letztendlich haben mir der Code und die dazugehörenden Instruktionen von autoiter sehr geholfen, einerseits das Problem zu lösen,
    anderseits zu verstehen wie autoit funzt.

    Besten Dank und Gruss an euch beide
    Thork

  • Funktion erstellen welche Text analysiert und einzelne Werte in Variable abfüllt

    • Thorkfumble
    • 11. Oktober 2016 um 21:52

    hi autoiter

    wenn ichs richtig verstehe müsste ich demnach nur ID_2 durch die $MM_LastPopUse variable ersetzen
    $iIndex = _ArraySearch($aResult, "ID_2") ;
    etwa so?
    $iIndex = _ArraySearch($aResult, &" $MM_LastPopUse" )

    ich werde morgen weiter experimentieren :)
    gruss thork

  • Funktion erstellen welche Text analysiert und einzelne Werte in Variable abfüllt

    • Thorkfumble
    • 11. Oktober 2016 um 17:04

    Hallo Autoiter

    Besten Dank, habe endlich Zeit gefunden mir deinen Lösungsvorschlag durch den Kopf gehen zu lassen und erhalte nun eine saubere Auflistung aller Eintrage des xml Files :) !
    Der Ansatz mit Array erscheint mir sehr effiezient, weitaus effizienter als jedes Attribut aus dem Text rauszufriemeln.

    Zu guter letzt stelle ich mir aber die Frage, dass - wie Eingangs beschrieben - ich den aus der Registry ausgelesenen Wert (zBsp. $MM_LastPopUsed = ID_5) diesen im Array
    wieder finde und mir die Attributewerte aus Col1 und Col2 anzeigen resp. in neuen Variablen abfüllen lassen kann .

    Spoiler anzeigen


    Käme da _ArrayFindAll in Frage, was ich versucht aber nicht verstanden habe,
    oder kann das mit einem IF $MM_LastPopUsed EXIST; THEN ...... Statment in deine Funktion integriert werden?

    Fragen über Fragen..............mir raucht der Schädel ?(

    Gruss thork

  • Funktion erstellen welche Text analysiert und einzelne Werte in Variable abfüllt

    • Thorkfumble
    • 9. Oktober 2016 um 22:21

    Hallo
    Besten Dank für die Vorschläge, leider - so denke ich mal - sind diese beiden nicht wirklich umsetzbar oder ich versteh den Lösungsansatz nicht.

    Meine Ausgangslage ist ja, dass ich aus der Registry die ID_nn kenne und diese als Variable im script deklariert habe
    Global $MM_LastPopUsed = ID_nn

    Das settings.xml File wird diese ID_nn irgendwo beinhalten,ich benötige dann nur noch die Werte der beiden folgenden Tags <Host Port und <Host IP um diese weiterverarbeiten zu können.
    Was ich sagen kann ist, dass das xml File ID_nn sowie die beiden Tags Host Port und Host IP immer vorkommen.


    <Pop id="Id_1" name="ServerMain" source="User">
    < Hosts port="4444">
    < Host ip="Servermain"/>

    @autoiterdu gehst davon aus das es einen TAG <Pop> gibt was nicht der Fall ist,
    es beginnt mit <Pops> gefolgt von <Pop name> oder <Pop id> und schliesst mit </Pop> </Pops> .
    Ebenso deklarierst du eine Variable $sString mit dem Inhalt des xml files, ohne dass das File eingelesen wird.

    Mir scheint diese Sache ziemlich kompliziert daher verfolge ich alternativ einen zweiten Ansatz,weiss aber auch nicht wie dies in autoit umsetzbar wäre.

    Unter Unix würde ich netstat mit awk ausführen und dies einer Variablen zuordnen, etwa so:

    netstat -an | grep 4555
    TCP 10.156.1.34:50965 192.168.90.78:4555 ESTABLISHED

    netstat -an | grep 4555 |awk -F" " '{print $3}'
    192.168.90.78:4555

    oder etwas verfeinert

    netstat -an | grep 4555 |awk -F" " '{print $3}'|awk -F: '{print $1, $2}'
    192.168.90.78 4555

    Ich bekäme so alternativ zum Hostname die IP gelistet,was mir ausreichen würde.
    Nur will das auch nicht richtig klappen, untenstehende autoit Funktion gibt als Ergebniss die PID von cmd.exe aus.

    func _Get_Netstat_Port()
    Local $sData = Run('cmd /k netstat -an |find /n /i "4555"', '', @SW_SHOW)
    ;Local $sData = Run(@ComSpec & " /c " & 'netstat -an'|findstr 555' , @SW_HIDE)
    MsgBox (0, "titel", "text" & $sData)
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $strDefaultPop = ' & $sData & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    EndFunc

    Was mache ich falsch?

    Vielen Dank für weitere Hilfe
    thork

  • Funktion erstellen welche Text analysiert und einzelne Werte in Variable abfüllt

    • Thorkfumble
    • 9. Oktober 2016 um 10:58

    Hallo Kanashius und Autoiter
    besten Dank für eure Hilfe, werde mich gleich an die Arbeit machen wenn ich zurück aus dem WE bin.
    gruss thork

  • Funktion erstellen welche Text analysiert und einzelne Werte in Variable abfüllt

    • Thorkfumble
    • 8. Oktober 2016 um 02:23

    Hallo

    Leider muss ich mich als weitestgehend unerfahren hinsichtlich Programmierung outen und benötige Hilfe.
    Vor lauter Bäume sehe ich den Wald nicht mehr :(
    Ich verstehe nicht wie ich meiner Funktion beibringen kann im setting.xml File nach dem Wert der Variable zu suchen, anschliessend den Wert von
    Host Port und im dritten Schritt den Wert Host IP auszulesen resp. in Variablen abzufüllen.

    • im ersten Schritt lese ich einen Registry Key aus und belege damit eine Variable $MM_LastPopUsed

    Global $MM_LastPopUsed = RegRead("HKEY_CURRENT_USER\Software\Vendor\Prod\Platform", "LastPopIdUsed") --> hat bspw. Wert = ID_1 (kann aber auch ID_2 / ID_3 etc. sein)

    • anschliessend versuche ich eine Funktion zu erzeugen welche

      • 1. den Inhalt von $MM_LastPopUsed (also ID_1) im setting.xml File sucht, danach
      • 2. wenn dieser String ID_1 vorhanden/gefunden ist, den dazugehörigen Wert von <Hosts port="4444">
      • 3. den nachfolgenden Wert von <Host ip="Servermain"/> ausliest

    letztendlich benötige ich zwei abgefüllte Variablen mit den Werten des Ports und der Host IP (also 4444 und Servermain als Beispiel)


    Auszug aus dem setting.xml File

    <?xml version="1.0" encoding="utf-8" standalone="no"?>
    <Configuration>
    <AppSettings>
    <DefaultPop pop_id="Id_3"/>
    <Pops>
    <Pop name="ServerA" id="Id_3" source="User">
    <Hosts port="4555">
    <Host ip="servera"/>
    </Hosts>
    </Pop>
    <Pop name="ServerB" id="Id_2" source="User">
    <Hosts port="5555">
    <Host ip="Server"/>
    </Hosts>
    </Pop>
    <Pop id="Id_1" name="ServerMain" source="User">
    <Hosts port="4444">
    <Host ip="Servermain"/>
    ...............
    ................................


    Meine Versuche der Funktion sind bisher kläglich gescheitert, ich verstehs einfach noch nicht und die Hilfe verwirrt mich noch mehr ?(


    func _File_Read_XML_PORT-Host()

    Local $line = FileRead($file)
    if StringInStr ( $line, “$MM_LastPopUsed ") > 0 Then
    $posStart=StringInStr ( $line, $sPoPIst) + 11
    $posEnd=StringInStr ( $line, " id" , 0, 1) -1
    $sPoPIst=StringMid ( $line, $posStart , $posEnd - $posStart )
    MsgBox(0, "Pop Ist", "Name ist" & $sPoPIst )
    ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $strDefaultPop = ' & $sPoPIst & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
    EndIf


    Ich bin mir durchaus bewusst das ich nicht erwarten kann eine Schlüsselfertige Lösung präsentiert zu erhalten, es würde mich aber sehr freuen
    wenn ich den einen oder anderen Tipp erhalten würde, welcher mir erklären würde wie ich das lösen kann.
    Besten Dank und Gruss
    Thork

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™