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. Bitnugger

Beiträge von Bitnugger

  • Datenbank dezentral erweitern [gelöst]

    • Bitnugger
    • 6. November 2018 um 21:44

    Du könntest die ID auch mit _WinAPI_CreateGUID() erzeugen...

  • COM error 80020009

    • Bitnugger
    • 5. November 2018 um 22:33

    Schau mal, ob du hiermit was anfangen kannst...

    AutoIt
    ;-- TIME_STAMP   2018-11-06 21:03:52   v 0.1
    
    #AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7
    
    #include-once
    ;~ #include <Array.au3>
    #include <File.au3>
    #include <WinAPIConv.au3>
    
    ; Press Ctrl+Shift+O in the line with the link to open the link in the browser.
    ;~ https://autoit.de/index.php?thread/86173-com-error-80020009/&postID=691927#post691927
    ;~ https://tel.search.ch/api/help
    
    ; The IXMLDOMNodeType enumeration defines the following valid values that can appear in the nodeType property.
    Global Const $NODE_ELEMENT = 1, $NODE_ATTRIBUTE = 2, $NODE_TEXT = 3, $NODE_CDATA_SECTION = 4, $NODE_ENTITY_REFERENCE = 5, $NODE_ENTITY = 6, $NODE_PROCESSING_INSTRUCTION = 7, $NODE_COMMENT = 8, _
            $NODE_DOCUMENT = 9, $NODE_DOCUMENT_TYPE = 10, $NODE_DOCUMENT_FRAGMENT = 11, $NODE_NOTATION = 12
    
    ; API-Key, wird benötigt, wenn mehr als eine Anfrage pro Tag gesendet wird, oder detaillierte Informationen (/feed/entry/tel:.*) benötigt werden.
    ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Global $key = "" ; Hier den Key eingeben! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
    ; URL für die Anfrage
    Global $sURL
    
    ; Dateiname, unter der das Ergebnis der Anfrage gespeichert werden soll
    Global $g_sResponse
    
    ; Die erstellte/n HTML-Tabelle/n
    Global $g_sHTML_STRING
    
    ;~ _Example_1()
    _Example_2()
    
    Func _Example_1()
        ; Allgemeiner Suchstring. Suche nach Namen, Rubriken oder Telefonnummern
        Local $was = "UBS Zürich"
    
        _MakeURL($sURL, $was, $key)
        $g_sResponse = 'api-response_was=' & $was & '.xml'
        If Not InetGet($sURL, $g_sResponse, 1) Then Exit MsgBox(16, @ScriptName, 'Error by InetGet!')
        _CW('! "' & $g_sResponse & '" wurde soeben gespeichert' & @CRLF)
    
        $g_sHTML_STRING = _Response_XML_To_HTML($g_sResponse)
    
    EndFunc   ;==>_Example_1
    
    Func _Example_2()
        $g_sResponse = 'api-response-example.xml' ; Datei muss im Scriptverzeichnis vorhanden sein, weil ich kein API-Key habe!
    
        $g_sHTML_STRING = _Response_XML_To_HTML($g_sResponse)
    EndFunc   ;==>_Example_2
    
    Func _MakeURL(ByRef $sURL, $was, $key)
        If $key Then
            $sURL = StringFormat("https://tel.search.ch/api/?maxnum=1&was=%s&key=%s", $was, $key) ; mit API-Key suchen
        Else
            $sURL = StringFormat("https://tel.search.ch/api/?maxnum=1&was=%s", $was) ; ohne API-Key suchen
        EndIf
    EndFunc   ;==>_MakeURL
    
    Func _Response_XML_To_HTML($sResponse)
        _CW("> $sResponse --> " & $sResponse & @CRLF)
        Local Static $aInf = _
                [ _
                    ['Zusammenfassung:'    , 'content'], _
                    ['Pos:'                , 'tel:pos'], _
                    ['ID:'                , 'tel:id'], _
                    ['Art:'                , 'tel:type'], _
                    ['Nachname/Firma:'    , 'tel:name'], _
                    ['Vorname:'            , 'tel:firstname'], _
                    ['Beruf:'            , 'tel:occupation'], _
                    ['Strasse:'            , 'tel:street'], _
                    ['Nr:'                , 'tel:streetno'], _
                    ['PLZ:'                , 'tel:zip'], _
                    ['Ort:'                , 'tel:city'], _
                    ['Tel:'                , 'tel:phone'], _
                    ['Fax:'                , 'tel:extra type = "fax"'], _
                    ['Mobile:'            , 'tel:extra type = "mobile"'], _ ; - dieser Eintrag fehlt auf der Seite https://tel.search.ch/api/help ...haben die wohl vergessen!
                    ['E-Mail:'            , 'tel:extra type = "email"'], _
                    ['Website:'            , 'tel:extra type = "website"'] _
                ], $sInfHeader = StringReplace(_ArrayToString($aInf, '|', -1, -1, '|', 0, 0), ':', '')
    
        ; Error monitoring. This will trap all COM errors while alive.
        ; This particular object is declared as local, meaning after the function returns it will not exist.
        ObjEvent("AutoIt.Error", "_ErrFunc")
    
        Local $html_string = '<html><body>' & @CRLF, $aTel[0][0], $aNodes, $aExtra, $sNode, $iExtra, $iIndex, $iEntrys, $iPos, $oXML, $oNodeList, $oInfos, $oAttributes
    
        If Not FileExists($sResponse) Then
            MsgBox(16, @ScriptName, 'Error: File "' & $sResponse & '" not found!')
            Return SetError(1, 0, False)
        EndIf
    
        $oXML = ObjCreate("Msxml2.DOMDocument")
        $oXML.async = False
        $oXML.load($sResponse)
        If $oXML.parseError.errorCode Then
            Local $oErr = $oXML.parseError, $sErr = StringFormat('XML Parse Error\r\n\r\nError Code: %i\r\nError Line: %i\r\nError Reason: %s', $oXML.parseError.errorCode, $oErr.line, $oErr.reason)
            _CW('! ' & $sErr)
            MsgBox(16, @ScriptName, $sErr)
            Return SetError(2, 0, False)
        EndIf
    
        $oInfos = $oXML.SelectNodes("//feed/entry")
        $iEntrys = $oInfos.length ; Anzahl der entry-Nodes
        If $iEntrys = 0 Then Return SetError(3, 0, False)
    
        ReDim $aTel[$iEntrys][UBound($aInf)]
    
        ; Namen der Nodes für die Suche sortieren, damit die Einträge "tel:extra" am Ende der Liste stehen, weil wir den TagName nur einmal suchen wollen
        $aNodes = _ArrayExtract($aInf, -1, -1, 1, 1)
        _ArraySort($aNodes)
        $aExtra = _ArrayFindAll($aNodes, 'tel:extra', 0, 0, 0, 1)
        For $i = UBound($aExtra) -1 To 0 Step -1
            $iExtra = $aExtra[$i]
            $aExtra[$i] = $aNodes[$aExtra[$i]]
            _ArrayDelete($aNodes, $iExtra)
        Next
        For $i = 0 To UBound($aExtra) -1 Step 1
            _ArrayAdd($aNodes, $aExtra[$i])
        Next
    
        For $i = 0 To UBound($aInf) - 1 Step 1
            $iIndex = 0
            For $oInfo In $oInfos
                $sNode = StringRegExpReplace($aNodes[$i], '(.+?) .*', '\1')
                $oNodeList = $oInfo.getElementsByTagName($sNode)
                For $n = 0 To $oNodeList.length -1 Step 1
                    Select
                        Case $oNodeList.item($n).NodeName = 'content'
                            $iPos = _ArraySearch($aInf, $oNodeList.item($n).NodeName, 0, 0, 0, 0, 1, 1)
                            If $iPos > -1 Then
                                _CW(StringFormat('> $sNode --> %-26s $i --> %3i $iIndex --> %3i $iPos --> %3i $n --> %3i $oNodeList.item('&$n&').text --> %s', _
                                    $sNode, $i, $iIndex, $iPos, $n, StringRegExpReplace($oNodeList.item($n).text, '\R(?: ){0,4}', '; ')))
                                $aTel[$iIndex][$iPos] = $oNodeList.item($n).text ; Eintrag unverändert übernehmen
    ;~                             $aTel[$iIndex][$iPos] = StringRegExpReplace($oNodeList.item($n).text, '\R(?: ){0,4}', '; ') ; Zeilenumbrüche und Einrückungen entfernen
                            EndIf
                        Case $oNodeList.item($n).NodeName = 'tel:extra'
                            $oAttributes = $oNodeList.item($n).attributes
                            If $oAttributes.length And $oAttributes.item(0).name = 'type' Then
                                $iPos = _ArraySearch($aInf, StringFormat('%s type = "%s"', $oNodeList.item($n).NodeName, $oAttributes.item(0).value), 0, 0, 0, 3, 1, 1)
                                If $iPos > -1 Then
                                    $i = $iPos
                                    _CW(StringFormat('+ $sNode --> %-26s $i --> %3i $iIndex --> %3i $iPos --> %3i $n --> %3i $oNodeList.item('&$n&').text --> %s', _
                                        StringFormat('%s type = "%s"', $oNodeList.item($n).NodeName, $oAttributes.item(0).value), $i, $iIndex, $iPos, $n, $oNodeList.item($n).text))
    
                                    $aTel[$iIndex][$iPos] = $oNodeList.item($n).text
                                EndIf
                            EndIf
                        Case StringLeft($oNodeList.item($n).NodeName, 4) = 'tel:'
                            $iPos = _ArraySearch($aInf, $oNodeList.item($n).NodeName, 0, 0, 0, 0, 1, 1)
                            If $iPos > -1 Then
                                _CW(StringFormat('- $sNode --> %-26s $i --> %3i $iIndex --> %3i $iPos --> %3i $n --> %3i $oNodeList.item('&$n&').text --> %s', _
                                    $sNode, $i, $iIndex, $iPos, $n, $oNodeList.item($n).text))
                                $aTel[$iIndex][$iPos] = $oNodeList.item($n).text
                            EndIf
                    EndSelect
                Next
                $iIndex += 1
            Next
        Next
    
        _ArrayDisplay($aTel, '$aTel', '', 0, Default, $sInfHeader)
    
        ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        ; HTML-Tabelle/n erstellen
        ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
        For $i = 0 To UBound($aTel) - 1 Step 1
            $html_string &= @TAB & '<table width=500>' & @CRLF
            For $j = 0 To UBound($aTel, 2) - 1 Step 1
                If $j = 0 Then ; Zusammenfassung splitten
                    Local $aSplit = StringSplit($aTel[$i][$j], @LF, 2)
                    If UBound($aSplit) Then
                        For $c = 0 To UBound($aSplit) -1 Step 1
                            $html_string &= @TAB & @TAB & '<tr><td width=150 align=left>' & ($c = 0 ? $aInf[$j][0] : '') & '</td><td width=350 align=left>' & $aSplit[$c] & '</td></tr>' & @CRLF
                        Next
                    Else
                        $html_string &= @TAB & @TAB & '<tr><td width=150 align=left>' & $aInf[$j][0] & '</td><td width=350 align=left>' & $aTel[$i][$j] & '</td></tr>' & @CRLF
                EndIf
                Else
                    $html_string &= @TAB & @TAB & '<tr><td width=150 align=left>' & $aInf[$j][0] & '</td><td width=350 align=left>' & $aTel[$i][$j] & '</td></tr>' & @CRLF
                EndIf
            Next
            $html_string &= @TAB & '</table>' & @CRLF
        Next
        $html_string &= '</body></html>' & @CRLF
        _CW(@CRLF & $html_string)
    
        If FileExists('html_string.html') Then
            If MsgBox(262180,'tel_search_ch', 'Die Datei "html_string.html" existiert bereits, soll sie überschrieben werden?') <> 6 Then Return $html_string ; nein, nicht überschreiben
            FileDelete('html_string.html')
        EndIf
        FileWrite('html_string.html', $html_string)
        _CW('! "html_string.html" wurde soeben gespeichert' & @CRLF)
        ShellExecute('html_string.html')
        Return $html_string
    EndFunc   ;==>_Response_XML_To_HTML
    
    Func _CW($sText)
        ConsoleWrite(_WinAPI_WideCharToMultiByte($sText, 65001) & @CRLF)
    EndFunc   ;==>_CW
    
    ; User's COM error function. Will be called if COM error occurs
    Func _ErrFunc($oError)
        ; Do anything here.
        ConsoleWrite(@ScriptName & " (" & $oError.scriptline & ") : ==> COM Error intercepted !" & @CRLF & _
                @TAB & "err.number is: " & @TAB & @TAB & "0x" & Hex($oError.number) & @CRLF & _
                @TAB & "err.windescription:" & @TAB & $oError.windescription & @CRLF & _
                @TAB & "err.description is: " & @TAB & $oError.description & @CRLF & _
                @TAB & "err.source is: " & @TAB & @TAB & $oError.source & @CRLF & _
                @TAB & "err.helpfile is: " & @TAB & $oError.helpfile & @CRLF & _
                @TAB & "err.helpcontext is: " & @TAB & $oError.helpcontext & @CRLF & _
                @TAB & "err.lastdllerror is: " & @TAB & $oError.lastdllerror & @CRLF & _
                @TAB & "err.scriptline is: " & @TAB & $oError.scriptline & @CRLF & _
                @TAB & "err.retcode is: " & @TAB & "0x" & Hex($oError.retcode) & @CRLF & @CRLF)
    EndFunc   ;==>_ErrFunc
    Alles anzeigen
  • StdinWrite / -Read ohne Child Process möglich?

    • Bitnugger
    • 4. November 2018 um 17:22
    Zitat von borsTiHD

    Nutzt du die "Console.au3" selbst? Das sieht so aus als wäre die auf eigene Bedürfnisse zugeschnitten.

    Nein, aber die war sehr hilfreich als erste Inspiration bzw. Wegweiser, als ich mich mit dem Thema Console befasst hatte, denn auch ich wollte wissen, ob sich fremde Consolen steuern lassen - und ja, es geht.

    Lediglich Zeile 15, 16 (haben da nichts zu suchen und sind nur eine vergessene Notiz zu einem Ticket im blauen Forum) und der Kommentarblock am Ende mit den Funktionsnamen stammen von mir.

    Übrigens: Nicht nur die Antworten bringen Erleuchtung, manchmal sind es auch die Fragen!

  • COM error 80020009

    • Bitnugger
    • 3. November 2018 um 22:17

    Ok, du willst also für jeden Eintrag eine Tabelle haben... das ist eigentlich kein Problem... aber... wie du schon gemerkt hast, nicht ganz einfach, weil wir das Auslesen der response.xml momentan noch total falsch angehen.

    Warum falsch? Weil wir davon ausgehen, dass sich die Reihenfolge der Einträge in der response.xml nicht ändert, was aber nicht der Fall ist!!!

    Richtig wäre... umgangssprachlich formuliert:

    ...

    • Besorge mir alle Nodes mit dem NodeNamen "entry"
    • Durchsuche alle ChildNodes in diesen Nodes und wenn wir davon eine ChildNode haben wollen, dann füge sie in die aktuelle Tabelle ein.
    • Hat die entry-Node keinen Eintrag mehr, dann schließe die Tabelle und wenn es noch mehr entry-Nodes gibt, erstelle eine neue Tabelle und durchsuche die nächste entry-Node.
    • Sind alle entry-Nodes durchlaufen, dann schließe die letzte Tabelle und den $html_string mit '</body></html>'.

    Falls ich es noch nicht erwähnt habe... das sind auch meine ersten Gehversuche mit XML und momentan weiß ich noch nicht, wie ich an die ChildNodes der einzelnen entry-Nodes komme!

    Heute habe ich aber schon mehr als genug getan und morgen ist wohlverdienter Ruhetag... du wirst also frühestens Mo. gegen Abend wieder von mir hören. 8o

  • StdinWrite / -Read ohne Child Process möglich?

    • Bitnugger
    • 3. November 2018 um 18:02
    Zitat von borsTiHD

    Darum hab ich mir bisher nie weitere Gedanken bzgl des "Showflags" gemacht, aber ich kann dann bestimmt auch @SW_SHOW nehmen, wenn es dafür mit Flag sauberer ist?

    Ja, wenn du die Console sehen willst, ansonsten eben @SW_HIDE oder Default.

    Zitat von borsTiHD

    Bzgl $STDIN_CHILD, $STDERR_MERGED beim SubThread, könnte das vlt helfen das ein SubThread befehle an die PythonApp senden kann?

    Ich denke mal nein, denn das geht wohl nur, wenn die PythonApp von diesem SubThread gestartet wurde und somit dessen Child ist. $STDIN_CHILD, $STDERR_MERGED beim SubThread sogt nur dafür, dass der MainThread darauf zugreifen kann.

    Du könntest aber die Console der PythonApp mit _WinAPI_AttachConsole() an die des SubThread anfügen... dann sollte es mit StdinWrite() oder _WinAPI_WriteConsole() gehen.

    Schau dir mal die Console.au3 im Anhang an... das hilft dir bestimmt weiter.

    Dateien

    Console.au3 13,78 kB – 407 Downloads
  • StdinWrite / -Read ohne Child Process möglich?

    • Bitnugger
    • 2. November 2018 um 19:29
    Zitat von borsTiHD

    Mein MainThread startet mit $iPythonPID = Run($sPythonAPIPath & "Main_work.exe", $sPythonAPIPath, "", $STDIN_CHILD + $STDERR_MERGED) die PythonApp.

    Du gibst hier als showflag "" an... auch wenn es funktioniert, ich würde es ändern in @SW_HIDE oder Default.

    Zitat von borsTiHD

    Später startet mein MainThread einen SubThread mit $iPID = Run($sMultiThreadFile & " --au-thread """ & $sCallback & """").

    Hier fehlt das opt_flag... und die Anführungszeichen... scheinen mir einige überflüssig zu sein.

    Versuche es mal so...

    $iPythonPID = Run($sPythonAPIPath & "Main_work.exe", $sPythonAPIPath, @SW_HIDE, BitOr($STDIN_CHILD, $STDERR_MERGED) )

    $iPID = Run($sMultiThreadFile & ' --au-thread "' & $sCallback & '"', '', @SW_HIDE, BitOr($STDIN_CHILD, $STDERR_MERGED))

    oder so...

    $iPID = Run(StringFormat('"%s" --au-thread "%s"', $sMultiThreadFile, $sCallback), '', @SW_HIDE, BitOr($STDIN_CHILD, $STDERR_MERGED))

    ...oder du nimmst für den SubThread als opt_flg $STDIO_INHERIT_PARENT, wenn der MainThread als Konsolenanwendung (CUI) kompiliert wurde.

  • StdinWrite / -Read ohne Child Process möglich?

    • Bitnugger
    • 2. November 2018 um 16:42
    Zitat von borsTiHD

    Nur wenn ich von meinem SubThread per StdinWrite/-Read auf die PythonApp zugreifen möchte, passiert nichts.

    Wie startest du denn die PythonApp.exe mit der main.exe?

    Zitat von borsTiHD

    Meiner Recherche nach funktionieren die Funktionen nur wenn die jeweilige Anwendung ein "Child Prozess" ist?!

    Du meinst mit den nativen AutoIt-Funktionen... ja, das stimmt, aber es gibt ja noch andere Wege (DllCall), um an die Ausgaben einer Console zu kommen. Das Problem sollte für dich aber ohne Bedeutung sein, da die PythonApp.exe und auch die SubTasks von deiner main.exe gestartet wurden und diese somit Child-Prozesse der main.exe sind.

  • COM error 80020009

    • Bitnugger
    • 2. November 2018 um 16:17
    Zitat von bigeasy76

    Du doch einen kurzen Tipp, wie kann ich solche Herangehensweisen erlernen, wie ich ein Problem am Besten löse und wie ich zb. mehrere Schleifen ineinanderpacke oder wie ich kompliziertere Arrays aufbaue. Durch Praxis?

    Die optimale Herangehensweise ergibt sich automatisch, wenn du genügend Erfahrungen gesammelt hast und du dir nicht mehr bei jeder Funktion noch mal die Hilfe anschauen musst, damit du weiß was da passiert, denn das lenkt enorm von der eigentlichen Aufgabe ab. Erfahrungen bekommt man durch Üben, denn Übung macht den Meister!

    Es gibt kleine Hürden, die man oft nicht mal bemerkt oder nur als lästigen Stolperstein wahrnimmt, aber auch große, die einem alles abverlangen, die man erst nach einem langen, erbitterten und hartem Kampf als gelöst abhaken kann, und auch solche, die einem schier unlösbar erscheinen, dies aber auch nur, weil einem das nötige Rüstzeug dafür noch fehlt.

    Ich würde mal vorsichtig schätzen, dass rund 95 % der Coder an den großen Hürden scheitern, weil sie zu früh aufgegeben haben, denn nur in den seltensten Fällen liegt es daran, weil ihnen die nötige Intelligenz fehlt.

    Mehrere Schleifen ineinander verschachteln... das wie ergibt sich doch automatisch. Jede innere Schleife hat eine spezielle Aufgabe und benötigt die äußere Schleife, um an die Daten zu kommen, die in ihr verarbeitet werden sollen. Sehr hilfreich ist, wenn man die Aufgabenstellung umgangssprachlich formuliert, wodurch die benötigten Schleifen dann quasi von links nach rechts (von außen nach innen) ablesbar sind.

    Komplizierte Arrays... damit meinst du sicher mehrdimensionale Arrays... die sind aber nicht wirklich komplizierter, sondern beinhalten einfach nur mehr Daten. Kompliziert wird es, wenn man sich scheut, diese zu nutzen. Hier findest du ein Array-Tutorial von BugFix : Was ist ein Array?

  • StdinWrite / -Read ohne Child Process möglich?

    • Bitnugger
    • 2. November 2018 um 12:33

    Dann versuche doch mal, die PID der PythonApp.exe als Umgebungsvariable zu speichern, wenn du sie mit der Main.exe startest, damit dein SubThread sie dann mit EnvGet auslesen kann. Wenn das nicht funktioniert, speichere sie in ein Lockfile, dass dein SubThread sie daraus auslesen kann.

  • COM error 80020009

    • Bitnugger
    • 1. November 2018 um 19:53
    Zitat von bigeasy76

    Für Dich als Profi ist es vermutlich Gebastel, würde mich aber trotzdem interessieren, wie Du dieses bewertest.

    Diese Frage ist für mich extrem schwer zu beantworten, weil ich mich gar nicht mehr in die Lage versetzten kann, wie ich an so eine Aufgabe herangegangen wäre, als ich noch Anfänger in Sachen AutoIt war... eine Bewertung von mir reflektiert also bestenfalls, wie gut oder schlecht ich einen Profi bewerten würde... das bist du momentan definitiv noch nicht, wirst es aber ganz sicher werden, wenn du so weiter machst! Nach dem Schema von IMDB bekommst du dafür fette 7/10. Wieso nur 7? Weil du bei deiner Anpassung ein paar Fehler gemacht hast, die du hättest sehen müssen und auch alle Fehler übersehen hast, die in meinen Beispielen stecken, denn sobald sich irgendwas an der API ändert, könnte es dazu führen, dass das Script nicht mehr funktioniert.

    Ich habe schon mit einer erweiterten Version angefangen, die solche Änderungen berücksichtigt... werde evtl. morgen damit fertig.

    Hier noch kurz die mir aufgefallen Fehler in der umgebauten Funktion _Response_XML_To_Array...

    • Der Funktionsname macht keinen Sinn mehr, da die Funktion kein Array mehr als Ergebnis liefert, sondern einen String. ==> _Response_XML_To_HTML
    • Zeile 7, hier macht das Static keinen Sinn... solche Fehler können dich in großen Skripten zum Wahnsinn treiben.
    • Zeile 41 muss vor Zeile 40, also nicht mit in die Schleife, weil wir ja nur eine Tabelle haben wollen.
    • Zeile 57 muss vor Zeile 71, weil wir den schließenden Tag für die Tabelle erst setzen dürfen, wenn alles fertig ist.
    • In $aInf hättest du noch die Strings für tel:extra ... einpflegen können, aber ok, das ist nicht wirklich ein Fehler.

    Hier die korrigierte Version mit angepasstem Namen...

    AutoIt
    Func _Response_XML_To_HTML($sResponse)
        _CW("$sResponse                 --> " & $sResponse)
        Local Static $aTel[1][12] = [['content', 'tel:pos', 'tel:id', 'tel:type', 'tel:name', 'tel:firstname', 'tel:occupation', 'tel:street', 'tel:streetno', 'tel:zip', 'tel:city', 'tel:phone']]
        Local Static $aInf[16] = _
                ['Zusammenfassung:', _     ; content
                'Pos:', _                 ; tel:pos
                'ID:', _                 ; tel:id
                'Art:', _                 ; tel:type
                'Nachname/Firma:', _     ; tel:name
                'Vorname:', _             ; tel:firstname
                'Beruf:', _             ; tel:occupation
                'Strasse:', _             ; tel:street
                'Nr:', _                 ; tel:streetno
                'PLZ:', _                 ; tel:zip
                'Ort:', _                 ; tel:city
                'Tel:', _                 ; tel:phone
                'Fax:', _                 ; tel:extra type = "fax"
                'Mobile:', _             ; tel:extra type = "mobile" - dieser Eintrag fehlt auf der Seite https://tel.search.ch/api/help ...haben die wohl vergessen!
                'E-Mail:', _             ; tel:extra type = "email"
                'Website:' _             ; tel:extra type = "website"
                ]
    
        Local $html_string = '<html><body>', $iIndex, $aContent, $oElemList, $oXML, $sAttribValue
    
        $oXML = ObjCreate("Msxml2.DOMDocument")
        $oXML.load('api-response.xml')
        If Not FileExists($sResponse) Then Exit MsgBox(16, @ScriptName, 'Error: File "' & $sResponse & '" not found!')
        If Not $oXML.load($sResponse) Then Exit MsgBox(16, @ScriptName, 'Error by $oXML.load --> "' & $sResponse & '"')
        $oElemList = $oXML.SelectNodes('//feed/entry/tel:extra')
        For $i = 0 To UBound($aTel, 2) - 1 Step 1
            $iIndex = 1
            $oInfos = $oXML.SelectNodes("//feed/entry/" & $aTel[0][$i]) ; or //Other
            For $oInfo In $oInfos
                If $i = 0 Then ReDim $aTel[UBound($aTel) + 1][12]
                If _ArraySearch($aTel, $oInfo.NodeName, 0, 0) = -1 Then ContinueLoop
                $aTel[$iIndex][$i] = $oInfo.Text
                Do
                    $aTel[$iIndex][$i] = StringReplace($aTel[$iIndex][$i], '  ', ' ')
                Until @extended = 0
                $aTel[$iIndex][$i] = StringReplace($aTel[$iIndex][$i], @LF, ';')
                $iIndex += 1
            Next
        Next
        If UBound($aTel) < 2 Then Return SetError(1, 0, False) ; keine Einträge gefunden
        ConsoleWrite(@CRLF)
        $html_string &= '<table width=400>'
        For $i = 1 To UBound($aTel) - 1 Step 1
            For $j = 0 To UBound($aTel, 2) - 1 Step 1
                If $j = 0 Then
                    $aContent = StringSplit($aTel[$i][$j], '; ', 3)
                    If @error Then ContinueLoop
    ;~                 _ArrayDisplay($aContent, '$aContent')
                    _CW(StringFormat('- %-56s: %s', $aInf[$j], $aContent[0]))
                    For $k = 1 To UBound($aContent) - 1 Step 1
                        _CW(StringFormat('- %-56s: %s', '', $aContent[$k]))
                    Next
                Else
                    If $aTel[$i][$j] = '' Then ContinueLoop
                    _CW(StringFormat('- %-56s: %s', $aInf[$j], $aTel[$i][$j]))
                    $html_string &= '<tr><td width=150 align=left>' & $aInf[$j] & '</td><td width=250 align=left>' & $aTel[$i][$j] & '</td></tr>'
                EndIf
            Next
        Next
        For $oElem In $oElemList
            $oAttributes = $oElem.attributes
            $iAttribute = 0
            For $oAttribute In $oAttributes
                $iAttribute += 1
                If $oAttribute.name = 'type' Then
                    Switch $oAttribute.value
                        Case 'fax'
                            $sAttribValue = $aInf[12]
                        Case 'mobile'
                            $sAttribValue = $aInf[13]
                        Case 'email'
                            $sAttribValue = $aInf[14]
                        Case 'website'
                            $sAttribValue = $aInf[15]
                        Case Else
                            ContinueLoop
                    EndSwitch
                    $html_string &= '<tr><td width=150 align=left>' & $sAttribValue & '</td><td width=250 align=left>' & $oElem.Text & '</td></tr>'
                    _CW(StringFormat('> .NodeName = %-22s .Text = %-42s .nodeTypeString = %-20s .nodeType = %s  $iAttribute = %i  $oAttribute.name = %s  $oAttribute.value = %s', _
                            $oElem.NodeName, $oElem.Text, $oElem.nodeTypeString, $oElem.nodeType, $iAttribute, $oAttribute.name, $oAttribute.value))
                EndIf
            Next
        Next
        $html_string &= '</table>'
        $html_string &= '</body></html>'
        _CW($html_string)
        If Not FileExists('html_string.html') Then FileWrite('html_string.html', $html_string)
        Return $html_string
    EndFunc   ;==>_Response_XML_To_HTML
    Alles anzeigen

    html_string.png

  • Editbox nachträglich in TabControl verschieben

    • Bitnugger
    • 1. November 2018 um 02:48
    Zitat von Code-Jack

    Ich brauche das Gegenstück zu GUICtrlSetPos()

    Local $PositionInputBox = ControlGetPos($hGUIParent1, '', $id)

  • COM error 80020009

    • Bitnugger
    • 31. Oktober 2018 um 19:20

    Hier hast du schon mal eine kleine Hilfe und somit was zum Spielen...

    AutoIt
    ;-- TIME_STAMP   2018-10-31 19:17:12   v 0.1
    
    #include <Array.au3>
    
    ;~ Local $oXML = ObjCreate("Microsoft.XMLDOM") ; deprecated
    Local $oXML = ObjCreate("Msxml2.DOMDocument")
    $oXML.load('api-response-example.xml')
    
    Local $sAttrib, $iAttribute, $oAttributes, $oElemList, $oRoot = $oXML.documentElement
    For $Child In $oRoot.childNodes
        $sAttrib = ''
        If $Child.NodeName = 'link' Then
            $oAttributes = $Child.attributes
            For $oAttribute In $oAttributes
                If $oAttribute.name = 'href' Then
                    $sAttrib = $oAttribute.value
                    ExitLoop
                EndIf
            Next
        EndIf
        ConsoleWrite(StringFormat('- %-30s %s\r\n', $Child.NodeName, StringReplace($Child.Text, @LF & '    ', @LF & '- ' & _Space(31)) & $sAttrib))
    Next
    
    ConsoleWrite('--------------------------------' & @CRLF)
    
    Local $iAttribute, $oAttributes, $oElemList = $oXML.SelectNodes('//feed/entry/tel:extra')
    For $oElem In $oElemList
        $oAttributes = $oElem.attributes
        $iAttribute = 0
        For $oAttribute In $oAttributes
            $iAttribute += 1
            If $oAttribute.name = 'type' Then
                ConsoleWrite(StringFormat('> .NodeName = %-22s .Text = %-42s .nodeTypeString = %-20s .nodeType = %s  $iAttribute = %i  $oAttribute.name = %s  $oAttribute.value = %s\r\n', _
                $oElem.NodeName, $oElem.Text, $oElem.nodeTypeString, $oElem.nodeType, $iAttribute, $oAttribute.name, $oAttribute.value))
            EndIf
        Next
    Next
    
    Func _Space($iNum)
        Local $sSpace
        For $i = 1 To $iNum Step 1
            $sSpace &= ' '
        Next
        Return $sSpace
    EndFunc
    Alles anzeigen
  • COM error 80020009

    • Bitnugger
    • 30. Oktober 2018 um 19:45
    Zitat von bigeasy76

    Da Kanton bei uns weniger wichtig, habe ich tel:canton mit tel:extra type="Fax" ersetzt.

    In das Array $aTel sollen die Namen der Knoten rein, die du ausgewertet haben willst... und du hast es auch fast richtig gemacht.

    Allerdings darfst du anstelle tel:canton nicht tel:extra type="fax" schreiben, sondern nur tel:extra, weil dem Knoten mit type lediglich das Attribut  "fax" zugewiesen wird und dieser Teil somit nicht mehr zum Namen des Knoten gehört.

    Das Script bricht mit einem COM ERROR ab, weil es (noch) keinen COM ERROR HANDLER gibt und in dem Array $aTel für jeden Knoten jeweils nur ein Wert gespeichert wird, tel:extra aber mehrere hat - daran hatte ich gar nicht gedacht.

    Heute habe ich aber keine Energie mehr, um noch was zu machen und morgen bin ich zum Brunch eingeladen... danach werde ich den Rest des Tages durch Alkohol bedingte Unfähigkeit glänzen... komme also frühestens Fr. dazu, mich wieder damit zu befassen.

    @Musashi

    Das erste Example war dazu gedacht, eine Anfrage ohne API-Key zu machen, das zweite mit API-Key. Ich habe aber kein API-Key und werte deshalb im zweiten Example die manuell heruntergeladene api-response-example.xml aus, die hier als Beispiel bereitgestellt wird. 8o

  • COM error 80020009

    • Bitnugger
    • 29. Oktober 2018 um 22:15
    Zitat von bigeasy76

    Wäre es möglich...

    Ja, das ist möglich.

    Hier noch mal eine letzte Version...

    AutoIt
    ;-- TIME_STAMP   2018-10-29 22:11:03   v 0.1
    
    #include-once
    ;~ #include <Array.au3>
    #include <File.au3>
    #include <WinAPIConv.au3>
    
    ;~ https://tel.search.ch/api/help
    
    Global Enum $e_content, $e_telpos, $e_telid, $e_teltype, $e_telname, $e_telfirstname, $e_teloccupation, $e_telstreet, $e_telstreetno, $e_telzip, $e_telcity, $e_telcanton, $e_telphone, $e_telSizeOff
    Global $g_aResponse, $FO = '> tel:id : %-22s, tel:name : %-48s, telfirstname : %-32s, telphone : %s\r\n'
    
    ; API-Key, wird benötigt, wenn mehr als eine Anfrage pro Tag gesendet wird, oder wenn detaillierte Informationen (/feed/entry/tel:.*) benötigt werden.
    ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Global $key = "" ; Hier den Key eingeben! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
    ; URL für die Anfrage
    Global $sURL
    
    ; Dateiname, unter der das Ergebnis der Anfrage gespeichert werden soll
    Global $g_sResponse
    
    _Example_1()
    ConsoleWrite('- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -' & @CRLF & @CRLF)
    _Example_2()
    ConsoleWrite('- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -' & @CRLF & @CRLF)
    
    Func _Example_1()
        ; Allgemeiner Suchstring. Suche nach Namen, Rubriken oder Telefonnummern
        Local $was = "UBS Zürich"
    
        _MakeURL($sURL, $was, $key)
        $g_sResponse = 'api-response_was=' & $was & '.xml'
        If Not InetGet($sURL, $g_sResponse, 1) Then Exit MsgBox(16, @ScriptName, 'Error by InetGet!')
        _CW('! "' & $g_sResponse & '" wurde soeben gespeichert' & @CRLF)
    
        $g_aResponse = _Response_XML_To_Array($g_sResponse)
        If Not @error Then _ShowResponse()
    EndFunc  ;==>_Example_1
    
    Func _Example_2()
        $g_sResponse = 'api-response-example.xml' ; Datei muss im Scriptverzeichnis vorhanden sein!
    
        $g_aResponse = _Response_XML_To_Array($g_sResponse)
        If Not @error Then _ShowResponse()
    EndFunc  ;==>_Example_2
    
    Func _MakeURL(ByRef $sURL, $was, $key)
        If $key Then
            $sURL = StringFormat("https://tel.search.ch/api/?maxnum=1&was=%s&key=%s", $was, $key) ; mit API-Key suchen
        Else
            $sURL = StringFormat("https://tel.search.ch/api/?maxnum=1&was=%s", $was) ; ohne API-Key suchen
        EndIf
    EndFunc  ;==>_MakeURL
    
    Func _ShowResponse()
        _ArrayDisplay($g_aResponse, '$g_aResponse')
        For $i = 1 To UBound($g_aResponse) - 1 Step 1
            If $g_aResponse[$i][$e_telid] Then
                ConsoleWrite(StringFormat($FO, $g_aResponse[$i][$e_telid], $g_aResponse[$i][$e_telname], $g_aResponse[$i][$e_telfirstname], $g_aResponse[$i][$e_telphone]))
                _ShowTelData($g_aResponse[$i][$e_telid], $e_telid)
                _ShowTelData($g_aResponse[$i][$e_telname], $e_telname)
                _ShowTelData($g_aResponse[$i][$e_telname], $e_telname, 1) ; partial search
            EndIf
        Next
        Local $sSaveAs = StringTrimRight($g_sResponse, 3) & 'txt'
        _FileWriteFromArray($sSaveAs, $g_aResponse, Default, Default, '|') ; Ausgewertete Daten in Datei speichern, um sie wieder in ein Array laden zu können.
        ShellExecute($sSaveAs)
        MsgBox(64, @ScriptName, 'Click OK to continue')
    EndFunc  ;==>_ShowResponse
    
    Func _ShowTelData($vData, $iField, $iCompare = 0)
        Local $aShow[0][$e_telSizeOff], $aFindAll
        _ArrayAdd($aShow, _ArrayToString(_ArrayExtract($g_aResponse, 0, 0, -1, -1)))
        $aFindAll = _ArrayFindAll($g_aResponse, $vData, 1, 0, 0, $iCompare, $iField)
        If Not @error Then
            For $i = 0 To UBound($aFindAll) - 1 Step 1
                _ArrayAdd($aShow, _ArrayExtract($g_aResponse, $aFindAll[$i], $aFindAll[$i], -1, -1))
            Next
            _ArrayDisplay($aShow, '$aRet - $iCompare = ' & $iCompare & ', ' & $g_aResponse[0][$iField] & ' = ' & $vData)
        EndIf
    EndFunc  ;==>_ShowTelData
    
    Func _Response_XML_To_Array($sResponse)
        Local Static $aTel[1][13] = [['content', 'tel:pos', 'tel:id', 'tel:type', 'tel:name', 'tel:firstname', 'tel:occupation', 'tel:street', 'tel:streetno', 'tel:zip', 'tel:city', 'tel:canton', 'tel:phone']]
        Local Static $aInf[13] = _
            [    'Zusammenfassung des Eintrags in Plaintext', _                     ; content
                'Position des Eintrags im gesamten Resultateset', _             ; tel:pos
                'Eindeutige tel.search.ch-ID des Eintrags', _                     ; tel:id
                'Art des Eintrags: Person oder Organisation', _                 ; tel:type
                'Nachname der Person resp. Name der Firma/Organisation', _         ; tel:name
                'Vorname der Person', _                                         ; tel:firstname
                'Beruf der Person, Zusatzbezeichnung bei Firmeneinträgen', _     ; tel:occupation
                'Strassenbezeichnung', _                                         ; tel:street
                'Hausnummer', _                                                 ; tel:streetno
                'Postleitzahl', _                                                 ; tel:zip
                'Ortsbezeichnung', _                                             ; tel:city
                'Kantonskürzel (ZH,BE,AG,...)', _                                 ; tel:canton
                'Telefonnummer mit Ländervorwahl' _                             ; tel:phone
            ]
    
        If Not FileExists($sResponse) Then Exit MsgBox(16, @ScriptName, 'Error: File "' & $sResponse & '" not found!')
        Local $oXML = ObjCreate("Microsoft.XMLDOM")
        If Not $oXML.load($sResponse) Then Exit MsgBox(16, @ScriptName, 'Error by $oXML.load --> "' & $sResponse & '"')
        Local $iIndex, $aContent
        For $i = 0 To UBound($aTel, 2) - 1 Step 1
            $iIndex = 1
            $oInfos = $oXML.SelectNodes("//feed/entry/" & $aTel[0][$i]) ; or //Other
            For $oInfo In $oInfos
                If $i = 0 Then ReDim $aTel[UBound($aTel) + 1][13]
                If _ArraySearch($aTel, $oInfo.NodeName, 0, 0) = -1 Then ContinueLoop
                $aTel[$iIndex][$i] = $oInfo.Text
                Do
                    $aTel[$iIndex][$i] = StringReplace($aTel[$iIndex][$i], '  ', ' ')
                Until @extended = 0
                $aTel[$iIndex][$i] = StringReplace($aTel[$iIndex][$i], @LF, ';')
                $iIndex += 1
            Next
        Next
        If UBound($aTel) < 2 Then Return SetError(1, 0, False) ; keine Einträge gefunden
    
        ConsoleWrite(@CRLF)
        For $i = 1 To UBound($aTel) - 1 Step 1
            For $j = 0 To UBound($aTel, 2) - 1 Step 1
                If $j = 0 Then
                    $aContent = StringSplit($aTel[$i][$j], '; ', 3)
                    If @error Then ContinueLoop
                    _ArrayDisplay($aContent, '$aContent')
                    _CW(StringFormat('%-56s: %s\r\n', $aInf[$j], $aContent[0]))
                    For $k = 1 To UBound($aContent) -1 Step 1
                        _CW(StringFormat('%-56s: %s\r\n', '', $aContent[$k]))
                    Next
                Else
                    If $aTel[$i][$j] = '' Then ContinueLoop
                    _CW(StringFormat('%-56s: %s\r\n', $aInf[$j], $aTel[$i][$j]))
                EndIf
            Next
            ConsoleWrite(@CRLF)
        Next
    
        Return $aTel
    EndFunc  ;==>_Response_XML_To_Array
    
    Func _CW($sText)
        ConsoleWrite(_WinAPI_WideCharToMultiByte($sText, 65001))
    EndFunc  ;==>_CW
    Alles anzeigen
  • COM error 80020009

    • Bitnugger
    • 29. Oktober 2018 um 15:56

    Das hier läuft bei mir wie es soll... kann allerdings nur ohne API-Key testen. Den musst du noch eingeben, wenn du mit abfragen willst, um detaillierte Informationen (/feed/entry/tel:.*) zu bekommen!

    AutoIt
    ;-- TIME_STAMP   2018-10-29 15:51:57   v 0.1
    
    #include-once
    ;~ #include <Array.au3>
    #include <File.au3>
    
    ;-- Press Ctrl+Shift+O in the line with the link to open the link in the browser.
    ;-- https://tel.search.ch/api/help
    
    Global Enum $e_content, $e_telpos, $e_telid, $e_teltype, $e_telname, $e_telfirstname, $e_teloccupation, $e_telstreet, $e_telstreetno, $e_telzip, $e_telcity, $e_telcanton, $e_telphone, $e_telSizeOff
    Global $g_aResponse, $FO = '> $e_telid: %-22s, %-telname: %-48s, telfirstname: %-32s, telphone: %s\r\n'
    
    ; API-Key, wird benötigt, wenn mehr als eine Anfrage pro Tag gesendet wird, oder wenn detaillierte Informationen (/feed/entry/tel:.*) benötigt werden.
    ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Global $key = "" ; Hier den Key eingeben! <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
    ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    
    ; Allgemeiner Suchstring. Suche nach Namen, Rubriken oder Telefonnummern
    Global $was = "UBS Zürich"
    
    ; URL für die Anfrage
    Global $sURL
    If $key Then
        $sURL = StringFormat("https://tel.search.ch/api/?maxnum=1&was=%s&key=%s", $was, $key) ; mit API-Key suchen
    Else
        $sURL = StringFormat("https://tel.search.ch/api/?maxnum=1&was=%s", $was) ; ohne API-Key suchen
    EndIf
    
    ; Dateiname, unter der das Ergebnis der Anfrage gespeichert werden soll
    Global $sResponse = 'api-response_was=' & $was & '.xml'
    
    If Not InetGet($sURL, $sResponse, 1) Then Exit MsgBox(16, @ScriptName, 'Error by InetGet!')
    ConsoleWrite('! "'&$sResponse&'" wurde soeben gespeichert' & @CRLF)
    
    $g_aResponse = _Response_XML_To_Array($sResponse)
    If Not @error Then
        For $i = 1 To UBound($g_aResponse) - 1 Step 1
            ConsoleWrite(StringFormat($FO, $g_aResponse[$i][$e_telid], $g_aResponse[$i][$e_telname], $g_aResponse[$i][$e_telfirstname], $g_aResponse[$i][$e_telphone]))
            _ShowTelData($g_aResponse[$i][$e_telid], $e_telid)
            _ShowTelData($g_aResponse[$i][$e_telname], $e_telname)
            _ShowTelData($g_aResponse[$i][$e_telname], $e_telname, 1) ; partial search
        Next
        Local $sSaveAs = StringTrimRight($sResponse, 3) & 'txt'
        _FileWriteFromArray($sSaveAs, $g_aResponse, Default, Default, '|')
        ShellExecute($sSaveAs)
    EndIf
    
    Func _ShowTelData($vData, $iField, $iCompare = 0)
        Local $aRet[0][$e_telSizeOff], $aFindAll
        _ArrayAdd($aRet, _ArrayToString(_ArrayExtract($g_aResponse, 0, 0, -1, -1)))
        $aFindAll = _ArrayFindAll($g_aResponse, $vData, 1, 0, 0, $iCompare, $iField)
        If Not @error Then
            For $i = 0 To UBound($aFindAll) - 1 Step 1
                _ArrayAdd($aRet, _ArrayExtract($g_aResponse, $aFindAll[$i], $aFindAll[$i], -1, -1))
            Next
            _ArrayDisplay($aRet, '$aRet - $iCompare = ' & $iCompare & ', ' & $g_aResponse[0][$iField] & ' = ' & $vData)
        EndIf
    EndFunc   ;==>_ShowTelData
    
    Func _Response_XML_To_Array($sResponse_XML)
        Local Static $aTel[1][13] = [['content', 'tel:pos', 'tel:id', 'tel:type', 'tel:name', 'tel:firstname', 'tel:occupation', 'tel:street', 'tel:streetno', 'tel:zip', 'tel:city', 'tel:canton', 'tel:phone']]
        If Not FileExists($sResponse_XML) Then Exit MsgBox(16, @ScriptName, 'Error: File "' & $sResponse_XML & '" not found!')
        Local $oXML = ObjCreate("Microsoft.XMLDOM")
        If Not $oXML.load($sResponse_XML) Then Exit MsgBox(16, @ScriptName, 'Error by $oXML.load --> "' & $sResponse_XML & '"')
        Local $iIndex
        For $i = 0 To UBound($aTel, 2) - 1 Step 1
            $iIndex = 1
            $oInfos = $oXML.SelectNodes("//feed/entry/" & $aTel[0][$i]) ; or //Other
            For $oInfo In $oInfos
                If $i = 0 Then ReDim $aTel[UBound($aTel) + 1][13]
                $aTel[$iIndex][$i] = $oInfo.Text
                Do
                    $aTel[$iIndex][$i] = StringReplace($aTel[$iIndex][$i], '  ', ' ')
                Until @extended = 0
                $aTel[$iIndex][$i] = StringReplace($aTel[$iIndex][$i], @LF, ',')
                $iIndex += 1
                ConsoleWrite(StringFormat('NodeName = %-14s , Text = %s\r\n', $oInfo.NodeName, $oInfo.Text))
            Next
        Next
        If UBound($aTel) < 2 Then Return SetError(1, 0, False) ; keine Einträge gefunden
        _ArrayDisplay($aTel, '$aTel')
        Return $aTel
    EndFunc   ;==>_Response_XML_To_Array
    Alles anzeigen
  • COM error 80020009

    • Bitnugger
    • 28. Oktober 2018 um 23:31
    Zitat von bigeasy76

    So wie ich das rausfinden konnte, kann ich diese Knoten dann nicht direkt über xml ansprechen, sondern muss im Script eine Abfrage machen, dass nur zb. Daten des Knoten so&so, wo id = so&so ist, erfasst werden. Ist das so korrekt oder gibts da doch eine elegantere Lösung

    Knoten = Node

    Das ginge, wenn du in einem ersten Durchlauf die IDs aus der response.xml ausliest.

    Schau mal hier... vielleicht bringt dich das auf den rechten Weg...

    AutoIt
    ;-- TIME_STAMP   2018-10-29 00:28:14   v 0.1
    
    #include <Array.au3>
    
    Global Enum $e_content, $e_telpos, $e_telid, $e_teltype, $e_telname, $e_telfirstname, $e_teloccupation, $e_telstreet, $e_telstreetno, $e_telzip, $e_telcity, $e_telcanton, $e_telphone, $e_telSizeOff
    
    Global $FO = '> $e_telid: %-22s, %-telname: %-48s, telfirstname: %-32s, telphone: %s\r\n'
    
    Global $g_aResponse = _Response_XML_To_Array('api-response-example.xml')
    If Not @error Then
        For $i = 1 To UBound($g_aResponse) - 1 Step 1
            ConsoleWrite(StringFormat($FO, $g_aResponse[$i][$e_telid], $g_aResponse[$i][$e_telname], $g_aResponse[$i][$e_telfirstname], $g_aResponse[$i][$e_telphone]))
            _ShowTelData($g_aResponse[$i][$e_telid], $e_telid)
            _ShowTelData($g_aResponse[$i][$e_telname], $e_telname)
            _ShowTelData($g_aResponse[$i][$e_telname], $e_telname, 1) ; partial search
        Next
    EndIf
    
    Func _ShowTelData($vData, $iField, $iCompare = 0)
        Local $aRet[0][$e_telSizeOff], $aFindAll
        Local $iAdd = _ArrayAdd($aRet, _ArrayToString(_ArrayExtract($g_aResponse, 0, 0, -1, -1)))
        ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $iAdd --> " & $iAdd & @CRLF)
    
        $aFindAll = _ArrayFindAll($g_aResponse, $vData, 1, 0, 0, $iCompare, $iField)
        If Not @error Then
            For $i = 0 To UBound($aFindAll) - 1 Step 1
                _ArrayAdd($aRet, _ArrayExtract($g_aResponse, $aFindAll[$i], $aFindAll[$i], -1, -1))
            Next
            _ArrayDisplay($aRet, '$aRet - $iCompare = ' & $iCompare & ', ' & $g_aResponse[0][$iField] & ' = ' & $vData)
        EndIf
    EndFunc   ;==>_ShowTelData
    
    Func _Response_XML_To_Array($sResponse_XML)
        Local Static $aTel[1][13] = [['content', 'tel:pos', 'tel:id', 'tel:type', 'tel:name', 'tel:firstname', 'tel:occupation', 'tel:street', 'tel:streetno', 'tel:zip', 'tel:city', 'tel:canton', 'tel:phone']]
    
        If Not FileExists($sResponse_XML) Then Exit MsgBox(16, @ScriptName, 'Error: File "' & $sResponse_XML & '" not found!')
    
        Local $oXML = ObjCreate("Microsoft.XMLDOM")
    
        If Not $oXML.load($sResponse_XML) Then Exit MsgBox(16, @ScriptName, 'Error by $oXML.load --> "' & $sResponse_XML & '"')
    
        Local $iIndex
        For $i = 0 To UBound($aTel, 2) - 1 Step 1
            $iIndex = 1
            $oInfos = $oXML.SelectNodes("//feed/entry/" & $aTel[0][$i]) ; or //Other
            For $oInfo In $oInfos
                If $i = 0 Then ReDim $aTel[UBound($aTel) + 1][13]
                $aTel[$iIndex][$i] = StringReplace($oInfo.Text, @LF, '|')
                $iIndex += 1
                ConsoleWrite(StringFormat('NodeName = %-14s , Text = %s\r\n', $oInfo.NodeName, $oInfo.Text))
            Next
        Next
    
        If UBound($aTel) < 2 Then Return SetError(1, 0, False) ; keine Einträge gefunden
    
        _ArrayDisplay($aTel, '$aTel')
    
        Return $aTel
    EndFunc   ;==>_Response_XML_To_Array
    Alles anzeigen
  • Listview in zweiter Spalte suchen

    • Bitnugger
    • 28. Oktober 2018 um 21:44
    Zitat von ruby

    Hallo Bitnagger,

    Mein Nick ist Bitnugger

    Zitat von ruby

    ist es Möglich, mit dem Befehl _GUICtrlListView_FindInText nur in einer Spalte zu suchen, ohne 'www.'

    Nein, das ist nicht möglich.

    Ich würde aber eh hingehen und die Daten in einem Array verwalten und dann auch darin suchen, denn so kannst du explizit eine Spalte angeben, in der gesucht werden soll.

    Schau mal, ob dir das hier weiterhilft...

    AutoIt
    ;-- TIME_STAMP   2018-10-28 22:38:27   v 0.1
    
    #include <GUIConstantsEx.au3>
    #include <GuiImageList.au3>
    #include <GuiListView.au3>
    #include <WindowsConstants.au3>
    #include <EditConstants.au3>
    ;~ #include <WinAPISys.au3>
    #include <WinAPIConv.au3>
    
    Global $g_hListView, $g_idInputSuche, $g_hInputSuche
    
    Global $g_iSearchColumn = 0
    
    Global $g_aLVData = _
            [ _
            [1, 'www.domain1'            , 'überschrift1', 'domainbeschreibung1 Beschreibungtext1'], _
            [2, 'www.nocheinedomain2'    , 'überschrift2', 'domainbeschreibung2 Beschreibungtext2'], _ ; hier hattest du "www.nocheinedomian2" stehen!
            [3, 'www.wiedereinedomain3'    , 'überschrift3', 'domainbeschreibung3 Beschreibungtext3'], _ ; hier hattest du "www.wiedereinedomains3" stehen!
            [4, 'www.tolledomain4'        , 'überschrift4', 'domainbeschreibung4 Beschreibungtext4'] _
            ]
    
    Example()
    
    Func Example()
        Local $hGUI, $hImage
        $hGUI = GUICreate('ListView - Suche in Spalte n', 700, 305)
    
        $g_hListView = _GUICtrlListView_Create($hGUI, "Projekt-Nr.|Domainname|Überschrift|Beschreibung", 2, 2, 694, 268, BitOR($LVS_REPORT, $LVS_SHOWSELALWAYS))
        _GUICtrlListView_SetExtendedListViewStyle($g_hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_BORDERSELECT))
        _GUICtrlListView_SetSelectedColumn($g_hListView, $g_iSearchColumn)
    
        $g_idInputSuche = GUICtrlCreateInput('Suchtext eingeben...', 2, 275, 120, 22)
        $g_hInputSuche = GUICtrlGetHandle($g_idInputSuche)
        GUICtrlSetColor($g_idInputSuche, 0x008800)
        GUICtrlCreateLabel('Info: Spaltenüberschrift anklicken, um die Spalte zu ändern, in der gesucht werden soll.', 130, 278, 430, 22)
    
        ControlFocus($g_hListView, '', '')
    
        Local $idEnterDummy = GUICtrlCreateDummy()
    
        ; Set GUIAccelerator (for the input control)
        Local $aAccelKeys[1][2] = [["{ENTER}", $idEnterDummy]]
        GUISetAccelerators($aAccelKeys)
    
        GUISetState(@SW_SHOW)
    
        GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
        GUIRegisterMsg($WM_COMMAND, "WM_COMMAND")
    
        ; Add items
        _GUICtrlListView_AddArray($g_hListView, $g_aLVData) ; Alle Daten in einem Rutsch hinzufügen
    
        Local $aColumnWidth = [50, 150, 180, 250]
        For $i = 0 To UBound($aColumnWidth) -1 Step 1
            _GUICtrlListView_SetColumnWidth($g_hListView, $i, $aColumnWidth[$i])
        Next
    
        ; Loop until the user exits.
        #Region - GUI SwitchLoop
        While True
            Switch GUIGetMsg()
                Case $GUI_EVENT_CLOSE
                    Exit
                Case $idEnterDummy
                    ConsoleWrite('Msg = $idEnterDummy' & @CRLF)
                    If ControlFocus($hGUI, '', $g_idInputSuche) Then
                        _SelectSearchInListView()
                    EndIf
            EndSwitch
        WEnd
        #EndRegion
    
        GUIDelete()
    EndFunc  ;==>Example
    
    Func _SelectSearchInListView()
        ConsoleWrite('> _SelectSearchInListView:' & @CRLF)
        Local Static $iStart = 0, $iEnd = 0, $iCase = 0, $iCompare = 1, $iForward = 1, $iSearchColumn = -1, $sOldSuchtext
    
        Local $iIndex = -1, $sSuchtext = GUICtrlRead($g_idInputSuche)
    
        If $iSearchColumn <> $g_iSearchColumn Then
            $iSearchColumn = $g_iSearchColumn
            $iStart = 0
            $sOldSuchtext = ''
        EndIf
    
        _GUICtrlListView_SetSelectedColumn($g_hListView, $g_iSearchColumn)
    
        If $sSuchtext And $sSuchtext <> 'Suchtext eingeben...' Then
            Local $iItemCount = _GUICtrlListView_GetItemCount($g_hListView)
    
            If $sOldSuchtext = $sSuchtext Then
                $iStart += 1
            Else
                $sOldSuchtext = $sSuchtext
            EndIf
            $iIndex = _ArraySearch($g_aLVData, $sSuchtext, $iStart, $iEnd, $iCase, $iCompare, $iForward, $g_iSearchColumn)
            If $iIndex = -1 Then
                $iStart = 0
                $iIndex = _ArraySearch($g_aLVData, $sSuchtext, $iStart, $iEnd, $iCase, $iCompare, $iForward, $g_iSearchColumn)
            EndIf
    
            If $iIndex > -1 Then
                GUICtrlSetColor($g_idInputSuche, 0x000000)
                For $i = 0 To $iItemCount -1 Step 1
                    _GUICtrlListView_SetItemState($g_hListView, $i, $i = $iIndex ? BitOR($LVIS_FOCUSED, $LVIS_SELECTED) : 0, BitOR($LVIS_FOCUSED, $LVIS_SELECTED))
                Next
            Else
                For $i = 0 To $iItemCount -1 Step 1
                    _GUICtrlListView_SetItemState($g_hListView, $i, 0, BitOR($LVIS_FOCUSED, $LVIS_SELECTED))
                Next
                GUICtrlSetColor($g_idInputSuche, 0xFF0000)
                $iStart = 0
            EndIf
        EndIf
        ConsoleWrite('- $iSearchColumn   = ' & $iSearchColumn & @CRLF & _
                     '- $g_iSearchColumn = ' & $g_iSearchColumn & @CRLF & _
                     '- $sSuchtext       = ' & $sSuchtext & @CRLF & _
                     '- $iStart          = ' & $iStart & @CRLF & _
                     '- $iIndex          = ' & $iIndex & @CRLF & _
                     '-  Text            = ' & ($iIndex > -1 ? $g_aLVData[$iIndex][$g_iSearchColumn] : '') & @CRLF & @CRLF)
    EndFunc  ;==>_SelectSearchInListView
    
    Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg, $wParam
        Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
        ; Local $tBuffer
        $hWndListView = $g_hListView
        If Not IsHWnd($g_hListView) Then $hWndListView = GUICtrlGetHandle($g_hListView)
    
        $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
        $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
        $iCode = DllStructGetData($tNMHDR, "Code")
        Switch $hWndFrom
            Case $hWndListView
                Switch $iCode
                    Case $LVN_COLUMNCLICK ; A column was clicked
                        $tInfo = DllStructCreate($tagNMLISTVIEW, $lParam)
                        _DebugPrint("$LVN_COLUMNCLICK" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
                                "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _
                                "-->Code:" & @TAB & $iCode & @CRLF & _
                                "-->Item:" & @TAB & DllStructGetData($tInfo, "Item") & @CRLF & _
                                "-->SubItem:" & @TAB & DllStructGetData($tInfo, "SubItem") & @CRLF & _
                                "-->NewState:" & @TAB & DllStructGetData($tInfo, "NewState") & @CRLF & _
                                "-->OldState:" & @TAB & DllStructGetData($tInfo, "OldState") & @CRLF & _
                                "-->Changed:" & @TAB & DllStructGetData($tInfo, "Changed") & @CRLF & _
                                "-->ActionX:" & @TAB & DllStructGetData($tInfo, "ActionX") & @CRLF & _
                                "-->ActionY:" & @TAB & DllStructGetData($tInfo, "ActionY") & @CRLF & _
                                "-->Param:" & @TAB & DllStructGetData($tInfo, "Param"))
    
                        $g_iSearchColumn = DllStructGetData($tInfo, "SubItem")
                        _SelectSearchInListView()
                        ; No return value
                EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
    EndFunc  ;==>WM_NOTIFY
    
    Func WM_COMMAND($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg
        Local $hWndFrom, $iIDFrom, $iCode
        $hWndFrom = $lParam
        $iIDFrom = _WinAPI_LoWord($wParam)
        $iCode = _WinAPI_HiWord($wParam)
        Switch $hWndFrom
            Case $g_hInputSuche
                Local $sSuchtext = GUICtrlRead($g_idInputSuche)
                Switch $iCode
                    Case $EN_CHANGE
                        _SelectSearchInListView()
                        _DebugPrint("$EN_CHANGE" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
                                "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _
                                "-->Code:" & @TAB & $iCode)
                        ; no return value
                    Case $EN_KILLFOCUS ; Sent when an edit control loses the keyboard focus
                        If $sSuchtext = '' Then
                            GUICtrlSetData($g_idInputSuche, 'Suchtext eingeben...')
                            GUICtrlSetColor($g_idInputSuche, 0x008800)
                        EndIf
                        _DebugPrint("$EN_KILLFOCUS" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
                                "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _
                                "-->Code:" & @TAB & $iCode)
                        ; no return value
                    Case $EN_SETFOCUS ; Sent when an edit control receives the keyboard focus
                        If $sSuchtext = 'Suchtext eingeben...' Then
                            GUICtrlSetData($g_idInputSuche, '')
                            GUICtrlSetColor($g_idInputSuche, 0x000000)
                        EndIf
                        _DebugPrint("$EN_SETFOCUS" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
                                "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _
                                "-->Code:" & @TAB & $iCode)
                        ; no return value
                EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
    EndFunc  ;==>WM_COMMAND
    
    Func _DebugPrint($s_Text, $sLine = @ScriptLineNumber)
    ;~     Return
        ConsoleWrite( _
                "!===========================================================" & @CRLF & _
                "+======================================================" & @CRLF & _
                "-->Line(" & _WinAPI_WideCharToMultiByte(StringFormat("%04d", $sLine), 65001) & "):" & @TAB & $s_Text & @CRLF & _
                "+======================================================" & @CRLF)
    EndFunc  ;==>_DebugPrint
    Alles anzeigen

    Das nächste Vorkommen des Suchtextes kannst du finden, indem du wiederholt im ListView auf die bereits ausgewählte Spaltenüberschrift klickst, oder die Enter-Taste in dem Eingabefeld drückst, in dem der Suchtext steht.

  • Listview in zweiter Spalte suchen

    • Bitnugger
    • 26. Oktober 2018 um 21:05
    Zitat von ruby

    Ich hoffe ich konnte mich verständlich ausdrücken.

    Im Prinzip schon, doch einen wirklichen Sinn sehe ich darin nicht.

    Schau mal, ob dir das hier weiterhilft...

    AutoIt
    ;-- TIME_STAMP   2018-10-26 20:57:58   v 0.1
    
    #include <GUIConstantsEx.au3>
    #include <GuiImageList.au3>
    #include <GuiListView.au3>
    #include <WindowsConstants.au3>
    ;~ #include <WinAPISys.au3>
    #include <WinAPIConv.au3>
    
    Global $g_hListView
    
    
    Example()
    
    Func Example()
        Local $hGUI, $hImage
        $hGUI = GUICreate("(UDF Created) ListView Create", 700, 300)
    
        $g_hListView = _GUICtrlListView_Create($hGUI, "Projekt-Nr.|Domainname|Überschrift|Beschreibung", 2, 2, 694, 268)
        _GUICtrlListView_SetExtendedListViewStyle($g_hListView, BitOR($LVS_EX_GRIDLINES, $LVS_EX_FULLROWSELECT, $LVS_EX_SUBITEMIMAGES))
        GUISetState(@SW_SHOW)
    
        GUIRegisterMsg($WM_NOTIFY, "WM_NOTIFY")
    
        ; Add items
        _GUICtrlListView_AddItem($g_hListView, "1") ; Projekt-Nr.
        _GUICtrlListView_AddSubItem($g_hListView, 0, "www.domain1", 1); Domainname
        _GUICtrlListView_AddSubItem($g_hListView, 0, "überschrift1", 2); Überschrift
        _GUICtrlListView_AddSubItem($g_hListView, 0, "domainbeschreibung1 Beschreibungtext1", 3); Beschreibung
    
        _GUICtrlListView_AddItem($g_hListView, "2") ; Projekt-Nr.
        _GUICtrlListView_AddSubItem($g_hListView, 1, "www.nocheinedomian2", 1); Domainname
        _GUICtrlListView_AddSubItem($g_hListView, 1, "überschrift2", 2); Überschrift
        _GUICtrlListView_AddSubItem($g_hListView, 1, "domainbeschreibung2 Beschreibungtext2", 3); Beschreibung
    
        _GUICtrlListView_AddItem($g_hListView, "3") ; Projekt-Nr.
        _GUICtrlListView_AddSubItem($g_hListView, 2, "www.wiedereinedomains3", 1); Domainname
        _GUICtrlListView_AddSubItem($g_hListView, 2, "überschrift3", 2); Überschrift
        _GUICtrlListView_AddSubItem($g_hListView, 2, "domainbeschreibung3 Beschreibungtext3", 3); Beschreibung
    
        _GUICtrlListView_AddItem($g_hListView, "4") ; Projekt-Nr.
        _GUICtrlListView_AddSubItem($g_hListView, 3, "www.tolledomain4", 1); Domainname
        _GUICtrlListView_AddSubItem($g_hListView, 3, "überschrift4", 2); Überschrift
        _GUICtrlListView_AddSubItem($g_hListView, 3, "domainbeschreibung4 Beschreibungtext4", 3); Beschreibung
    
        _GUICtrlListView_SetColumnWidth($g_hListView, 0, 50)
        _GUICtrlListView_SetColumnWidth($g_hListView, 1, 150)
        _GUICtrlListView_SetColumnWidth($g_hListView, 2, 180)
        _GUICtrlListView_SetColumnWidth($g_hListView, 3, 250)
    
    
        ; Loop until the user exits.
        Do
        Until GUIGetMsg() = $GUI_EVENT_CLOSE
        GUIDelete()
    EndFunc   ;==>Example
    
    Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
        #forceref $hWnd, $iMsg, $wParam
        Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView, $tInfo
        ; Local $tBuffer
        $hWndListView = $g_hListView
        If Not IsHWnd($g_hListView) Then $hWndListView = GUICtrlGetHandle($g_hListView)
    
        $tNMHDR = DllStructCreate($tagNMHDR, $lParam)
        $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
        $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
        $iCode = DllStructGetData($tNMHDR, "Code")
        Switch $hWndFrom
            Case $hWndListView
                Switch $iCode
                    Case $LVN_KEYDOWN ; A key has been pressed
                        $tInfo = DllStructCreate($tagNMLVKEYDOWN, $lParam)
    
                        Local $iVK = DllStructGetData($tInfo, "VKey"), $sChar, $iIndex
                        Switch $iVK
                            Case 65 To 90 ; a-z
                                $sChar = StringLower(Chr($iVK))
                            Case 219 ; ß
                                $sChar = 'ß'
                            Case 222 ; ä
                                $sChar = 'ä'
                            Case 192 ; ö
                                $sChar = 'ö'
                            Case 186 ; ü
                                $sChar = 'ü'
                            Case Else
                                Return
                        EndSwitch
    
                        _DebugPrint("$LVN_KEYDOWN" & @CRLF & "--> hWndFrom:" & @TAB & $hWndFrom & @CRLF & _
                                "-->IDFrom:" & @TAB & $iIDFrom & @CRLF & _
                                "-->Code:" & @TAB & $iCode & @CRLF & _
                                "-->VKey:" & @TAB & DllStructGetData($tInfo, "VKey") & @CRLF & _
                                "-->Char:" & @TAB & $sChar & @CRLF & _
                                "-->Flags:" & @TAB & DllStructGetData($tInfo, "Flags"))
    
                        Local Static $iStart = -1, $bWrapOK = True
                        $iIndex = _GUICtrlListView_FindInText($g_hListView, 'www.' & $sChar, $iStart, $bWrapOK)
                        ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $iIndex --> " & $iIndex & @CRLF)
                        If $iIndex > -1 Then
                            $iStart = $iIndex
                            _GUICtrlListView_SetItemState($g_hListView, $iIndex, $LVIS_FOCUSED, $LVIS_FOCUSED)
                            _GUICtrlListView_SetItemState($g_hListView, $iIndex, $LVIS_SELECTED, $LVIS_SELECTED)
                        Else
                            $iStart = -1
                        EndIf
                        ; No return value
                EndSwitch
        EndSwitch
        Return $GUI_RUNDEFMSG
    EndFunc   ;==>WM_NOTIFY
    
    Func _DebugPrint($s_Text, $sLine = @ScriptLineNumber)
        ConsoleWrite( _
                "!===========================================================" & @CRLF & _
                "+======================================================" & @CRLF & _
                "-->Line(" & _WinAPI_WideCharToMultiByte(StringFormat("%04d", $sLine), 65001) & "):" & @TAB & $s_Text & @CRLF & _
                "+======================================================" & @CRLF)
    EndFunc   ;==>_DebugPrint
    Alles anzeigen
  • Datum umwandeln

    • Bitnugger
    • 24. Oktober 2018 um 16:16

    Habe dir mal eben eine kleine Funktion dafür geschrieben, weil ich gerade in der Warteschleife hänge und nichts Besseres zu tun habe...

    AutoIt
    ;-- TIME_STAMP   2018-10-24 16:24:17   v 0.1
    
    #include <Array.au3>
    
    Global $sListe = _
    '"source","End Time","Duration","Protocol"' & @CRLF & _
    'xspw2,"Oct 22, 2018 04:00:59 PM",1539340540,tcp' & @CRLF & _
    'xspw1,"Oct 22, 2018 04:04:34 PM",1539340540.05,tcp' & @CRLF & _
    'xspw1,"Oct 22, 2018 04:22:37 PM",1539340147.9,tcp' & @CRLF
    
    Global $aConvert = _ConvertList($sListe)
    
    ConsoleWrite($sListe & @CRLF)
    _ArrayDisplay($aConvert, '$aConvert')
    
    Func _ConvertList(ByRef $sListe)
        Local Static $aMonate = ['Jan', 'Feb', 'Mar', 'Apr', 'Mai', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
        Local $aTime, $aList = StringRegExp($sListe, '.+', 3)
    
        For $i = 0 To UBound($aList) -1 Step 1
            For $j = 0 To UBound($aMonate) -1 Step 1
                If StringRegExp($aList[$i], $aMonate[$j]) Then
                    ; Datum konvertieren
                    $aList[$i] = StringRegExpReplace($aList[$i], $aMonate[$j], StringFormat('%02i', $j + 1))
                    $aList[$i] = StringRegExpReplace($aList[$i], '(\d{2}) (\d{2}), (\d{4})', '\3/\1/\2')
                    ; Zeit konvertieren
                    $aTime = StringRegExp($aList[$i], '(\d{2}):(\d{2}):(\d{2})', 1)
                    Switch True
                        Case StringRegExp($sListe, 'PM')
                            $aTime[0] += $aTime[0] < 12 ? 12 : 0
                        Case StringRegExp($sListe, 'AM')
                            $aTime[0] += $aTime[0] = 12 ? 0 : $aTime[0]
                    EndSwitch
                    $aList[$i] = StringRegExpReplace($aList[$i], '(\d{2}):(\d{2}):(\d{2})', StringFormat('%02i:%02i:%02i', $aTime[0], $aTime[1], $aTime[2]))
                    ; PM|AM entfernen
                    $aList[$i] = StringRegExpReplace($aList[$i], ' PM| AM', '')
                    ContinueLoop 2
                EndIf
            Next
        Next
    
        $sListe = _ArrayToString($aList, @CRLF)
    
        Return $aList
    EndFunc
    Alles anzeigen
  • COM error 80020009

    • Bitnugger
    • 24. Oktober 2018 um 14:00

    Du könntest es z.B. auch so machen...

    api-response.png

    ...du könntest aber auch die Ergebnisse der (erfolgreichen) Suchen (mit Datum) in eine Ini-Datei speichern und diese dann vor der nächsten Anfrage bei tel.search.ch auswerten, bzw. falls bereits ein Eintrag vorhanden ist, danach fragen, ob dieser angezeigt, oder ob eine erneute Suchanfrage gestellt werden soll. Im Prinzip stehen dir alle Wege offen... es kommt halt darauf an, war du mit den Ergebnissen der Suche machen willst.

    autoiter

    Ich denke, er möchte wissen, ob die Datei überschrieben wird (ja), wenn er eine neue Anfrage abschickt und die Datei bereits vorhanden ist, oder ob die neuen Daten an die bereits vorhanden angefügt werden, oder ob evtl. gar nichts passiert.

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™