Beiträge von autoiter
-
-
Phänomenal, was manche hier ständig raushauen.
Das Skript habe ich mir mal gespeichert. -
Hallo @WiDDoW
Entweder du baust einfach eine eigene GUI, die du dann mit deinen gewünschten Inhalten füllst und aufrufst - so viel Arbeit ist das nicht.
Du kannst auch z.B. folgende UDF benutzen - die ist super: https://www.autoitscript.com/forum/topic/10…rsion-9-aug-16/ -
Hallo @bazii,
danke für deine Tipps. Da auch xls- und doc-Dateien dabei sind, schien es mir jetzt doch besser einfach die UDFs zu nehmen plus normales Lesen für csv.
Da habe ich eine Frage, die fast OT ist.. Ich habe Probleme mit der Excel UDF.
Das folgende funktioniert:AutoItLocal $oWorkbook = _Excel_BookOpen(_Excel_Open(False), $sPath, True) Local $aData = _Excel_RangeRead($oWorkbook)
Das Array kann ich dann durchsuchen. Also eigentlich alles gut.
Allerdings dachte ich, es geht vllt. etwas schneller, wenn ich _Excel_RangeFind benutze.
AutoItLocal $oWorkbook = _Excel_BookOpen(_Excel_Open(False), $sPath, True) Local $aResult = _Excel_RangeFind($oWorkbook, "5678")
Allerdings stürzt dann das Skript in der UDF ab. Die Konsole sagt folgendes:
AutoIt"C:\Program Files (x86)\AutoIt3\Include\Excel.au3" (656) : ==> The requested action with this object has failed.: $aResult[$iIndex][1] = $oMatch.Name.Name $aResult[$iIndex][1] = $oMatch^ ERROR
Kann mir jemand sagen, wo das Problem liegt? -
Danke für eure Antworten
@Kanashius
Das kann natürlich sein.@n00b-it
Stimmt. Wenn du das aber nicht mit dem Array-Kram machst, sondern einfach das FileRead ($sFileRead) in die Konsole oder eine MessageBox schreiben lässt, siehst du keine Hieroglyphen, sondern eigentlich eine Ausgabe, die aussieht, als könnte das richtig sein . Naja. Könnte.Ich habe auch daran gedacht, die Word- und Excel-Funktionen zu nehmen - Office ist installiert. Allerdings hatte ich eher im Sinn, das vielleicht auf die zuvor eingegrenzten Trefferdateien zu machen, falls ich doch mal direkt zum Eintrag springen, oder bei Excel den ganzen Datensatz auslesen möchte. Für alle Dateien schien mir das zu langwierig, da ich immer so zwischen 500 und 1000 Dateien durchsuche..
Ich werde es mal ausprobieren. Mal sehen, ob das brauchbar ist. Im Zweifel automatisiere ich eben greWin für diesen Schritt. Das Tool lässt sich auch per Konsole bedienen.
-
Ich möchte einfach einen Suchbegriff in verschiedenen Dateien in einem Ordner suchen und mir die Datei/en auflisten lassen, in der/denen der Suchbegriff gefunden wurde. Fertig.
Schau dir noch einmal meinen ersten Beitrag an -
@kaesereibe
Versuche es am besten mal jetzt mit einem Neustart. Da kannst du dir sicher sein, dass dir keine Einstellung dazwischen funkt.
Ich nutze hier auch Windows 10 und kann kein Problem feststellen. -
Das funktioniert schon. Allerdings wohl nicht richtig.
Mein Verdacht war ja das Öffnen mit FileOpen als Binary. Ich dachte, da liegt ein Fehler. Ich öffne alle Dateien im Binärmodus und wandele den String um. Bei der Suche erhalte ich dann nur in den csv-Dateien Treffer (allerdings wäre das Konvertieren hier ja eigentlich nicht nötig). Bei den Dateien, die schon nicht von vornherein einfach auszulesen sind, klappt es aber auch mit dem Binary-String nicht.
-
Hi Leute,
ich habe häufiger die Anforderung alle Excel-, CSV-, oder Word-Dateien in Verzeichnissen nach einem Suchbegriff zu durchsuchen - meist ein eindeutiger Bezeichner für einen Datensatz. Ich benutze dafür ein wunderbares Tool: grepWin (https://sourceforge.net/projects/grepwin/). Obwohl es wunderbar funktioniert, wollte ich die Suchfunktion nachbauen, um mir noch etwas zu automatisieren und im Grunde ist das Tool auch oversized für meine Zwecke..
CSV-Dateien stellen ja kein Problem dar; ich habe sie nur erwähnt, weil ich auch sie durchsuche.. Um einen Suchbegriff mit grepWin zu finden, muss man einen Haken bei "Include Binary Files" setzen und schon werden auch Excel-Dateien mit einem Treffer gelistet.
Da habe ich mir gedacht, ich könnte einfach, ohne Beachtung des Dateityps, alle Dateien als Binary öffnen und den Suchbegriff als Binary-String darin suchen. Aber so plump klappt das bei mir nicht. Ich hoffe ihr könnt mir da weiter helfen.
Unten habe ich mal einen Ordner mit einigen Testfiles und meinem Skript angehängt (Die Inhalte sind immer 1234 oder Das ist ein Test). Wahrscheinlich könnt mir aber schon anhand des Codes sagen, wo meine Fehler liegen.
Spoiler anzeigen
AutoIt
Alles anzeigen#include <FileConstants.au3> Example() Func Example() GUICreate("", 320, 55, @DesktopWidth / 2 - 160, @DesktopHeight / 2 - 45, -1) Local $idFile = GUICtrlCreateInput("", 10, 5, 300, 20) Local $idBtn = GUICtrlCreateButton("Suche", 10, 30, 60, 20) GUISetState(@SW_SHOW) While 1 Switch GUIGetMsg() Case -3 Exit Case $idBtn Local $sString = GUICtrlRead($idFile) Local $bString = StringToBinary($sString) _Search($bString) EndSwitch WEnd EndFunc ;==>Example Func _Search($bString) Local $sFileName, $hFileOpen, $sFileRead Local $hSearch = FileFindFirstFile("*.*") While 1 $sFileName = FileFindNextFile($hSearch) If @error Then ExitLoop $hFileOpen = FileOpen(@ScriptDir & "\" & $sFileName, $FO_BINARY) If $hFileOpen = -1 Then ConsoleWrite("Fehler beim Einlesen der Datei: " & $sFileName & @LF) $sFileRead = FileRead($hFileOpen) If StringInStr($sFileRead, $bString) Then ConsoleWrite("Treffer in " & $sFileName & @LF) Else ConsoleWrite("Kein Treffer in " & $sFileName & @LF) EndIf FileClose($hFileOpen) WEnd EndFunc ;==>_Search
-
Das Datumsformat ist mm.dd.yyyy. Dein letztes Hochfahren war also am 10.08.2016 - in der Vergangenheit
Versetzt du deinen Rechner meist nur in Ruhezustand oder Standby? Dann kann das gut sein.
(Mach jetzt einfach einen Neustart und probiere es erneut aus ;)) -
Ich denke er möchte in seinem Fall keinen Exitloop, sondern die Möglichkeit an einem früheren Punkt wieder einzusteigen.
Das ginge natürlich auch so wie es Kanashius gemacht hat, wenn man etwa noch eine Variable mit einem Flag für die aktuelle Position im Skript füllt..
Viele Wege führen nach Rom. Ein Bsp. mit Return wäre folgendes:
AutoIt
Alles anzeigen; Starte mit Funktion 1 Global $bWert = False, $iCount = 1 _1() Func _1() Do Sleep(15) _2() Until $bWert If Not $bWert Then Return _3() EndFunc ;==>_1 Func _2() ConsoleWrite("Func _2 - startet Func _3" & @LF) _3() EndFunc ;==>_2 Func _3() $iCount += 1 If $iCount == 5 Then $bWert = True ConsoleWrite("Func 3 - also Fehler" & $iCount & @LF) EndFunc ;==>_3
Es ist also möglich, direkt einen Funktionsaufruf per Return zu setzen..
Du kannst natürlich alles in der While-Schleife machen. Die brauchst du aber nicht.
Wenn du in jeder Funktion einen Fehlerwert setzt, kannst du auch mit Return danach entweder die nächste Funktion aufrufen, oder die gleiche noch einmal, oder die davor, oder die erste, oder je nach Error-Wert was auch immer.. -
Ja, danke dir. Mit den Tipps war ich noch unsicher. Da ich nicht wusste, ob ich die Tipps noch ändern kann, habe ich die Abgabe erst einmal verschoben.
-
Hi Leute,
nun schmeiße ich meinen Handschuh in die Runde. Äh, in das Dreieck. Rainer_Zufall hat ja wohl keine Chance gegen geballtes Fußballwissen..
Ich würde mich auch freuen, wenn noch ein paar Leute teilnehmen
-
Hi Hector,
Schau dir mal folgenden Beitrag an:Inforamtionen über PC abfragen
Das ist sicherlich eine bessere Lösung
Statt die Werte wie dort in einer Messagebox auszugeben, nimmst du sie eben in dein Array auf.
-
Er/Sie möchte wie immer, die fertige Lösung präsentiert bekommen. Daher sind die naheliegenden Vorschläge zur Selbsthilfe von autoBert (_ArraySearch oder _ArrayFindAll) leider nicht ausreichend. Vielleicht würde AutoMit die Hilfe helfen. Aber das ist natürlich Quatsch. Die mag er/sie ja nicht..
-
Ich kann mich water nur anschließen. Ich nutze selbst KeePass mit KeeForm seit Jahren.
Ein ganz tolles Programm. Nebenbei kann man die erstellte Datenbank auch am Smartphone mit verschiedenen Apps nutzen.Ich nutze auch noch die Tan Funktion des Programms. Das funktioniert wunderbar und bis auf einige mir unerklärliche Abhebungen im Jahr, wenn ich abends feiern war, kann ich keine Unregelmäßigkeiten feststellen
-
Prinzipiell hast du natürlich Recht.
Mit der Berechtigung Dateien auf dem Terminal Server abzulegen und starten zu können, wäre dieser Quatsch nicht notwendig. Wir haben das auch mehrfach angesprochen. Aber der Kunde möchte das im Kontext der Terminal Server Session nicht zulassen.Oder nutze eine sichere Methode um eine so sensible DB zu pflegen. So etwas über Imagesearch zu lösen ist grob fahrlässig
Das möchte ich nicht ganz so stehen lassen. Natürlich werden die Zieldatensätze geprüft, bevor sie abgespeichert werden. Dafür ist kein ImageSearch notwendig.
Der größte Nachteil dieser Methode, Daten über die Benutzeroberfläche einzupflegen, liegt in der Langsamkeit. Aber das man hier nicht valide die Richtigkeit der hinterlegten Daten prüfen könnte, möchte ich nicht bestätigen.
Natürlich geht das. Aber ja, es ist am Ende des Tages Pfusch. -
Hallo Andy,
Eigentlich mag ich es nicht zugeben, aber falls es noch einen wie mich gibt, kann ich ihm hier eine Info geben, die ihn davor bewahrt hier eine Nonsens-Anfrage zu stellen..
Erst nachdem ich deinen Kommentar las, bin ich auf die Idee gekommen, mir mal Höhe und Breite anzeigen zu lassen.
Im Grafiktreiber war 1920x1080 eingestellt. Allerdings wurde mir eine Auflösung von 1536x864 angezeigt.
Das Problem war ganz einfach eine Einstellung im Windows 10 Menü "Start->Einstellungen->System->Bildschirm". Dort war automatisch eine Skalierung von 125% eingestellt.Nach Korrektur dieser Einstellung auf 100% war alles gut.
-
Hi Leute,
Zur Pflege einer Kundendatenbank über Remote Desktop Verbindung nutze ich teilweise AutoIt Skripte mit ImageSearch.au3.
Das hat sich angeboten, weil ich keine Dateien auf dem Terminal Server ablegen kann.Ich weiß, dass ImageSearch hier einen miesen Ruf hat. Allerdings hatte es hier auf unterschiedlichen PCs seit Jahren einwandfrei funktioniert und ermöglichte für sonst nicht importierbare Daten eine gute und schnell umsetzbare Alternative zur Datenpflege. Nun hat es mich aber auch erwischt:
An einem Laptop spuckt ImageSearch eine falsche Höhenkoordinate aus. Wenn ich den Laptop an einen Monitor anschließe und das interne Display durch zuklappen abschalte, funktioniert alles wie gewohnt. Nur bei Nutzung des Laptop Display tritt das Problem auf. Ich schätze die Ungenauigkeit etwa auf einen Faktor +0,25 je Pixel.
Das Display hat 1920x1080 Pixel wie der Monitor an dem der Laptop angeschlossen wird.
Der Laptop ist ein Lenovo Thinkpad E560 mit zwei Grafikeinheiten. Einmal die Intel Grafik der CPU "HD Graphics 520" und "AMD Radeon R7 M370". Zwischen beiden kann man auch hin und her schalten. Im AMD Catalyst Center gibt es jedenfalls Menüpunkte zu "Umschaltbare Grafiken", wo man Anwendungen je nach Akku oder Netzbetrieb eine GPU zuweisen kann. Vielleicht hat es damit zu tun?Hat hier jemand schon Erfahrungen mit dem Phänomen oder einen Tipp für mich?
-
Wenn du es so machst, solltest du am besten noch auf die Label auf Klick prüfen und da auch das entsprechende Radiocontrole markieren.