Beiträge von Donsen64
-
-
Hallo,
ich habe ein Problem mit einem etwas seltsamen Datums Format.
Ich habe die folgende Liste:
Code"source","End Time","Duration","Protocol" xspw2,"Oct 22, 2018 04:00:59 PM",1539340540,tcp xspw1,"Oct 22, 2018 04:04:34 PM",1539340540.05,tcp xspw1,"Oct 22, 2018 04:22:37 PM",1539340147.9,tcp .....
Um das Datum besser weiter zu verarbeiten, brauche ich aber die Liste im folgenden Format:
Codesource,"End Time",Duration,Protocol xspw2,2018/10/22 16:00:59,1539340540,tcp xspw1,2018/10/22 16:04:34,1539340540.05,tcp xspw1,2018/10/22 16:22:37,1539340147.9,tcp .....
Wie ich den Text finden habe ich schon. Aber wie ich das Format geändert bekommen dafür habe ich leider keine Lösung.
C
Alles anzeigen#include <Array.au3> #include <String.au3> Global $aTEMP Global $aArray[5] = [4, '"source","End Time","Duration,Protocol"', _ 'xspw2,"Oct 22, 2018 04:00:59 PM",1539340540,tcp', _ 'xspw1,"Oct 22, 2018 04:04:34 PM",1539340540.05,tcp', _ 'xspw1,"Oct 22, 2018 04:22:37 PM",1539340147.9,tcp'] For $i = 1 To $aArray[0] $aTEMP = _StringBetween($aArray[$i], '"', '"') _ArrayDisplay($aTEMP, "$aTEMP") Next _ArrayDisplay($aArray, "$aArray")
Hat jemand eine Idee wie ich das Datum Umformatieren kann.
Gruß
Donsen64
-
Hallo autoiter,
das nenne ich mal eine schnelle Antwort vielen Dank!
Das sieht sehr gut aus. Eigentlich genau das was ich brauchen würde. Werde ich mir in der nächsten Woche mal ansehen und versuchen in mein Programm zu integrieren.
Danke!
Gruß Ingo
-
Ich habe immer wieder Aktivitäten in Scripten die sehr lange dauern. Also z.B. wenn eine große Datei kopiert wird oder das Script Dateien auf der Platte bzw. auf einer Netzwerkfreigabe sucht. In der Zeit sieht das Programm für den Anwender so aus als wenn es abgestützt ist oder einfach hängt.
Jetzt hatte ich die Idee parallel zum Hauptprogramm eine GUI zu erstellen die einfach nur einen Balken hoch laufen lässt und wenn er voll ist bei Null erneut beginnt. Also dem Anwender eine Form der Aktivität vorgaukelt.
Meine erste Idee war es, dies mit AdlibRegister zu erledigen. Leider musste ich feststellen, dass dies nur läuft wenn das Hauptskript nichts macht.
Mein zweiter Versuch mit _Timer_SetTimer war auch nicht wirklich erfolgreich, die definierte Funktion wird einfach nicht aufgerufen.
Kennt jemand dafür eventuell bereits eine Lösung?
-
Hallo Water,
das ist genau die perfekte Lösung!Nachdem ich das neue Excel UDF endlich einigermaßen verstanden habe und meine Programme darauf umgestellt habe, finde ich das neue Excel UDF übrigens Perfekt. Vielen Dank dafür!
Habe mein Programm wie folgt erweitert:
AutoIt
Alles anzeigenExcelFileOpen() ObjEvent($oWorkbook, "ExcelObjEvent_") Func ExcelObjEvent_BeforeClose() ;Excel beenden _Excel_Close($oExcel) If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel Close", "Error closing the Excel application." & @CRLF & "@error = " & @error & ", @extended = " & @extended) EndFunc Func ExcelFileOpen() ;Excel Objekt erstellen $oExcel = _Excel_Open(Default, Default, Default, Default, True) If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel Open", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended) $oWorkbook = _Excel_BookOpen($oExcel, $XLS_Datei_Name) If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel Book Open", "Error opening '" & $XLS_Datei_Name & "'." & @CRLF & "@error = " & @error & ", @extended = " & @extended) EndFunc
Gruß Ingo
-
-
-
Hallo,
ich erstelle mit der folgenden Funktion einen Excel Prozess:AutoItFunc ExcelFileOpen() ;Excel Objekt erstellen $oExcel = _Excel_Open(Default, Default, Default, Default, True) If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel Open", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended) $oWorkbook = _Excel_BookOpen($oExcel, $XLS_Datei_Name) If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel Book Open", "Error opening '" & $XLS_Datei_Name & "'." & @CRLF & "@error = " & @error & ", @extended = " & @extended) EndFunc
Wenn die Excel Arbeitsmappe mit der folgenden Funktion geschlossen wird ist alles OK:CodeFunc ExcelSaveAndQuit() _Excel_BookSave($oWorkbook) If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel Book Save", "Error saving workbook." & @CRLF & "@error = " & @error & ", @extended = " & @extended) _Excel_Close($oExcel) If @error Then Exit MsgBox($MB_SYSTEMMODAL, "Excel Close", "Error closing the Excel application." & @CRLF & "@error = " & @error & ", @extended = " & @extended) EndFunc
Jetzt kommt es aber im Programmverlauf auch vor, dass die Excel Arbeitsmappe zwar über das Programm geöffnet wird, aber dann vom Anwender per Hand geschlossen wird. In einem solchen Fall bleibt dann jedes mal ein toter Excel Prozess im System. Erst wenn auch das AutoIT Programm am Abend geschlossen wird werden die ganzen toten Excel Prozesse beendet.
Hat jemand eine Idee wie ich das lösen könnte?
Gruß Ingo
-
Hallo,
leider ist das Ergebnis doch noch nicht wirklich richtig bzw. optimal.Wenn ich das folgende Starte:AutoIt
Alles anzeigen#include <Array.au3> Local $sText Local $aErgebnis $sText = "Antwort von 2001:0db8:85a3:08d3:1319:8a2e:0370: Zeit=42ms" & _ "Antwort von 2001:0db8:85a3:08d3:1319:8a2e:0370: Zeit=44ms" & _ "Antwort von 2001:0db8:85a3:08d3:1319:8a2e:0370: Zeit=41ms" & _ "So lautet das Präfix 2001:0db8:85a3:08d3::/64" $aErgebnis = _StringSearchIPv6($sText) _ArrayDisplay($aErgebnis) Func _StringSearchIPv6($sText) Local $aResult[1] Local $aTEMP Local $aTEMP2 Local $sPattern = "([0-9a-fA-F]{1,4}:{0,2}){7,8}|([0-9a-fA-F]{1,4}:{2})" ;im Text nach IPv6 suchen $aTEMP = StringRegExp($sText, $sPattern, 4) If IsArray($aTEMP) = 1 Then $aResult[0] = 0 For $i=0 To UBound($aTEMP)-1 $aTEMP2 = $aTEMP[$i] If StringInStr($aTEMP2[0], ":") <> 0 Then _ArrayAdd($aResult, $aTEMP2[0]) $aResult[0] = $aResult[0] +1 EndIf Next Return($aResult) Else Return 0 ;Nix gefunden EndIf EndFunc
Findet er leider so etwas: "2001:0db8:85a3:08d3:1319:8a2e:0370:" Also die IPv6 Endet auf einen Doppelpunkt. Das darf aber nicht sein. Nur der letzte Eintrag mit zwei Doppelpunkten am Ende "2001:0db8:85a3:08d3::" ist richtig und gültig.
Hat jemand eine Idee wie ich den einfachen Doppelpunkt am Ende verhindern kann?
Gruß Ingo
-
Hallo,
so habe es nochmal angepasst. Jetzt sollte es hoffentlich alles gewesen sein.Gruß Ingo
AutoIt
Alles anzeigen#include <Array.au3> Local $sText Local $aErgebnis $sText = "Quelle: https://de.wikipedia.org/wiki/IPv6" & _ "Die textuelle Notation von IPv6-Adressen ist in Abschnitt 2.2 von RFC 4291 beschrieben:" & _ "1. IPv6-Adressen werden gewöhnlicherweise hexadezimal (IPv4: dezimal) notiert, wobei die Zahl in acht Blöcke zu jeweils 16 Bit (4 Hexadezimalstellen) unterteilt wird. Diese Blöcke werden durch Doppelpunkte (IPv4: Punkte) getrennt notiert: 2001:0db8:85a3:08d3:1319:8a2e:0370:7344." & _ "2. Führende Nullen innerhalb eines Blockes dürfen ausgelassen werden: 2001:0db8:0000:08d3:0000:8a2e:0070:7344 ist gleichbedeutend mit 2001:db8:0:8d3:0:8a2e:70:7344." & _ "3. Ein oder mehrere aufeinander folgende Blöcke, deren Wert 0 (bzw. 0000) beträgt, dürfen ausgelassen werden. Dies wird durch zwei aufeinander folgende Doppelpunkte angezeigt: 2001:0db8:0:0:0:0:1428:57ab ist gleichbedeutend mit 2001:db8::1428:57ab.[20]" & _ "4. Die Reduktion durch Regel 3 darf nur einmal durchgeführt werden, das heißt, es darf höchstens eine zusammenhängende Gruppe aus Null-Blöcken in der Adresse ersetzt werden. Die Adresse 2001:0db8:0:0:8d3:0:0:0 darf demnach entweder zu 2001:db8:0:0:8d3:: oder 2001:db8::8d3:0:0:0 gekürzt werden; 2001:db8::8d3:: ist unzulässig, da dies mehrdeutig ist und fälschlicherweise z. B. auch als 2001:db8:0:0:0:8d3:0:0 interpretiert werden könnte. Es empfiehlt sich den Block mit den meisten Null-Blöcken zu kürzen." & _ "5. Ebenfalls darf für die letzten vier Bytes (also 32 Bits) der Adresse die herkömmliche dezimale Notation verwendet werden. So ist ::ffff:127.0.0.1 eine alternative Schreibweise für ::ffff:7f00:1. Diese Schreibweise wird vor allem bei Einbettung des IPv4-Adressraums in den IPv6-Adressraum verwendet." & _ "URL-Notation von IPv6-Adressen" & _ "In einer URL wird die IPv6-Adresse in eckige Klammern eingeschlossen,[21] z. B.:" & _ "http://[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]/" & _ "Diese Notation verhindert die fälschliche Interpretation von Portnummern als Teil der IPv6-Adresse:" & _ "http://[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]:8080/ " & _ " DHCPv6-IAID . . . . . . . . . . . : 356792294 C:\Users\cc00815> " $aErgebnis = _StringSearchIPv6($sText) _ArrayDisplay($aErgebnis) Func _StringSearchIPv6($sText) Local $aResult[1] Local $aTEMP Local $aTEMP2 Local $sPattern = "([0-9a-fA-F]{1,4}:{0,2}){7,8}|([0-9a-fA-F]{1,4}:{2})" ;im Text nach IPv6 suchen $aTEMP = StringRegExp($sText, $sPattern, 4) If IsArray($aTEMP) = 1 Then $aResult[0] = 0 For $i=0 To UBound($aTEMP)-1 $aTEMP2 = $aTEMP[$i] If StringInStr($aTEMP2[0], ":") <> 0 Then _ArrayAdd($aResult, $aTEMP2[0]) $aResult[0] = $aResult[0] +1 EndIf Next Return($aResult) Else Return 0 ;Nix gefunden EndIf EndFunc
-
Hallo,
die Idee mit dem Doppelpunkt ist eigentlich nicht schlecht. Wenn kein Doppelpunkt drin ist, ist es keine IPv6 Adresse. Werde ich mir mal ansehen.Vielen Dank für eure Hinweise.
Gruß Ingo
-
Hallo,
leider war es noch nicht wirklich die endgültige Lösung für mein Problem. In einem Text wie:
DHCPv6-IAID . . . . . . . . . . . : 356792294 C:\Users\cc00815>Findet er leider die folgenden zwei "IPv6 Adressen":
356792294
cc00815Hat jemand eine Idee wir ich das verhindern kann?
Gruß Ingo
AutoIt
Alles anzeigen#include <Array.au3> Local $sText Local $aErgebnis $sText = "Quelle: https://de.wikipedia.org/wiki/IPv6" & _ "Die textuelle Notation von IPv6-Adressen ist in Abschnitt 2.2 von RFC 4291 beschrieben:" & _ "1. IPv6-Adressen werden gewöhnlicherweise hexadezimal (IPv4: dezimal) notiert, wobei die Zahl in acht Blöcke zu jeweils 16 Bit (4 Hexadezimalstellen) unterteilt wird. Diese Blöcke werden durch Doppelpunkte (IPv4: Punkte) getrennt notiert: 2001:0db8:85a3:08d3:1319:8a2e:0370:7344." & _ "2. Führende Nullen innerhalb eines Blockes dürfen ausgelassen werden: 2001:0db8:0000:08d3:0000:8a2e:0070:7344 ist gleichbedeutend mit 2001:db8:0:8d3:0:8a2e:70:7344." & _ "3. Ein oder mehrere aufeinander folgende Blöcke, deren Wert 0 (bzw. 0000) beträgt, dürfen ausgelassen werden. Dies wird durch zwei aufeinander folgende Doppelpunkte angezeigt: 2001:0db8:0:0:0:0:1428:57ab ist gleichbedeutend mit 2001:db8::1428:57ab.[20]" & _ "4. Die Reduktion durch Regel 3 darf nur einmal durchgeführt werden, das heißt, es darf höchstens eine zusammenhängende Gruppe aus Null-Blöcken in der Adresse ersetzt werden. Die Adresse 2001:0db8:0:0:8d3:0:0:0 darf demnach entweder zu 2001:db8:0:0:8d3:: oder 2001:db8::8d3:0:0:0 gekürzt werden; 2001:db8::8d3:: ist unzulässig, da dies mehrdeutig ist und fälschlicherweise z. B. auch als 2001:db8:0:0:0:8d3:0:0 interpretiert werden könnte. Es empfiehlt sich den Block mit den meisten Null-Blöcken zu kürzen." & _ "5. Ebenfalls darf für die letzten vier Bytes (also 32 Bits) der Adresse die herkömmliche dezimale Notation verwendet werden. So ist ::ffff:127.0.0.1 eine alternative Schreibweise für ::ffff:7f00:1. Diese Schreibweise wird vor allem bei Einbettung des IPv4-Adressraums in den IPv6-Adressraum verwendet." & _ "URL-Notation von IPv6-Adressen" & _ "In einer URL wird die IPv6-Adresse in eckige Klammern eingeschlossen,[21] z. B.:" & _ "http://[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]/" & _ "Diese Notation verhindert die fälschliche Interpretation von Portnummern als Teil der IPv6-Adresse:" & _ "http://[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]:8080/ " & _ " DHCPv6-IAID . . . . . . . . . . . : 356792294 C:\Users\cc00815> " $aErgebnis = _StringSearchIPv6($sText) _ArrayDisplay($aErgebnis) Func _StringSearchIPv6($sText) Local $aResult[1] Local $aTEMP Local $aTEMP2 Local $sPattern = "([0-9a-fA-F]{1,4}:{0,2}){7,8}|([0-9a-fA-F]{1,4}:{2})" ;im Text nach IPv6 suchen $aTEMP = StringRegExp($sText, $sPattern, 4) If IsArray($aTEMP) = 1 Then $aResult[0] = 0 For $i=0 To UBound($aTEMP)-1 $aTEMP2 = $aTEMP[$i] _ArrayAdd($aResult, $aTEMP2[0]) $aResult[0] = $aResult[0] +1 Next Return($aResult) Else Return 0 ;Nix gefunden EndIf EndFunc
-
Hallo,
manchmal ist es nicht schlecht wenn man nochmal zum Nachdenken gebracht wird. Ich habe mich nochmals mit der Problematik Pattern beschäftigt und mit erstaunen festgestellt, dass es nicht wirklich so schwer ist wie ich immer angenommen haben. Also vielen Dank für eure Anstöße dazu.Ich habe also ein Pattern gebaut welches fast alle Schreibweisen, die in der Wikipedia beschrieben werden, abdeckt. Lediglich der Punkt 5 also die Ergebnisse 11 und 12 sind nicht wirklich richtig. Diese sind aber in der Praxis nicht so relevant. Auch die Schreibweisen der Netznotation, also mit Netzwerkmaske (z.B. 2001:0db8:1234::/48) sind nicht mit drin. Aber eventuell mache ich mich da nochmals ran.
Gruß Ingo
AutoIt
Alles anzeigen#include <Array.au3> Local $sText Local $aErgebnis $sText = "Quelle: https://de.wikipedia.org/wiki/IPv6" & _ "Die textuelle Notation von IPv6-Adressen ist in Abschnitt 2.2 von RFC 4291 beschrieben:" & _ "1. IPv6-Adressen werden gewöhnlicherweise hexadezimal (IPv4: dezimal) notiert, wobei die Zahl in acht Blöcke zu jeweils 16 Bit (4 Hexadezimalstellen) unterteilt wird. Diese Blöcke werden durch Doppelpunkte (IPv4: Punkte) getrennt notiert: 2001:0db8:85a3:08d3:1319:8a2e:0370:7344." & _ "2. Führende Nullen innerhalb eines Blockes dürfen ausgelassen werden: 2001:0db8:0000:08d3:0000:8a2e:0070:7344 ist gleichbedeutend mit 2001:db8:0:8d3:0:8a2e:70:7344." & _ "3. Ein oder mehrere aufeinander folgende Blöcke, deren Wert 0 (bzw. 0000) beträgt, dürfen ausgelassen werden. Dies wird durch zwei aufeinander folgende Doppelpunkte angezeigt: 2001:0db8:0:0:0:0:1428:57ab ist gleichbedeutend mit 2001:db8::1428:57ab.[20]" & _ "4. Die Reduktion durch Regel 3 darf nur einmal durchgeführt werden, das heißt, es darf höchstens eine zusammenhängende Gruppe aus Null-Blöcken in der Adresse ersetzt werden. Die Adresse 2001:0db8:0:0:8d3:0:0:0 darf demnach entweder zu 2001:db8:0:0:8d3:: oder 2001:db8::8d3:0:0:0 gekürzt werden; 2001:db8::8d3:: ist unzulässig, da dies mehrdeutig ist und fälschlicherweise z. B. auch als 2001:db8:0:0:0:8d3:0:0 interpretiert werden könnte. Es empfiehlt sich den Block mit den meisten Null-Blöcken zu kürzen." & _ "5. Ebenfalls darf für die letzten vier Bytes (also 32 Bits) der Adresse die herkömmliche dezimale Notation verwendet werden. So ist ::ffff:127.0.0.1 eine alternative Schreibweise für ::ffff:7f00:1. Diese Schreibweise wird vor allem bei Einbettung des IPv4-Adressraums in den IPv6-Adressraum verwendet." & _ "URL-Notation von IPv6-Adressen" & _ "In einer URL wird die IPv6-Adresse in eckige Klammern eingeschlossen,[21] z. B.:" & _ "http://[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]/" & _ "Diese Notation verhindert die fälschliche Interpretation von Portnummern als Teil der IPv6-Adresse:" & _ "http://[2001:0db8:85a3:08d3:1319:8a2e:0370:7344]:8080/ " $aErgebnis = _StringSearchIPv6($sText) _ArrayDisplay($aErgebnis) Func _StringSearchIPv6($sText) Local $aResult[1] Local $aTEMP Local $aTEMP2 Local $sPattern = "([0-9a-fA-F]{1,4}:{0,2}){7,8}|([0-9a-fA-F]{1,4}:{2})" ;im Text nach IPv6 suchen $aTEMP = StringRegExp($sText, $sPattern, 4) If IsArray($aTEMP) = 1 Then $aResult[0] = 0 For $i=0 To UBound($aTEMP)-1 $aTEMP2 = $aTEMP[$i] _ArrayAdd($aResult, $aTEMP2[0]) $aResult[0] = $aResult[0] +1 Next Return($aResult) Else Return 0 ;Nix gefunden EndIf EndFunc
-
Hallo,
vielen Dank für eure Hinweise.Im Bezug auf dem zu durchsuchenden Text wollte ich es möglichst sehr flexibel haben, denn der Text soll später aus sehr verschiedenen Quellen kommen. Also möglichst eine universelle AutoIT Funktion die in einem Text nach IPv6 Adressen suchen kann. Außerdem ist es bei IPv6 etwas Komplex mit den vielen zugelassenen verschiedenen Schreibweisen. Im Kommentar der Pattern sind die vielen möglichen Schreibweisen zu sehen. In meinem Programmbeispiel hatte ich eine Text als Beispiel für den zu durchsuchenden Text drin:
AutoIt$sText = "Temporäre IPv6-Adresse. . . . . . : 2003:cc:dcaa:9434:ac3a:8900:3340:3cc1 " & _ "7.25.23.2 " & _ "Verbindungslokale IPv6-Adresse . : fe80::dcaa:f15e:50a4:aa09%13"
Im Bezug zu dem Pattern kann ich nur sagen, dass ich viele verschiedenen getestet habe. Aber leider hat keine ein Ergebnis gebracht. Das Pattern welches ich in dem Beispiel drin habe scheint aus meiner Sicht aber die größte Abdeckung für verschiedene Schreibweisen zu haben. Aber auch die hier aus dem AutoIT Forum stammenden Pattern (von hier) funktionieren nicht. Irgendwie mache ich da wohl etwas grundsätzliches falsch.
Gruß Ingo
-
Hallo,
ich möchte in einem Text alle IPv6 Adressen suchen. Ich habe auch schon etwas zusammen gebaut. Aber leider funktioniert es nicht. Ich vermute, dass es mit dem Pattern zusammen hängt. Wenn ich das Pattern für die IPv4 verwende ist alles super. Aber die Pattern für IPv6 funktioniert nicht. habe auch die hier im Forum vorhandenen Pattern getestet. Leider gehen die auch nicht.Ich hoffe es hat jemand einen Tipp bzw. eine Lösung für mich.
Gruß Ingo
AutoIt
Alles anzeigen#include <Array.au3> Local $sText Local $aErgebnis $sText = "Temporäre IPv6-Adresse. . . . . . : 2003:cc:dcaa:9434:ac3a:8900:3340:3cc1 " & _ "7.25.23.2 " & _ "Verbindungslokale IPv6-Adresse . : fe80::dcaa:f15e:50a4:aa09%13" $aErgebnis = _StringSearchIPv6($sText) For $i=0 To UBound($aErgebnis)-1 _ArrayDisplay($aErgebnis[$i]) Next Func _StringSearchIPv6($sText) Local $aResult Local $aTEMP Local $sPattern = "(?x) " & @CRLF & _ "([0-9a-fA-F]{1,4}:){7,7}[0-9a-fA-F]{1,4}| # 1:2:3:4:5:6:7:8 " & @CRLF & _ "([0-9a-fA-F]{1,4}:){1,7}:| # 1:: 1:2:3:4:5:6:7:: " & @CRLF & _ "([0-9a-fA-F]{1,4}:){1,6}:[0-9a-fA-F]{1,4}| # 1::8 1:2:3:4:5:6::8 1:2:3:4:5:6::8 " & @CRLF & _ "([0-9a-fA-F]{1,4}:){1,5}(:[0-9a-fA-F]{1,4}){1,2}| # 1::7:8 1:2:3:4:5::7:8 1:2:3:4:5::8 " & @CRLF & _ "([0-9a-fA-F]{1,4}:){1,4}(:[0-9a-fA-F]{1,4}){1,3}| # 1::6:7:8 1:2:3:4::6:7:8 1:2:3:4::8 " & @CRLF & _ "([0-9a-fA-F]{1,4}:){1,3}(:[0-9a-fA-F]{1,4}){1,4}| # 1::5:6:7:8 1:2:3::5:6:7:8 1:2:3::8 " & @CRLF & _ "([0-9a-fA-F]{1,4}:){1,2}(:[0-9a-fA-F]{1,4}){1,5}| # 1::4:5:6:7:8 1:2::4:5:6:7:8 1:2::8 " & @CRLF & _ "[0-9a-fA-F]{1,4}:((:[0-9a-fA-F]{1,4}){1,6})| # 1::3:4:5:6:7:8 1::3:4:5:6:7:8 1::8 " & @CRLF & _ ":((:[0-9a-fA-F]{1,4}){1,7}|:)| # ::2:3:4:5:6:7:8 ::2:3:4:5:6:7:8 ::8 :: " & @CRLF & _ "fe80:(:[0-9a-fA-F]{0,4}){0,4}%[0-9a-zA-Z]{1,}| # fe80::7:8%eth0 fe80::7:8%1 (link-local IPv6 addresses with zone index)" & @CRLF & _ "::(ffff(:0{1,4}){0,1}:){0,1} # " & @CRLF & _ "((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3} # " & @CRLF & _ "(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])| # ::255.255.255.255 ::ffff:255.255.255.255 ::ffff:0:255.255.255.255 (IPv4-mapped IPv6 addresses and IPv4-translated addresses)" & @CRLF & _ "([0-9a-fA-F]{1,4}:){1,4}: # " & @CRLF & _ "((25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9])\.){3,3} # " & @CRLF & _ "(25[0-5]|(2[0-4]|1{0,1}[0-9]){0,1}[0-9]) # 2001:db8:3:4::192.0.2.33 64:ff9b::192.0.2.33 (IPv4-Embedded IPv6 Address)" & @CRLF & _ ")? " ;~ Local $sPattern = "(?x) " & @CRLF & _ ;~ "((?:(?:25[0-5]|2[0-4]\d|[01]\d\d|\d?\d)(?(?=\.?\d)\.)){4}\b) # erste IP-Adresse (mit Wertebereichscheck) " & @CRLF & _ ;~ "(?: # Beginn der optionalen Netzmaske " & @CRLF & _ ;~ " \s?/?\s? # das optionale Trennzeichen mit eventuellen Leerzeichen " & @CRLF & _ ;~ " \b( # falls etwas existiert soll es auch als Group gematcht werden " & @CRLF & _ ;~ " ([0-9]|[0-2][0-9]|3[0-2])(?!\.) # Die Netzmaske als einfache Zahl (=Anzahl der 1-Bits in der Maske)" & @CRLF & _ ;~ " | " & @CRLF & _ ;~ " (?:(?:0|128|192|224|240|248|252|254)\.0\.0\.0)|(?:255\.(?:(?:(?:0|128|192|224|240|248|252|254)\.0\.0)|(?:255\.(?:(?:(?:0|128|192|224|240|248|252|254)\.0)|255\.(?:0|128|192|224|240|248|252|254|255))))) # Die Netzmaske als IP-Maske " & @CRLF & _ ;~ " )(?:[^\d]|$) " & @CRLF & _ ;~ ")?" ;im Text nach IP oder Netzwerke suchen $aResult = StringRegExp($sText, $sPattern, 4) Return $aResult EndFunc
-
Hallo,
du musst dir die übergebenen Werte einfach als Variablen in der Funktion vorstellen die einen Wert von Außen bekommen bzw. bereits einen vordefinierten Wert haben, wie bei $Text3.Übrigens ist das auch der große Vorteil einer Funktion. Du hast definierte Übergabewerte und einen definierten Rückgabewert. Was dazwischen passiert ist nicht relevant und kann daher beliebig verändert werden.
Gruß Ingo
AutoItMeineFunktion("Das ist der Text 1", "Das idt der Text 2") MeineFunktion("Das ist der Text 1", "Das idt der Text 2", "Hier haben wir auch einen Text 3") Func MeineFunktion($Text1, $Text2, $Text3="das ist Text 3 wenn nichts Übergeben") MsgBox(1, "Text 1", $Text1) MsgBox(1, "Text 2", $Text2) MsgBox(1, "Text 3", $Text3) EndFunc
-
Hallo,
ist vielleicht nicht schön aber eine Lösung. Vielen Dank dafür. Ich habe das mal eingebaut und noch zusätzlich die Suche auf die klassischen Top Domänen (.com, .de, .fr ...) eingegrenzt. Die neuen langen Namen (.berlin ...) sind für nicht nicht so relevant.Gruß Ingo
AutoIt
Alles anzeigen#include <Array.au3> Local $sText Local $aFQDNs $sText = "server.domaene.com ist mein Server die URL ist aber http://server5.domaene.de/de-de/ es kann aber auch der Server server2.temp.Domaene3.FR sein der Text ist aus test.txt kopiert. Erweiterter Test server2.temp.Domaene3.Morgen ist Freitag." $aFQDNs = _StringSearchFQDN($sText) If IsArray($aFQDNs) = 1 Then _ArrayDisplay($aFQDNs) Else MsgBox(1, "Error", "Nichts gefunden") EndIf Func _StringSearchFQDN($sText) Local $aResult[1] Local $aTEMP Local $aTEMP2 Local $sPattern = "(?x)\b((?=[a-zA-Z0-9-]{1,63}\.)(xn--)?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+[a-zA-Z]{2,3}\b " ;im Text nach FQDNs suchen $aTEMP = StringRegExp($sText, $sPattern, 4) ;Ergebnis verarbeiten If IsArray($aTEMP) = 1 Then $aResult[0] = 0 For $i=0 To UBound($aTEMP)-1 $aTEMP2 = $aTEMP[$i] ;nur um in @extended die Anzahl der Punkte zu bekommen erfolgt der Aufruf von StringReplace StringReplace($aTEMP2[0], ".", "-") If @extended >= 2 Then _ArrayAdd($aResult, $aTEMP2[0]) $aResult[0] = $aResult[0]+1 EndIf Next Return($aResult) Else Return 0 ;Nix gefunden EndIf EndFunc
-
Hallo,
leider funktioniert es noch nicht richtig. Denn wenn ich den Folgenden Text an die Funktion übergebe:Code$sText = "server.domaene.com ist mein Server die URL ist aber http://server5.domaene.de/de-de/ es kann aber auch der Server server2.temp.Domaene3.FR sein der Text ist aus test.txt kopiert"
Erkennt er auch test.txt als Server. Ein echter FQDN Server Name muss aber mindestens zwei Punkte enthalten.
Wie kann ich das noch mit einbauen?
Gruß Ingo
-
Hallo Andy,
ich hatte schon im Internet gesucht und etwas zusammen gebaut. Aber leider hatte ich in meiner Funktion die Return Zeile vergessen. Daher habe ich immer eine 0 zurück bekommen, was mich zum verzweifeln gebracht hat. Aber manchmal helfen auch 1 Stunde Pause um ein Problem zu lösen.Für alle die auch FQDN Namen in einem Text suchen wollen/müssen hier die fertige Funktion.
Gruß Ingo
AutoIt
Alles anzeigen#include <Array.au3> Local $sText Local $aFQDNs $sText = "server.domaene.com ist mein Server die URL ist aber http://server5.domaene.de/de-de/ es kann aber auch der Server server2.temp.Domaene3.FR sein" $aFQDNs = _StringSearchFQDN($sText) If IsArray($aFQDNs) = 1 Then _ArrayDisplay($aFQDNs) Else MsgBox(1, "Error", "Nichts gefunden") EndIf Func _StringSearchFQDN($sText) Local $aResult[1] Local $aTEMP Local $aTEMP2 Local $sPattern = "(?x)\b((?=[a-zA-Z0-9-]{1,63}\.)(xn--)?[a-zA-Z0-9]+(-[a-zA-Z0-9]+)*\.)+[a-zA-Z]{2,63}\b " ;im Text nach FQDNs suchen $aTEMP = StringRegExp($sText, $sPattern, 4) ;Ergebnis verarbeiten If IsArray($aTEMP) = 1 Then $aResult[0] = 0 For $i=0 To UBound($aTEMP)-1 $aTEMP2 = $aTEMP[$i] _ArrayAdd($aResult, $aTEMP2[0]) $aResult[0] = $aResult[0]+1 Next Return($aResult) Else Return 0 ;Nix gefunden EndIf EndFunc
-
Hallo,
ich habe mal wieder ein Problem, dass ich in einem Text nach etwas suchen möchte. Es geht um Fully Qualified Domain Name (FQDN).
Ich habe zum Beispiel den folgenden Text:Code$sText = "server.domaene.com ist mein Server die URL ist aber http://server5.domaene.de/de-de/ es kann aber auch der Server server2.temp.Domaene3.FR sein"
Im Text sind einige Server Namen versteckt die ich herausfiltern möchte. Ich weiß, dass es mit StringRegExp möglich ist. Nur leider bin ich zu blöd das entsprechende Pattern dazu zu erstellen.
Als Ergebnis würde ich gern die folgende Liste von Server Namen haben wollen:
server.domaene.com
server5.domaene.de
server2.temp.Domaene3.FRWürde mich freuen wenn mir jemand bei dem Pattern helfen könnte.
Gruß Ingo