Danke für die Info. Ich hatte das Programm bereits mehrfach sehr erfolgreich im Einsatz, hatte den Fehler aber nicht entdeckt, da ich die Datenbank für meine Suchen stets entleert habe, da die verschiedenen Suchordner immer auf einer anderen Festplattenpartition waren. Hier auch gleich die Frage, wie sich das mit solch verschiedenen Suchorten verhält. Wie reagiert da die Datenbank, wenn ich diese nicht entleere? Was ist sinnvoller in diesem Fall meine ich. Besser DB leeren oder nicht, wenn die Suche auf verschiedenen Partitionen stattfindet?
Beiträge von bazii
-
-
Das Script ist eine richtig tolle Sache. Klasse kommentiert und nachvollziehbar. Vielen Dank für die arbeitsreiche Bereitstellung !
-
Hier wäre vielleicht grepWin etwas für dich: stefanstools.sourceforge.net/grepWin.html
Das kenne ich bereits. Kein Programm aber das ich kenne bietet mir das was ich alles vereinen möchte.
Text ersetzen kann ich in Office-Dateien nicht ohne installiertes Office.
Das habe ich nie für ein Problem gehalten, da ja auch mit einem Open- oder Libreoffice die Dateien geöffnet und bearbeitet werden können. Kann mich aber auch täuschen.
Die Forensoftware nennt mich zwar Profi, aber
und mich Fortgeschrittener .... Ich habe schon ein paar nützliche Dinge gecodet aber brauchte immer Hilfe weil ich irgendwann nicht mehr weiter wusste.
Ansonsten kann ich dir sicher die Suche in dein Programm einbauen. Aber ohne Datenbank in dem Fall, oder?
Das ist es ja, ich kann das nicht richtig beurteilen.
Mein Programm sucht und findet Text und kann ihn auch ersetzen.Dein Programm sucht und findet Text und kann die Dateien auf verschiedene Weise anzeigen.
Vereint wäre das klasse. Ob eine Datenbank dazu notwendig sein muss kann ich nicht beurteilen. Fehler ist es aber sicher nicht oder was meinst Du?
In mein Skript sollte noch die Funktionalität von Zip, 7z. entpacken, Text suchen, finden, ersetzen und die zuvor entpackten dateien wieder packen integrert werden. Das habe ich nicht geschafft.
Und Textersetzen von Officedateien sollte halt auch möglich sein. Zur Not auch nur dann, wenn Office installiert ist. -
Mir ist nicht klar, warum das Schreiben so lange dauert (bei den 489 Dateien waren es ja über 0,2 Sekunden je Datei. - So schnell durchsucht das Programm später die ganze Tabelle ). Aber das ist wohl einfach so.
Mir leutet es ein, warum die Erstsuche (Indexizierung) seine Zeit benötigt. Jede Datei einzeln öffnen, suchen, finden, schließen. Das benötigt seine Zeit. Wie gesagt, mir ist nicht schnelleres als Deine Softw. bekannt.
Bei mir ist ist die Suchdauer bei 5841 Dateien um etwa 10-15 Sekunden gestiegen (dennoch nur max 66 Sekunden mit SSD).
Ich arbeite auch mit einer SSD :). Beim zweiten Durchlauf komme ich auch auf Deine Werte. Nur beim ersten Durchlauf nicht. Ich vergleiche den ersten Durchlauf mit einem Indexizieren der Dateien auf Inhalt. Dann geht die Post aber so was von ab, das ist fantastisch. Auch andere Suchbegriffe sind schneller gefunden wie man schauen kann. Schlecht für Pausenliebhaber die ab und an mal wegen der Technik eine rauchen gehen konnten
In deinen Tests habe ich zwar keine Suchtreffer aus Office-Dateien gesehen, aber das funktioniert, oder?
Das funktioniert aber so was von perfekt. Rechtklick und Libre öffnet die Datei. Doppelklick öffnet das Textfenster in nullkommanix.
Mein Programm ist vor allem dann sinnvoll, wenn aus Performance-Erwägungen der Indexdienst abgeschaltet ist, oder die Dateien auf einem Netzlaufwerk liegen oder eben kein geeignetes Anzeigeprogramm verfügbar ist.
Oh ja. So ist es. Vor allem bei älterer Hardware habe ich grundsätzlich den Indexdienst deaktiv. Da leistet Deine Textsuche perfekte Arbeit.
Wenn du noch eine Idee hast, immer her damit.
OHA. Das ist eine gefährliche Sache bei mir. Ich muss Dich ausdrücklich davor warnen mich mit Ideeen aufzufordern. Davon habe ich mehr genug. Daraus könnte eine leicht aufwendige Arbeit werden.
Einiges habe ich aber schon zusammengestrickt. Nur wie, ist eine andere Sache
. Und wie Du es dann umsetzen könntest auch. Ich schaffe das alleine nicht.
Mein Traum ist ein Text-Regenerator. Text suchen, Text finden, Text ersetzen. Incl. Office-Dateien und incl. gepackter Dateien.
Hier mein Skript, welches nicht optimal läuft da 7z., zip nicht funktioniert.
Es könnte entsprechend auf Deine Textsuche erweitert werden könnte oder anders herum. Doch ich packe das alleine einfach nicht.
Ich habe mich auch nicht getraut, im Forum hier nach entsprechender Unterstütz zu fragen weil ich oftmals die Tips nicht umsetzen kann die ich bekomme.
Oft brauche ich Tage um 2 zeilen Code funktional zu bekommen. Mir fehlen die Hintergründe eines Studiums oder die Gehirnwindungen. Auch egal.
Hier der Code:AutoIt
Alles anzeigen#include <Array.au3> #include <AutoItConstants.au3> #include <ButtonConstants.au3> #include <EditConstants.au3> #include <File.au3> #include <FileConstants.au3> #include <GUIConstantsEx.au3> #include <StringConstants.au3> #include <WindowsConstants.au3> Opt('GUIOnEventMode', 1) Opt('MustDeclareVars', 1) Global Const $eWinTitle = "Text-Regenerator" Global Const $eName = " 2016 -Bazii-" Global $g_hGUI, $g_idEdit_SearchText, $g_idEdit_TargetText, $g_idButton_End, $g_idButton_Fuse, _ $g_idButton_Start, $g_aidCheckbox, $g_idButton_SourceFolder, $g_idInput_Path, $g_aidCheckbox2 Global Const $g_eCheckbox[] = ["txt", "html", "htm", "php", "srt", "ini", "inf", "reg", "xml", "bat", "cfg", "rtf", "xxx", "xxx", "xxx", "xxx", "xxx", "xxx", "xxx", "xxx", "xxx", "xxx"] ; ---------- --------- -------- ------- ------ ----- ---- --- -- - $g_hGUI = GUICreate($eWinTitle, 670, 530, -1, -1, BitOR($GUI_SS_DEFAULT_GUI, $WS_THICKFRAME)) $g_idEdit_SearchText = GUICtrlCreateEdit("(Suchtext)", 10, 120, 650, 153) $g_idEdit_TargetText = GUICtrlCreateEdit("(Zieltext)", 10, 300, 650, 153) $g_idButton_End = GUICtrlCreateButton("Beenden", 190, 8, 73, 33) $g_idButton_Fuse = GUICtrlCreateButton("Sicherung", 100, 8, 73, 33) GUICtrlSetTip(-1, "Eine Sicherung der ausgewählten Dateiendungen (Originale)" & @CRLF & "im Zielverzeichnis vor der Textersetzung erstellen") $g_idButton_Start = GUICtrlCreateButton("Start", 10, 8, 73, 33) GUICtrlSetTip(-1, "Die Textersetzung starten") ;~ GUICtrlCreateLabel($eName, 25, 500, 100, 17) $g_aidCheckbox = __GUI_CreateCheckbox() $g_idButton_SourceFolder = GUICtrlCreateButton("Quell Ordner", 611, 485, 34, 34, $BS_ICON) GUICtrlSetImage(-1, "shell32.dll", 4) $g_idInput_Path = GUICtrlCreateInput("Pfadauswahl nur über Icon Ordner", 125, 495, 466, 20, BitOR($GUI_SS_DEFAULT_INPUT, $ES_READONLY)) $g_aidCheckbox2 = GUICtrlCreateCheckbox("Mit Anfangsbuchstaben (Zieltext) ganze Zeilen im Dokument entfernen", 10, 460) GUICtrlSetOnEvent($g_idButton_End, __idButton_End__) GUICtrlSetOnEvent($g_idButton_SourceFolder, __idButton_SourceFolder__) GUICtrlSetOnEvent($g_idButton_Fuse, __idButton_Fuse__) GUICtrlSetOnEvent($g_idButton_Start, __idButton_Start__) GUISetOnEvent($GUI_EVENT_CLOSE, GUI_EVENT_CLOSE) GUISetState() ; ---------- --------- -------- ------- ------ ----- ---- --- -- - While Sleep(1000) WEnd ; ---------- --------- -------- ------- ------ ----- ---- --- -- - Func _ReadCheckbox($sPath) Local $sMask = _GetMask(";", "*.") Local $avPath = _FileListToArrayRec($sPath, $sMask, $FLTAR_FILES, $FLTAR_RECUR, Default, $FLTAR_FULLPATH) If @error Then Dim $avPath[1] = [0] Return SetError(Not $sMask, 0, $avPath) EndFunc Func _GetMask($sSplit, $sPre = "") Local $iFor, $sMask For $iFor = 0 To UBound($g_aidCheckbox) -1 If GUICtrlRead($g_aidCheckbox[$iFor]) = $GUI_CHECKED Then $sMask &= $sPre & $g_eCheckbox[$iFor] & $sSplit Next Return StringTrimRight($sMask, 1) EndFunc Func _Run7Zip($sCMD) Local $iPID = Run('"7za.exe" ' & $sCMD, @ScriptDir, @SW_HIDE, $STDOUT_CHILD) Local $sRead Do $sRead &= StdoutRead($iPID) Until @error StdioClose($iPID) Return $sRead EndFunc Func _ArchiveList($sPath, $sFilter) Local Const $eCMD = '"l" "' & $sPath & '"' Local Const $eRegEx = '[0-9 :-]{20}.{33}(.*\.(?:' & $sFilter & '))' Local $avRegEx $avRegEx = StringRegExp(_Run7Zip($eCMD), $eRegEx, $STR_REGEXPARRAYGLOBALMATCH) If IsArray($avRegEx) Then _ArrayInsert($avRegEx, 0, UBound($avRegEx)) Else Dim $avRegEx[1] = [0] EndIf Return $avRegEx EndFunc Func _ArchiveExtract($sPath, $sFile) Local Const $eCMD = '"e" "' & $sPath & '" "' & $sFile & '" "-o' & @TempDir & '"' _Run7Zip($eCMD) Return StringRegExp($sFile, "(?:.*\\|)(.*)", $STR_REGEXPARRAYGLOBALMATCH)[0] EndFunc Func _ArchiveAdd($sPath, $sFile) Local Const $eCMD = '"a" "' & $sPath & '" "' & $sFile & '"' _Run7Zip($eCMD) EndFunc ; ---------- --------- -------- ------- ------ ----- ---- --- -- - Func __idButton_End__() GUI_EVENT_CLOSE() EndFunc Func GUI_EVENT_CLOSE() Exit EndFunc Func __idButton_SourceFolder__() Local $sPath = FileSelectFolder("Öffnen", @MyDocumentsDir, Default, "", $g_hGUI) If @error Then Return ;--Return um nicht das Programm zu beenden, sondern um zur GUI zurückzukehren GUICtrlSetData($g_idInput_Path, $sPath) EndFunc Func __idButton_Fuse__() ;--Sicherung anlegen Local $iFor, $bChecked, $avPath Local $sPath = GUICtrlRead($g_idInput_Path) Local $iCount = 1 If $sPath <> "Pfadauswahl nur über Icon Ordner" Then If FileExists($sPath & "\Text-Regenerator Backup Verzeichnis") And Not DirRemove($sPath & "\Text-Regenerator Backup Verzeichnis", $DIR_REMOVE) Then Return MsgBox(0, "Hinweis", "Es sind geöffnete Dateien im Backupverzeichnis enthalten. Bitte schließen Sie diese vor der Ausführung!", 0, $g_hGUI) $avPath = _ReadCheckbox($sPath) If Not @error Then For $iFor = 1 To $avPath[0] If FileCopy($avPath[$iFor], $sPath & "\Text-Regenerator Backup Verzeichnis\" & $iFor, $FC_CREATEPATH) Then FileWriteLine($sPath & "\Text-Regenerator Backup Verzeichnis\Copy.txt", $iFor & " = " & $avPath[$iFor]) EndIf Next Else Return MsgBox(0, "Hinweis", "Es wurde keine Dateiendung ausgewählt!", 0, $g_hGUI) EndIf Else Return MsgBox(0, "Hinweis", "Es wurde kein Pfad ausgewählt!", 0, $g_hGUI) EndIf If $avPath[0] Then Return MsgBox(0, "Hinweis", "Backup wurde erfolgreich erstellt!", 0, $g_hGUI) MsgBox(0, "Hinweis", "Keine Dateien zur Sicherung mit den gewählten Dateieindungen vorhanden.", 0, $g_hGUI) EndFunc Func __idButton_Start__() Local $sPath = GUICtrlRead($g_idInput_Path) Local $sSearch = GUICtrlRead($g_idEdit_SearchText) Local $sTarget = GUICtrlRead($g_idEdit_TargetText) Local $avPath, $iFor, $sText, $hFile, $sFail, $avArchive, $iIn, $sFile If $sPath <> "Pfadauswahl nur über Icon Ordner" Then $avPath = _ReadCheckbox($sPath) If Not @error Then For $iFor = 1 To $avPath[0] $sText = FileRead($avPath[$iFor]) $sText = StringReplace($sText, $sSearch, $sTarget, 0, $STR_CASESENSE) $hFile = FileOpen($avPath[$iFor], $FO_OVERWRITE) If $hFile <> -1 Then FileWrite($hFile, $sText) FileClose($hFile) Else $sFail &= $avPath[$iFor] & @CRLF EndIf Next $avPath = _FileListToArrayRec($sPath, "*.zip;*.7z", $FLTAR_FILES, $FLTAR_RECUR, Default, $FLTAR_FULLPATH) If Not @error Then ConsoleWrite($avPath) For $iFor = 1 To $avPath[0] $avArchive = _ArchiveList($avPath[$iFor], _GetMask("|")) For $iIn = 1 To $avArchive[0] $sFile = @TempDir & "\" & _ArchiveExtract($avPath[$iFor], $avArchive[$iIn]) $sText = FileRead($sFile) $sText = StringReplace($sText, $sSearch, $sTarget, 0, $STR_CASESENSE) $hFile = FileOpen($sFile, $FO_OVERWRITE) FileWrite($hFile, $sText) FileClose($hFile) Next Next EndIf Else Return MsgBox(0, "Hinweis", "Es wurden keine entsprechend ausgewählten Dateiendungen gefunden!", 0, $g_hGUI) EndIf Else Return MsgBox(0, "Hinweis", "Es wurde kein Pfad ausgewählt!", 0, $g_hGUI) EndIf If $sFail Then $sFail = @CRLF & @CRLF & "Folgende Dateien konnten nicht überschrieben werden:" & @CRLF & $sFail MsgBox(0, "Hinweis", "Der Text wurde erfolgreich ersetzt!" & $sFail, 0, $g_hGUI) EndFunc ; ---------- --------- -------- ------- ------ ----- ---- --- -- - Func __GUI_CreateCheckbox() Local $iFor, $avCheckbox[UBound($g_eCheckbox)] Local $iWidth = WinGetPos($g_hGUI)[2] Local Const $eLeft = 50 Local $iCtrl = Floor($iWidth / $eLeft) For $iFor = 0 To $iCtrl -1 $avCheckbox[$iFor] = GUICtrlCreateCheckbox(" " & $g_eCheckbox[$iFor], $iFor * $eLeft + 10, 65, $eLeft, 20) Next For $iFor = $iCtrl To UBound($g_eCheckbox) -1 $avCheckbox[$iFor] = GUICtrlCreateCheckbox(" " & $g_eCheckbox[$iFor], ($iFor - $iCtrl) * $eLeft + 10, 90, $eLeft, 20) Next Return $avCheckbox EndFunc ; ---------- --------- -------- ------- ------ ----- ---- --- -- - ;~ Func __GUI_CreateCheckbox2() ;~ ;~ EndFunc ; ---------- --------- -------- ------- ------ ----- ---- --- -- -
Also wenn Du Dir ein wenig Zeit für die Idee nehemn kannst, wäre das klasseQuasi ein Gemeinschaftsprojekt.
Ich bin Gärtnermeister und äußerst kreativ im "planen" aber wesentlich zu naiv (oder zu doof), die wichtigsten Dinge im Code hinzubekommen. Bernd670, Oscar, Autobert, UEZ und nicht zuletzt MakeGrafik haben sich an mir die Zähne bereits ausgebissen, weil ich immer gleich die Hand abreisen will, wenn mir jemand den Finger hinstreckt.
Und diese Idee wäre nicht die einzigste. Hätte da noch eine ....
zündende ....
-
Im Anhang mal eine angepasste Variante. Ich fände es super, wenn du es mit dieser noch einmal probierst.
Diese Version ist wieder richtig klasse geworden. Vielen Dank dafür !
Ich habe jetzt mal zum Test nur einen kleineren Teil meiner Dateien einlesen lassen. Das sind unter 500 Dateien. Enthalten sind nur "doc, docx, xls, xlsx und pdf" Dateien. MS-Office ist auf dem Testrechner nicht installiert. nur Libreoffice. Das sollte ja aber keine Rolle spielen.
Hier ein Video von dem Versuch unter 500 Dateien mit Konsolenausgabe:
http://www.eibenkunst.de/Autoiter/Aufna…8_54_20_103.mp4Die Fehlerausgabe der Console zeigt auf die entsprechende Dateien wie z. B.:
Skriptzeile: 1399 D:\xxx\xxx\xxx\xxx\Protokoll xxx 19.12.12.doc - _Word_DocOpen-Fehler: 1Allerdings wird dieselbe Datei unterhalb des Fehlers nochmals in der Consolenausgabe ohne den Fehler "_Word_DocOpen-Fehler: 1" ausgegeben.
Bei einem Test mit wieder mehr als 8.000 Dateien läuft das Skript nun sauber durch. Gefällt mir klasse. Dauer beim Erstdurchlauf mit allen möglichen Dateitypen ca. 13 Minuten. Das sollte im Regelfall aber eher die Ausnahme darstellen meine ich. Siehe: http://www.eibenkunst.de/Autoiter/Aufna…9_15_17_588.mp4
Die Suchresultate sind sehr gut. Eine andere von mir eingesetzte Software fand auch nicht mehr als Deine, dafür war Deine schneller. Vor allem im Hinblick auf die Datenbanksuche gibt es nichts besseres, zumindest nicht was ich jemals gesehen hätte. Von meiner seite her läuft Dein Skript jetzt sehr gut durch und bietet fast alles was ich für einen sehr guten Suchlauf benötige.
Ich danke Dir sehr für die Überarbeitungen.
-
Mir ist nämlich schleierhaft, warum das Schreiben der DB so lange dauert. Vielleicht werden Nicht-Textdateien eingelesen? Du könntest mal die Einträge aus der "unterstützte Textdatei-Typen.txt" löschen und nur txt darin belassen. Aber das ist ins Blaue geraten.
Ich kann das morgen Abend gerne testen wenn ich von der Arbeit wieder zu Hause bin.
Auch der Fehler mit der Fortschrittsanzeige kommt mir spanisch vor. Das ist ein Client-Fenster. Ich dachte das bleibt automatisch vor dem Parent. Aber bei dir sieht es ja so aus, als verschwinde es hinter dem Hauptfenster und erscheint erst wieder nachdem es aktualisiert wird?!?
Der Fortschrittsbalken bleibt auch vor dem Fenster. Bei 500 DS kein Problem. Nur beim einlesen von 1.000 verschwindet es. Bei 1.500 wird es wieder angezeigt. Bei 2.000 auch.
Ich muss schauen dass ich mich in den Code einlese. Vielleicht kann ich erkennen an was es liegen kann.Ich habe schon mal die Version mit den gewünschten Funktionen fertig und habe zusätzlich noch zwei Fehler gefunden.
Hey super. Danke für die Mühe.
-
Gerade bei sehr vielen Dateien hatte das Programm noch die Schwäche, dass bei der Suche nach Dateien noch kein Feedback kam. Das wollte ich hier auch verbessern und unten links im Hauptfenster läuft ein Zähler für die gefundenen Dateien mit. Hast du das übersehen und sollte der Zähler bei der Fortschrittsanzeige liegen, oder ist dort unten auch kein Zähler sichtbar gewesen?
(Allerdings dauert dieser Schritt bei mir im AutoIt Verzeichnis bei 5841 Dateien und SSD nur ein, zwei Sekunden. Auf nem Firmenserver-Verzeichnis wo etwa 5700 xls-Dateien liegen komme ich auf etwa 9 Sekunden. Daher müsste da irgendein Problem aufgetreten sein).
Oder wurde überhaupt irgendwann während der Suche die Progressbar aktualisiert, oder hast du gestartet und irgendwann wurden einfach Ergebnisse gezeigt?
Wäre super, wenn du das nochmal nachstellen kannst und vielleicht Bedingungen erkennst, wann das passiert. Das würde mich sehr interessieren.
Danke für Dein Feedback.Ich habe Dir zum besseren Verständnis ein Fünfminütiges Video aufgezeichnet, dass Dir mehr Aufschluss über das "scheinbare" Einfrieren geben kann.
-Achte bitte nach 500 Dateien auf den Fortschrittsbalken. Bis dahin ist alles bestens.
-Nach 1.000 Dateien sieht es schon anders aus. Kein Forschrittsbalken mehr zu sehen.
-Aber nach 1.500 Dateien wieder ein Forschritsblaken sichtbar.
-Nach 2.000 Dateien (am Ende vom Video) zeigt das Proggi "keine Rückmeldung" mehr an. Es suggestiert dem Benutzer ein einfrieren der Softw. doch es ist anders. Es läuft tadellos weiter bis zum Schluss.Nach ca. 18 Minuten war das Einlesen der ca. 8.000 Dateien beendet. (Erster Start nach neu entpackten Programmdateien).
Datenbanksuche war hinterher in 0,3 Sek. absolut erfolgreich.
Meine Arbeitsumgebung zum Test ist ein Notebook mit Win10 x64 und 8GB Ram ohne jedliche im Hintergrund laufende Sonderanwendung bis auf das Aufzeichnungsprogramm.
Link zum Video:
http://www.eibenkunst.de/Autoiter/Aufna…7_23_49_226.mp4 (IE oder Edge nutzen ! Firefox öffnet mir das Video leider nicht.)Suchbegriffe lassen sich bisher einzeln mit Entf löschen und die Datenbank wird nur gelöscht, wenn man das Startverzeichnis ändert und Datenbankbereinigung bei der nächsten Suche aktiviert hat. Letzteres finde ich selbst auch schwach.
Schwach finde ich es gar nicht. Ich selbst habe aber die Vorliebe zur Spurenbeseitigung nach einer Schlagwortsuche. Das spielt ja aber bei der Bereinigung der DB weniger eine übergeordnete Rolle.
Danke für den Tip mit der "Entf.-Taste". Das hatte ich schlichtweg übersehen, dass wenn ich bei der Auswahl des Suchtextes in der geöffneten Dropdown Liste das Wort markiere, den Suchtext löschen kann. -
Mein Feedback als begeisteter Nutzer von Deiner Textsuche:
-Die neue Option funktioniert sehr gut. Ae, oe und ue werden , wenn angehakt bestens entdeckt.
-Das Durchsuchen von 8.200 Textdateien auf ein Schlagwort hat beim 2ten Mal nur 40 Sekunden samt Trefferanzeige gedauert. Beim ersten Mal war über Minuten hinweg kein Fortschritt zu sehen. Das Programm war aber nicht eingefroren. Das kann man ja gut am Festplattenzugriff erkennen.- Klasse würde ich zusätzlich finden, wenn die Liste der bereits gesuchten Stichworte mit einem Klick in der Gui gelöscht, als auch die Datenbank auf den Auslieferungszustand bereinigt werden könnte.
Insgesamt kann ich mich nur wiederholen. Tolle Sache Dein Proggi und absolut funktional. Sehr gute Arbeit. Vielen Dank dafür.
-
Dies ist ein sehr hilfreiches und zuverlässiges Werkzeug. Vielen Dank für die Bereitstellung des Quellcodes. Was mit besonders gut gefällt ist die einfache Bedienmöglichkeit des Kalenders im Bezug auf die zu ändernde Datei.
Eine Frage: Bei jeder Datei die ich anklicke erscheint ein Infofenster mit dem Inhalt Attribute A. Wofür ist das gedacht?
-
Hallo Hingo,
ist das Thema hier nun erledigt? Es geht meiner Meinung nach um das gleiche und fast um das selbe Thema. alpines hat Dich bereits darauf angesprochen, das Thema auf gelöst zu setzen.
-
Hallo,
ich bin schwer begeistert von der neuen Version. Sehr gute Arbeit! Vielen Dank für die Bereitstellung.
-
Hilf mir bitte falls ich Dich falsch verstehe.
1. Möchtest Du gar nicht erst, dass der Bildschirmschoner aktiv wird?
2. Möchtest Du den Sperrbildschirm (Bildschirmschoner) per Script deaktivieren?
Falls ja, wie möchtest Du das Script starten wenn die Bildschirmsperre aktiv ist?Lange Reder kurzer Sinn. Schau Dir mal das Script Desktopsperre von Oscar an. Das sollte Dein Vorhaben enorm erleichtern.
-
Wer also vorhat mit dem Arduino eine Funkübertragung zu betreiben, der sollte sich unbedingt einen Superhet-Empfänger zulegen. Die 3EUR mehr sind es auf jeden Fall wert.
Das ist eine wichtige Info. Vielen Dank. Ich habe mir jetzt mal das Arduino-Starterkit bestellt . Mal schauen wie ich damit zurechtkomme
.
-
Damit ich den Speicherort ändern kann muss ich doch _InitPDF(@ScriptDir & "\getmac.pdf") und $getmac = @ScriptDir & "\getmac.txt" ändern, oder?
Ich habe Dir noch ein Beispiel erstellt
. Vergleiche am besten mal die Skripte. Tip: In Notepad ++ kam man ein Plugin mit dem Namen "compare" installieren. Damit lassen sich zwei Scripte prima miteinander vergleichen.
Neu mit Speicherpfad c:\logs\
C
Alles anzeigen#include <Date.au3> #include <MPDF_UDF.au3> $dir = "C:\logs\" $file1 = "C:\logs\getmac__.txt" $file2 = "C:\logs\getmac_.txt" $getmac = "C:\logs\getmac.txt" If Not FileExists($dir) Then DirCreate ($dir) FileOpen($file1, 2) FileWrite($file1," BPCS Checkliste "&@CRLF) FileWrite($file1,"====================================================="&@CRLF) FileWrite($file1,""&@CRLF) FileWrite($file1, "Current Date: " & _NowDate()&@CRLF) FileWrite($file1, "Current Time: " & _NowTime()&@CRLF) FileWrite($file1, ""&@CRLF) FileWrite($file1, "********************Computer Data********************"&@CRLF) FileWrite($file1, ""&@CRLF) FileClose($file1) RunWait(@ComSpec & " /c getmac /V > " & $file2, "", @SW_HIDE) FileOpen($getmac, 2) FileWrite($getmac, FileRead($file1) & @CRLF & FileRead($file2)) FileClose($file2) FileClose($getmac) ;Einstellungen für die PDF Erstellung _SetTitle("getmac") _SetSubject("getmac to pdf") _SetKeywords("pdf, AutoIt") _OpenAfter(True);PDF nach erstellung öffnen _SetUnit($PDF_UNIT_CM) _SetPaperSize("A4") _SetZoomMode($PDF_ZOOM_CUSTOM, 90) _SetOrientation($PDF_ORIENTATION_PORTRAIT) _SetLayoutMode($PDF_LAYOUT_CONTINOUS) ;initialize the pdf _InitPDF("C:\logs\getmac.pdf") _LoadFontTT("F1", $PDF_FONT_CALIBRI,$PDF_FONT_ITALIC) _Txt2PDF($getmac, "F1") ;write the buffer to disk _ClosePDFFile() ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Txt2PDF ; Description ...: Convert a text file to pdf ; Syntax ........: _Txt2PDF( $sText , $sFontAlias ) ; Parameters ....: $sText - file path. ; $sFontAlias - font alias. ; Return values .: None ; Author(s) .....: Mihai Iancu (taietel at yahoo dot com) ; Modified ......: ; Remarks .......: If the string is very long, it will be scaled to paper width ; Related .......: ; Link ..........: ; Example .......: No ; =============================================================================================================================== Func _Txt2PDF($sFile, $sFontAlias) Local $hFile = FileOpen($sFile) Local $sText = FileRead($hFile) FileClose($hFile) Local $iUnit = Ceiling(_GetUnit()) Local $iX = 2 Local $iY = Ceiling(_GetPageHeight() / _GetUnit()) - 1.5 Local $iPagina = Ceiling(_GetPageWidth() / $iUnit) - $iX Local $iWidth = Ceiling($iPagina - $iX);, 1) Local $lScale Local $iRanduri = StringSplit($sText & @CRLF & @CRLF & @CRLF & @CRLF, @CRLF, 3) Local $iHR = 0.5 * Ceiling($iY / (10 * $iUnit)) Local $iPages = Ceiling((UBound($iRanduri)) * $iHR / $iY) Local $iNrRanduri = Ceiling(UBound($iRanduri) / $iPages-2) Local $nrp For $j = 0 To $iPages + 2 $nrp = _BeginPage() _DrawText(_GetPageWidth()/_GetUnit()-1, 1, $nrp, "F1", 10, $PDF_ALIGN_CENTER) For $i = 0 To $iNrRanduri - 1 Local $sLength = Round(_GetTextLength($iRanduri[$i + $j * $iNrRanduri], $sFontAlias, 10)) Local $iH = $iY - $iHR * ($i + 1) Select Case $iH < 1 _EndPage() Case $i + $j * $iNrRanduri = UBound($iRanduri) - 1 _EndPage() Return Case $sLength > $iWidth - 1 $lScale = Ceiling($iWidth * 100 / $sLength) _SetTextHorizontalScaling($lScale) _DrawText($iX, $iH, $iRanduri[$i + $j * $iNrRanduri], $sFontAlias, 10, $PDF_ALIGN_LEFT, 0) _SetTextHorizontalScaling(100) Case Else _DrawText($iX, $iH, $iRanduri[$i + $j * $iNrRanduri], $sFontAlias, 10, $PDF_ALIGN_LEFT, 0) EndSelect Next _EndPage() Next EndFunc ;==>_Txt2PDF FileDelete($file1) FileDelete($file2)
2. Speicherpfad im Ausführungsverzeichnis:
C
Alles anzeigen#include <Date.au3> #include <MPDF_UDF.au3> $file1 = @ScriptDir & "\getmac__.txt" $file2 = @ScriptDir & "\getmac_.txt" $getmac =@ScriptDir & "\getmac.txt" $sF = @ScriptDir & "\getmac.txt" FileOpen($file1, 2) FileWrite($file1," BPCS Checkliste "&@CRLF) FileWrite($file1,"====================================================="&@CRLF) FileWrite($file1,""&@CRLF) FileWrite($file1, "Current Date: " & _NowDate()&@CRLF) FileWrite($file1, "Current Time: " & _NowTime()&@CRLF) FileWrite($file1, ""&@CRLF) FileWrite($file1, "********************Computer Data********************"&@CRLF) FileWrite($file1, ""&@CRLF) ;~ FileWrite($file1, "Serial number:"&@CRLF) FileClose($file1) RunWait(@ComSpec & ' /c ' & 'getmac /V > getmac_.txt' & '"', "", @ScriptDir, @SW_HIDE) FileOpen($getmac, 2) FileWrite($getmac, FileRead($file1) & @CRLF & FileRead($file2)) FileClose($file2) FileClose($getmac) ;Einstellungen für die PDF Erstellung _SetTitle("getmac") _SetSubject("getmac to pdf") _SetKeywords("pdf, AutoIt") _OpenAfter(True);PDF nach erstellung öffnen _SetUnit($PDF_UNIT_CM) _SetPaperSize("A4") _SetZoomMode($PDF_ZOOM_CUSTOM, 90) _SetOrientation($PDF_ORIENTATION_PORTRAIT) _SetLayoutMode($PDF_LAYOUT_CONTINOUS) ;initialize the pdf _InitPDF(@ScriptDir & "\getmac.pdf") _LoadFontTT("F1", $PDF_FONT_CALIBRI,$PDF_FONT_ITALIC) _Txt2PDF($sF, "F1") ;write the buffer to disk _ClosePDFFile() ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Txt2PDF ; Description ...: Convert a text file to pdf ; Syntax ........: _Txt2PDF( $sText , $sFontAlias ) ; Parameters ....: $sText - file path. ; $sFontAlias - font alias. ; Return values .: None ; Author(s) .....: Mihai Iancu (taietel at yahoo dot com) ; Modified ......: ; Remarks .......: If the string is very long, it will be scaled to paper width ; Related .......: ; Link ..........: ; Example .......: No ; =============================================================================================================================== Func _Txt2PDF($sFile, $sFontAlias) Local $hFile = FileOpen($sFile) Local $sText = FileRead($hFile) FileClose($hFile) Local $iUnit = Ceiling(_GetUnit()) Local $iX = 2 Local $iY = Ceiling(_GetPageHeight() / _GetUnit()) - 1.5 Local $iPagina = Ceiling(_GetPageWidth() / $iUnit) - $iX Local $iWidth = Ceiling($iPagina - $iX);, 1) Local $lScale Local $iRanduri = StringSplit($sText & @CRLF & @CRLF & @CRLF & @CRLF, @CRLF, 3) Local $iHR = 0.5 * Ceiling($iY / (10 * $iUnit)) Local $iPages = Ceiling((UBound($iRanduri)) * $iHR / $iY) Local $iNrRanduri = Ceiling(UBound($iRanduri) / $iPages-2) Local $nrp For $j = 0 To $iPages + 2 $nrp = _BeginPage() _DrawText(_GetPageWidth()/_GetUnit()-1, 1, $nrp, "F1", 10, $PDF_ALIGN_CENTER) For $i = 0 To $iNrRanduri - 1 Local $sLength = Round(_GetTextLength($iRanduri[$i + $j * $iNrRanduri], $sFontAlias, 10)) Local $iH = $iY - $iHR * ($i + 1) Select Case $iH < 1 _EndPage() Case $i + $j * $iNrRanduri = UBound($iRanduri) - 1 _EndPage() Return Case $sLength > $iWidth - 1 $lScale = Ceiling($iWidth * 100 / $sLength) _SetTextHorizontalScaling($lScale) _DrawText($iX, $iH, $iRanduri[$i + $j * $iNrRanduri], $sFontAlias, 10, $PDF_ALIGN_LEFT, 0) _SetTextHorizontalScaling(100) Case Else _DrawText($iX, $iH, $iRanduri[$i + $j * $iNrRanduri], $sFontAlias, 10, $PDF_ALIGN_LEFT, 0) EndSelect Next _EndPage() Next EndFunc ;==>_Txt2PDF FileDelete($file1) FileDelete($file2)
-
Ich habe den Beitrag 27 und den Anhang jetzt eben nochmal mit den richtigen Code versehen. Teste es nochmal. Jetzt sollte es aber klappen. Ist schwierig wenn man nicht zu Hause am Arbeitsplatz ist.
-
Sollte jetzt jemand um die Ecke gelaufen kommen und behaupten das Techno doch EDM sei dann vergesse ich mich!
Na ja, wir sind ein deutsches Forum hier und das da sich EDM von Techno in DE kaum bis gar nicht unterscheidet (im Gegensatz zur USA) ist das UgaUgaUgaUgaBummBumm für mich Techno.
-
Hast Du beide Scripte die ich angehangen habe, unverändert in Dein ScriptDir abgespeichert und dann getmac_pdf.au3 ausgeführt?Entschuldige Hingo, war mein Fehler. Ich habe den Beitrag 27 und den Anhang jetzt eben mit den richtigen Code versehen. Teste es nochmal.
-
Hallo Hingo,
wenn Du die Umwandlung der PDF (Dein Beitrag Nr. 3) noch nicht oder noch nicht fehlerfrei hinbekommen haben solltest, kannst Du nach dieser Anleitung vorgehen. Ist nicht kompliziert
Das wäre jetzt auch die Antwort auf Deine gestrige PN.1. MPDF_UDF.au3 (siehe Anhang) in Dein Script-Verzeichnis abspeichern. Das ist nichts weiter als die modifizierte UDF von taietel mit folgender ergänzter Funktion am Ende der UDF.
AutoItFunc _Iif($fTest, $vTrueVal, $vFalseVal) If $fTest Then Return $vTrueVal Else Return $vFalseVal EndIf EndFunc
2. Führe folgenden Code für Dein Vorhaben aus (siehe Anhang).AutoIt
Alles anzeigen#include <Date.au3> #include <MPDF_UDF.au3> #include <File.au3> $file1 = @ScriptDir & "\getmac__.txt" $file2 = @ScriptDir & "\getmac_.txt" $getmac =@ScriptDir & "\getmac.txt" $sF = @ScriptDir & "\getmac.txt" FileOpen($file1, 2) FileWrite($file1," BPCS Checkliste "&@CRLF) FileWrite($file1,"====================================================="&@CRLF) FileWrite($file1,""&@CRLF) FileWrite($file1, "Current Date: " & _NowDate()&@CRLF) FileWrite($file1, "Current Time: " & _NowTime()&@CRLF) FileWrite($file1, ""&@CRLF) FileWrite($file1, "********************Computer Data********************"&@CRLF) FileWrite($file1, ""&@CRLF) ;~ FileWrite($file1, "Serial number:"&@CRLF) FileClose($file1) RunWait(@ComSpec & ' /c ' & 'getmac /V > getmac_.txt' & '"', "", @ScriptDir, @SW_HIDE) FileOpen($getmac, 2) FileWrite($getmac, FileRead($file1) & @CRLF & FileRead($file2)) FileClose($file2) FileClose($getmac) ;Einstellungen für die PDF Erstellung _SetTitle("getmac") _SetSubject("getmac to pdf") _SetKeywords("pdf, AutoIt") _OpenAfter(True);PDF nach erstellung öffnen _SetUnit($PDF_UNIT_CM) _SetPaperSize("A4") _SetZoomMode($PDF_ZOOM_CUSTOM, 90) _SetOrientation($PDF_ORIENTATION_PORTRAIT) _SetLayoutMode($PDF_LAYOUT_CONTINOUS) ;initialize the pdf _InitPDF(@ScriptDir & "\getmac.pdf") _LoadFontTT("F1", $PDF_FONT_CALIBRI,$PDF_FONT_ITALIC) _Txt2PDF($sF, "F1") ;write the buffer to disk _ClosePDFFile() ; #FUNCTION# ==================================================================================================================== ; Name ..........: _Txt2PDF ; Description ...: Convert a text file to pdf ; Syntax ........: _Txt2PDF( $sText , $sFontAlias ) ; Parameters ....: $sText - file path. ; $sFontAlias - font alias. ; Return values .: None ; Author(s) .....: Mihai Iancu (taietel at yahoo dot com) ; Modified ......: ; Remarks .......: If the string is very long, it will be scaled to paper width ; Related .......: ; Link ..........: ; Example .......: No ; =============================================================================================================================== Func _Txt2PDF($sFile, $sFontAlias) Local $hFile = FileOpen($sFile) Local $sText = FileRead($hFile) FileClose($hFile) Local $iUnit = Ceiling(_GetUnit()) Local $iX = 2 Local $iY = Ceiling(_GetPageHeight() / _GetUnit()) - 1.5 Local $iPagina = Ceiling(_GetPageWidth() / $iUnit) - $iX Local $iWidth = Ceiling($iPagina - $iX);, 1) Local $lScale Local $iRanduri = StringSplit($sText & @CRLF & @CRLF & @CRLF & @CRLF, @CRLF, 3) Local $iHR = 0.5 * Ceiling($iY / (10 * $iUnit)) Local $iPages = Ceiling((UBound($iRanduri)) * $iHR / $iY) Local $iNrRanduri = Ceiling(UBound($iRanduri) / $iPages-2) Local $nrp For $j = 0 To $iPages + 2 $nrp = _BeginPage() _DrawText(_GetPageWidth()/_GetUnit()-1, 1, $nrp, "F1", 10, $PDF_ALIGN_CENTER) For $i = 0 To $iNrRanduri - 1 Local $sLength = Round(_GetTextLength($iRanduri[$i + $j * $iNrRanduri], $sFontAlias, 10)) Local $iH = $iY - $iHR * ($i + 1) Select Case $iH < 1 _EndPage() Case $i + $j * $iNrRanduri = UBound($iRanduri) - 1 _EndPage() Return Case $sLength > $iWidth - 1 $lScale = Ceiling($iWidth * 100 / $sLength) _SetTextHorizontalScaling($lScale) _DrawText($iX, $iH, $iRanduri[$i + $j * $iNrRanduri], $sFontAlias, 10, $PDF_ALIGN_LEFT, 0) _SetTextHorizontalScaling(100) Case Else _DrawText($iX, $iH, $iRanduri[$i + $j * $iNrRanduri], $sFontAlias, 10, $PDF_ALIGN_LEFT, 0) EndSelect Next _EndPage() Next EndFunc ;==>_Txt2PDF FileDelete($file1) FileDelete($file2)
In deinem RegExp-Pattern ist noch ein Fehler drin...
Das ist nicht mein RegExp-Pattern aber dennoch vielen Dank für das korrigierte Anwendungsbeispiel.
-
In welchem Universum hast du in irgendeiner Stelle in dem Video Techno-Musik gehört?
Na ja, jetzt kommt es darauf an, was Du unter Techno verstehst
Ich habe zumindestens bei "Edit: Bei 0:13-0:28" so einen ugaugaugaugaugabummbumm in den Ohren gehabt.
-
Lob:
Also ich finde das Video im Grunde als nicht_so_gut_Durchblicker_in_Sachen_programmieren vom Grundsatz her vollkommen ok. Du sprichst gut, deutlich und klares deutsch und das Video ist grafisch gut aufgebautKritik:
Ich finde den Übergang sehr übereilt, gleich im Anschluss zu SciTE die Auswahl von ISN AutoIt Studio zu beschreiben und mit einem Jump & Run Spiel Level wertvolle Zeit zu vertrödeln.Nicht böse gemeint!
Aber da geb ich Chip schon a bissele Rückendeckung. Der Hinweis dass man mit AutoIt "den Kapuzenmann" in Verbindung bringt finde ich persönlich wenig fördernd. Das kann schon Scriptkiddys anlocken und neg. Anreize geben.Was hätte ich gerne für ein Video zum Einsteigen angeschaut?
Automatisierung von nützlichen Abläufen und Infobeschaffung (Systeminfos usw.) im Alltag eine Systemadmins (ein paar einfache Beispiele).
Erstellen einer einfachen GUI, für den Start von Internet Favouriten oder eigen programmierter Software.Wo ist das Problem?
Du hast alles, was ein guter Tutorial writer benötigt. Mach' einfach ein neues Video ohne KapuzenmannUnwichtiger Nebensatz:
Was fand ich grässlich?
Die Techno-Musik ist ffurchtbar scheusslich für mich!
Ich persönlich steh mehr so auf Metallica oder eben auf die alten Hardrocker. Auf moderne Sachen stehe ich auch ab und an. Vor allem auf die weiblichen Drummerinnen vom Rock am Ring