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

Beiträge von bigeasy76

  • Umlaute ersetzen

    • bigeasy76
    • 25. Januar 2020 um 17:21

    Hab soeben etwa 100 Namen durchrasseln lassen und das hat wunderbar geklappt, somit war das Problem wohl der mangelhafte Pfad zum txt. Somit hat sich das nun erledigt.

    Aber nochmals vielen Dank für die vielen Inputs!!

  • Umlaute ersetzen

    • bigeasy76
    • 25. Januar 2020 um 12:22

    Hier die txt

    Dateien

    ausnahmen.txt 448 Byte – 386 Downloads
  • Umlaute ersetzen

    • bigeasy76
    • 25. Januar 2020 um 12:21

    Ja, Zeile 2 hat noch einen Fehler, wenn Zeile 1 ja wegfällt :/

    Global $aAusnahmen = FileRead(@ScriptDir&"\ausnahmen.txt")

  • Umlaute ersetzen

    • bigeasy76
    • 25. Januar 2020 um 12:15

    Hallo zusammen

    danke für die Tipps und sorry wegen der späten Antwort, konnte mich zwischenzeitlich nicht darum kümmern. In der txt Datei sind diese Namen wie Manuel, Samuel, etc, aber auch Nachnamen wie Neuendorfer drin, getrennt mit Semikolon, ohne Leerstellen o.ä. $sNameNeu[1] ist der Vorname, $sNameNeu[2] der Nachname der "Datensätze". So wie ich Eure Tipps richtig verstanden habe, kann ich das so machen:

    Code
    ;~ Local $AusnahmeDatei = FileOpen(@ScriptDir&"\ausnahmen.txt")
    Global $aAusnahmen = FileRead($AusnahmeDatei)
    $aAusnahmen = StringSplit($aAusnahmen, ";")
    ;~ FileClose($AusnahmeDatei)

    Die erste und die letzte Zeile könnte ich demnach ja weglassen, habe Eure Tipps dort aber trotzdem umgesetzt. Muss heute Abend vermutlich gleich wieder einige Datensätze bearbeiten und werd das mal versuchen.

    Vielen Dank für die Vielen Tipps!! :thumbup::thumbup::thumbup:

  • Umlaute ersetzen

    • bigeasy76
    • 20. Januar 2020 um 09:11

    Hallo zusammen

    bei einem Script, welches Kontaktdaten in ein Form eintragen soll, habe ich eine Funktion eingebaut, die Umlaute automatisch ändern soll, aus einem ue soll also ein ü werden. Bei Namen wie Manuel soll das aber nicht geschehen, sonst gibts einen Manül. Daher habe ich diese Ausnahmen in einer txt erfasst.

    Das Ganze funktioniert meistens auch, aber eben nur meistens, manchmal wird aus mir unerfindlichen Gründen trotzdem ein Manül eingetragen. Für mich ist das nicht so ganz logisch, entweder sollte das doch immer funktionieren oder sonst gar nicht.

    Kann mir jemand einen Tipp geben, woran das liegen könnte? Irgendwie komme ich da nicht drauf, wieso es manchmal geht und manchmal nicht.

    Code
    Local $aReplaceChars[8][2] = [[7],['Ae','Ä'],['Oe','Ö'],['Ue','Ü'],['ae','ä'],['oe','ö'],['ue','ü'],['ß','ss']] 
    Local $sAusnahmeDatei = FileOpen("ausnahmen.txt")
    Local $sAusnahmen = FileRead($sAusnahmeDatei)
    $sAusnahmen = StringSplit($sAusnahmen, ";")
    FileClose("$AusnahmeDatei")
    
    If _ArraySearch($sAusnahmen, $sNameNeu[1]) = -1 Then
       For $i = 1 To $aReplaceChars[0][0]
          $sNameNeu[1] = StringReplace($sNameNeu[1], $aReplaceChars[$i][0], $aReplaceChars[$i][1], 0, 1)
       Next
    EndIf
    
    If _ArraySearch($sAusnahmen, $sNameNeu[2]) = -1 Then
       For $i = 1 To $aReplaceChars[0][0]
          $sNameNeu[2] = StringReplace($sNameNeu[2], $aReplaceChars[$i][0], $aReplaceChars[$i][1], 0, 1)
       Next
    EndIf
    Alles anzeigen

    Danke schon jetzt mal für jeden Tipp!

  • COM error 80020009

    • bigeasy76
    • 7. November 2018 um 09:19

    Das ist wirklich grossartig, vielen Dank, klappt perfekt! Hatte Dir den Key noch per PN gesendet, kam aber offenbar nicht an bei Dir. Aber auf jeden Fall nochmals ein ganz grosses Dankeschön! Werd mir das auch mal genauer ansehen, vieles kapier ich noch nicht.

  • COM error 80020009

    • bigeasy76
    • 3. November 2018 um 11:50

    Vielen Dank für die Tipps. Beim obigen, letzten Beispiel von Dir ist mir aufgefallen, dass </table> (wenns mehrere Resultate gibt) erst nach dem letzten Eintrag eingefügt wird, idealerweise sollte dies nach jedem Eintrag eingefügt werden, so dass pro Eintrag eine Tabelle erstellt wird. Das hab ich vorher und auch jetzt durch probieren einfach nicht hinbekommen. Da müsste doch $html_string &= '</table>' einfach nur am richtigen Ort eingefügt werden, oder?

  • COM error 80020009

    • bigeasy76
    • 2. November 2018 um 08:15

    Danke für Dein Vertrauen und vorallem ein sehr grosses Danke für Deine Hilfe, aber ich befürchte, zum Profi werd ich es nicht schaffen. Ich hab mich vor 10-15 Jahren mal intensiver mit Javascript befasst, aber an einem gewissen Punkt kam ich dann einfach nicht weiter, hier ists nun ganz ähnlich: Ich kann mit Hilfe der Doku und Funktionsreferenz die Funktionen anwenden, weiss in etwa, wie Arrays oder Operatoren funktionieren. Aber wie damals, als ich Bücher kaufte und auch mal einen Javascript-Anfängerkurs besuchte (der mir nicht viel brachte, denn der war wirklich auf die blutigsten Anfänger ausgerichtet, was ist eine Variable, was ist ein String, etc), komme ich hier irgendwie nicht "aufs nächste Level", weiss nicht so ganz, wie ich meine Kenntnisse praktisch verbessern kann.

    Ich getrau mich ja fast nicht zu fragen, Du hast hier schon so viel Zeit und Arbeit investiert, aber vielleicht hast 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?

  • COM error 80020009

    • bigeasy76
    • 1. November 2018 um 10:12

    Mir fiel zwar gerade auf, dass ich $oXML = ObjCreate(xx) zweimal definiert habe... so wirds ein bisschen besser sein

    Edit: Nochmals bearbeitet und nun funktionsfähige Version.

    Nochmals Edit: 1 Fehler hab ich noch nicht lösen können, nach jedem Eintrag sollte im html-code natürlich noch ein "</table>" hinkommen, das ist im Moment noch nicht der Fall

    C
    #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 = "xxx" ; 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()
    
    Func _Example_1()
    ;~  Allgemeiner Suchstring. Suche nach Namen, Rubriken oder Telefonnummern
        Local $was = "ubs zürich"
        _MakeURL($sURL, $was, $key)
        $g_sResponse = 'api-response.xml'
        If Not InetGet($sURL, $g_sResponse, 1) Then Exit MsgBox(16, @ScriptName, 'Error by InetGet!')
        $g_aResponse = _Response_XML_To_Array($g_sResponse)
    EndFunc  ;==>_Example_1
    
    Func _MakeURL(ByRef $sURL, $was, $key)
        If $key Then
            $sURL = StringFormat("https://tel.search.ch/api/?was=%s&key=%s", $was, $key) ; mit API-Key suchen
        Else
            $sURL = StringFormat("https://tel.search.ch/api/?was=%s", $was) ; ohne API-Key suchen
        EndIf
    EndFunc  ;==>_MakeURL
    
    
    Func _Response_XML_To_Array($sResponse)
        Local $html_string = '<html><style>table, td{border: 1px solid black; text-align: left;}</style><body>'
        Local $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 & '"')
        Local Static $aTel[1][9] = [['tel:pos', 'tel:id', 'tel:name', 'tel:firstname', 'tel:street', 'tel:streetno', 'tel:zip', 'tel:city', 'tel:phone']]
        Local Static $oElemList = $oXML.SelectNodes('//feed/entry/tel:extra')
        Local Static $aInf[9] = _
            [   'Pos:', _                  ; tel:pos
                'ID:', _                   ; tel:id
                'Name/Firma:', _           ; tel:name
                'Vorname:', _           ; tel:firstname
                'Strasse:', _           ; tel:street
                'Nr:', _                ; tel:streetno
                'PLZ:', _               ; tel:zip
                'Ort:', _               ; tel:city
                'Tel:' _               ; tel:phone
            ]
        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][9]
                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
            $html_string &= '<table width=400>'
            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
    
                    $html_string &= '<tr><td width=150>' & $aInf[$j] & '</td><td width=250>' & $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
                $html_string &= '<tr><td width=150>' & $oAttribute.value & '</td><td width=250>' & $oElem.Text & '</td></tr>'
            EndIf
        Next
    Next
    $html_string &= '</table></body></html>'
    _CW($html_string)
    Return $html_string
    EndFunc  ;==>_Response_XML_To_Array
    
    Func _CW($sText)
        ConsoleWrite(_WinAPI_WideCharToMultiByte($sText, 65001))
    EndFunc  ;==>_CW
    Alles anzeigen
  • COM error 80020009

    • bigeasy76
    • 1. November 2018 um 10:06

    Hi Bitnugger

    vielen Dank für die so schnelle Antwort!! Anhand Deiner Angaben habe ich es tatsächlich so hinbekommen, dass ich schlussendlich einen kompletten html-String erhalte, mit 1 Tabelle pro gefundenem Eintrag. Für Dich als Profi ist es vermutlich Gebastel, würde mich aber trotzdem interessieren, wie Du dieses bewertest. Der Einfachheit halber notiere ich nur die Funktion _Response_XML_To_Array($sResponse) hier unten:

    HTML
    Func _Response_XML_To_Array($sResponse)
        Local $html_string = '<html><body>'
        Local $oXML = ObjCreate("Msxml2.DOMDocument")
        $oXML.load('api-response.xml')
        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 $oElemList = $oXML.SelectNodes('//feed/entry/tel:extra')
        Local Static $aInf[12] = _
            [   '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
            ]
        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][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)
        For $i = 1 To UBound($aTel) - 1 Step 1
            $html_string &= '<table width=400>'
            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]))
                    $html_string &= '<tr><td width=150 align=left>' & $aInf[$j] & '</td><td width=250 align=left>' & $aTel[$i][$j] & '</td></tr>'
                EndIf
            Next
            $html_string &= '</table>'
        Next
        For $oElem In $oElemList
        $oAttributes = $oElem.attributes
        $iAttribute = 0
        For $oAttribute In $oAttributes
            $iAttribute += 1
            If $oAttribute.name = 'type' Then
                $html_string &= '<tr><td width=150 align=left>' & $oAttribute.value & '</td><td width=250 align=left>' & $oElem.Text & '</td></tr>'
    ;~             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
    $html_string &= '</body></html>'
    _CW($html_string)
    Return $html_string
    EndFunc  ;==>_Response_XML_To_Array
    Alles anzeigen
  • COM error 80020009

    • bigeasy76
    • 31. Oktober 2018 um 18:17

    Bin inzwischen soweit, dass ich mit tel:extra[type=„Fax“] (sorry, da vom Tablet geschrieben die falschen Anführungszeichen) das Script wieder zum Laufen gebracht habe. Jedoch wird alles bis auf die Faxnummer angezeigt, da bin ich noch nicht dahintergekommen, wieso das so ist. Es ist aber sicher eine Faxnummer da.

  • COM error 80020009

    • bigeasy76
    • 30. Oktober 2018 um 23:18

    Bitnugger : Das ist überhaupt kein Problem, ich wünsche jetzt schon guten Appetit und viel Spass! Vielleicht komme ich zwischenzeitlich anhand Deiner Angaben noch selber drauf.

  • COM error 80020009

    • bigeasy76
    • 30. Oktober 2018 um 14:09

    Nochmals vielen Dank, verstehe das nun immer besser. Im Array $aTel[1][13] auf Linie 86 muss offenbar jeder der Werte einen Inhalt haben. Da Kanton bei uns weniger wichtig, habe ich tel:canton mit tel:extra type="Fax" ersetzt. Doch leider ergibt das stets den Fehler oXML Error auf Linie 109. Auch wenn ich eine Suche anwende, die sicher eine Faxnummer enthält, kommt derselbe Fehler. Eine Faxnummer gibts ja nicht bei jedem Eintrag.

  • COM error 80020009

    • bigeasy76
    • 29. Oktober 2018 um 18:31

    Toll, vielen Dank, das geht bei mir auch und langsam kapier ich das script selber auch ein bisschen. Vielleicht darf ich noch folgendes fragen:

    Bei der Ausgabe werden ja stets die Knotennamen als Beschreibung verwendet, so wie tel:street. Wäre es möglich, jedem dieser Knotennamen eine Beschreibung wie hier "Strasse" hinzuzufügen, so dass ich bei der html-Ausgabe eine schöne Tabelle erstellen könnte, die in der ersten Spalte statt Knotennamen gleich die zugehörige Beschreibung anzeigt? Ich hab nicht den geringsten Schimmer, wie ich das angehen könnte, ausser evtl. mit Arrays. Da ich bei Deinem Script aber noch vieles nicht verstehe, wüsste ich nicht, wo ansetzen.

  • COM error 80020009

    • bigeasy76
    • 29. Oktober 2018 um 08:55

    Vielen Dank Bitnugger! Bei Deinem Beispiel ist mir zwar noch vieles unklar, da ich ja noch ein Anfänger bin, aber das merkt man wohl.

    Edit: Hab da Blödsinn erzählt, es funktioniert doch, nur hatte ich bei den ersten Versuchen einen Suchbegriff verwendet, der keine Resultate ergab.


    Ich hab hier nun noch die Abfrage der URL eingefügt, aber nun läuft das Script offenbar nur bis ConsoleWrite('! api-response.xml wurde soeben gespeichert' & @CRLF) , was in der Konsole noch angezeigt wird, dann passiert nichts mehr und das Script beendet. Da ist mir noch nicht klar, wieso das dort nicht weiterläuft. Und vermutlich ist es auch wieder unprofessionelles Gebastel, nicht wahr? :)

    Code
    #include <Array.au3>
    
    ;~ https://tel.search.ch/api/help
    
    ; API-Key, wird benötigt, wenn mehr als eine Anfrage pro Tag gesendet wird.
    $key = "xxx"
    ; Allgemeiner Suchstring. Suche nach Namen, Rubriken oder Telefonnummern
    $sSuche = "UBS Zürich"
    
    $sURL = StringFormat("https://tel.search.ch/api/?maxnum=1&was=%s&key=%s", $sSuche, $key) ; mit API-Key suchen
    ;~ Local $sURL = StringFormat("https://tel.search.ch/api/?maxnum=1&was=%s", $was) ; ohne API-Key suchen
    
    InetGet($sURL, 'api-response.xml', 1)
        ConsoleWrite('! api-response.xml wurde soeben gespeichert' & @CRLF)
    
    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.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
  • COM error 80020009

    • bigeasy76
    • 28. Oktober 2018 um 10:17

    Vielen Dank Bitnugger  autoiter & @Musashi für die wie immer tolle Hilfe!

    Im ersten Schritt soll nur eine Abfrage einer Telefonnummer durchgeführt werden und das Resultat in einem html-String zurückgegeben werden. Das funktioniert nun auch tiptop.

    Später sollen dann noch Abfragen von Namen und/oder Adressen dazukommen, dann werden ja mehrere Resultate in der xml-Datei geliefert. Dort gibts ja dann jeweils mehrere Knoten mit denselben Namen.

    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?

  • COM error 80020009

    • bigeasy76
    • 24. Oktober 2018 um 09:46

    Vielen vielen Dank Bitnugger ! Das Ganze funktioniert nun tiptop, habs sogar geschafft, auch noch eine allfällige Faxnummer anzeigen zu lassen, die ja in einem anderen Node angegeben wird.

    Noch eine kleine Frage: Die xml-Datei wird ja offenbar lokal abgespeichert, diese wird vermutlich nicht gelöscht, wenn das Script zu Ende ist, oder? Aber ich vermute auch, da die xml-Datei stets den gleichen Namen hat, wird eine alte Datei überschrieben bei einer neuen Anfrage, daher wirds nicht so dramatisch sein, ist das so korrekt?

  • COM error 80020009

    • bigeasy76
    • 23. Oktober 2018 um 17:09

    Hallo zusammen

    ich hab ein Script gebastelt, welches über eine API von search.ch den Telefonbucheintrag einer Telefonnummer ausgeben soll. Die Resultate werden von der API als xml-Datei geliefert. Doch ich erhalte den Fehler

    We intercepted a COM Error ! Number is: 80020009 Windescription is: Ausnahmefehler aufgetreten.

    Leider scheint diese Meldung nichts spezifisches auszusagen, offenbar hat es aber mit dem API-Aufruf zu tun, das konnte ich als einzigstes rausfinden.

    Vielleicht hat hier jemand eine Idee, woran das liegen könnte? Ist der Befehl _XMLCreateFile() evtl. der falsche in diesem Fall?

    Eine Beispiel-xml-Datei kann ansonsten hier gefunden werden: Link

    Danke für einen Tipp!

    C
    #include <AutoItConstants.au3>
    #include <StringConstants.au3>
    #include <_XMLDomWrapper.au3>
    #include <WinAPIShPath.au3>
    #include <HTTP.au3>
    #include <File.au3>
    #include <Array.au3>
    
    $key = "&key=xxxxxx"
    ;~ $was = "&was=" & URLEncode($CmdLine[1])
    $was = "&was=0442777777"
    
    $sURL = "https://tel.search.ch/api/?maxnum=1" & $was & $key
    
    Abfragen($sURL)
    
    Func Abfragen($sURL)
    
    _XMLCreateFile($sURL, "Suche")
    
    If FileExists($sURL) Then
        While @error = 0
            $file =_XMLFileOpen($sURL)
    
            If $file = 0 Then MsgBox(0, "Fehler", "Fehler beim Oeffnen der xml-Datei.")
    
            Local $sType[8] = ['tel:name', 'tel:firstname', 'tel:street', 'tel:streetno', 'tel:zip', 'tel:city', 'tel:phone', 'tel:extra type="fax"']
            Local $sBeschr[8] = ["Name:", "Vorname:", "Strasse:", "Nr.:", "PLZ:", "Ort:", "Telefon:", "Fax:"]
            Local $html_string = "<html><head></head><body><table width=200 align=center><tr><td colspan=2><b><u>Resultate für:" & $CmdLine[1] & "</u></b></td></tr>", $y[8]
    
            For $x = 0 To 7
                $y[$x] = _XMLGetField("//entry/" & $sType[$x])
                $html_string &= "<tr><td width=60>" & $sBeschr[$x] & "</td><td width=140>" & $y[$x] & "</td></tr>"
            Next
    
            $html_string &= "</table></body></html>"
    
            MsgBox(0, "Suche", $html_string)
    
    ;~         Return $html_string
    
        WEnd
        MsgBox(4096, "Fehler", _XMLError())
    EndIf
    
    EndFunc
    Alles anzeigen
  • Fehlermeldung/Verzeichnis-Überwachung

    • bigeasy76
    • 1. Juli 2018 um 14:08

    Hallo autoiter & Bitnugger

    vielen Dank erstmal für die Geduld mit mir! Das Beispiel von Bitnugger habe ich mit wenigen Anpassungen zu Laufen gebracht, wenn ein Anruf eingeht, wird die Nummer nun in die Eingabemaske auf dem RD eingegeben und der Datensatz des Kunden - wenn vorhanden - wird mir gleich angezeigt. Das erleichtert meine Arbeit enorm, daher nochmals vielen Dank an die Herren für die Hilfe! Und nun kann ich bei Gelegenheit auch den Vorschlag von autoiter umsetzen, dass die Filebezeichnung=Nummer entspricht.

    Wünsche allerseits einen angenehmen Sonntag!

  • Fehlermeldung/Verzeichnis-Überwachung

    • bigeasy76
    • 30. Juni 2018 um 17:09

    Würde es was bringen, wenn ich in der Schleife mit GuiDelete() das Fenster wieder beenden würde? Oder was könnte dann das Problem sein, dass das Script beendet, wenn ich die While-Schleife weglasse, Du meinst ja, es müsste dann trotzdem funktionieren ohne von selbst zu beenden?

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™