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!!
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!!
Hier die txt
Ja, Zeile 2 hat noch einen Fehler, wenn Zeile 1 ja wegfällt
Global $aAusnahmen = FileRead(@ScriptDir&"\ausnahmen.txt")
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:
;~ 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!!
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.
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!
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.
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?
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?
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
#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
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:
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
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.
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.
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.
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.
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?
#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
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?
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?
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!
#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
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!
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?