Wenn das Array numerisch sortiert werden soll, müssen auch numerische Werte enthalten sein.
Befülle es mit: $a[$i] = Number($variable)
Somit gehst du sicher, dass alle Inhalte numerisch sind und entsprechend sortiert werden.
Beiträge von BugFix
-
-
Muss ich immer hinter der Versionsnummer ein "v" oder "V" machen?
Beim Ausführen mit "F5" wird die Versionsnummer erhöht aber der Marker "v" oder "V" wird gelöscht.
Wenn das so gewollt ist für was ist dann der Marker "n"
Man möchte ja nicht bei jedem Speichern ein Kopie der Version erstellen.
Bsp.: Du fügst eine Debugzeile ein um einen Bug aufzuspüren - wär schön blöd, wenn dann bei jedem Speichern (mit F5 ausführen speichert auch vorher) auch ein Backup erstellt wird.
Deshalb soll ein Backup mit der entsprechenden Versionsnummer nur angelegt werden, wenn du es wirklich willst.
Schreibst du ein 'v' hinter die aktuelle Versionsnummer ist das die Anweisung die Nummer der Subversion hochzuzählen (aus 'v 0.5' wird 'v 0.6').
Mit einem 'V' weist du an, dass die Mainversion hochgezählt und die Subersion zurück auf '0' gesetzt wird (aus 'v 1.4' wird 'v 2.0').
Das 'n' wiederum bewirkt, dass du z.B. einen Versionssprung machen kannst. Du schreibst anstelle der vorhandenen Versionsnummer die Versionsnummer deiner Wahl und dahinter das 'n'. Das bewirkt dann, dass nicht hochgezählt wird, aber ein Backup mit der per Hand eingetragenen Versionsnummer wird trotzdem angelegt. -
Anscheinend bin ich zwar wohl der einzige, der sich mit einer Paradox-Datenbank abplagen muss.
In unserer Firma werkelt nur noch ein rudimentäres Fragment davon herum, die Hauptarbeit übernimmt jetzt eine Firebird-DB. Bin ich auch heilfroh drüber, denn Paradox heißt nicht umsonst so.
Bei der DB hat es ca. einmal im Monat die Indexfiles zerschossen. Was zu sehr "paradoxen" Zuständen führt, wenn für Kunde X plötzlich die Umsätze von Kunde Y angezeigt wurden. :wacko: Regelmäßige ReIndexierung gehörte damals zur Tagesordnung.Das Unterforum Datenbanken war schon recht reich gefüllt und wenn ich nicht irre, waren auch Paradox Probleme enthalten. Allerdings hat es wohl irgendwie unsere Foren-DB mal etwas zerlegt und dieses Unterforum ist nun leider leer.
Ich verwende zum Zugriff lieber ODBC-Treiber. Da kann ich mich wenigstens drauf verlassen, dass dann die Kommunikation auch klappt.
Was die anwendbaren Methoden etc. betrifft: Wenn du das Objekt erstellen kannst, solltest du auch darauf zugreifen können. Ausnahmen sind meist objektspezifische Aktionen mit für AutoIt untypischen Aktionen (Klassen erstellen, vererben etc.). In der Regel hilft da nur: Probieren.
-
Wie du ja schon bemerkt hast, pausiert dein Skript während einer Inputbox Anzeige. Somit hast du auch null Chance eine geänderte Position auszulesen, da die Box bei Skriptweiter Abarbeitung nicht mehr besteht.

Hilft nur eines: Eigene Inputbox erstellen. -
@RR: Nein, auch der Dateiname kann als Parameter verwendet werden.
vel2000: Laß dir doch mal mit MsgBox/ConsoleWrite den Inhalt von @Scriptdir anzeigen. Wenn deine Angaben stimmen dürfte dort auch kein anderer Pfad enthalten sein. -
Ich habe noch eine Ergänzung gemacht:
Soll ein Skript gar nicht erst in die Versionsverwaltung aufgenommen werden, so wird vor dem ersten Speichern an die erste Position im Editor ein * geschrieben.
Damit wird die Funktion TimeStamp angewiesen nur den Zeitstempel zu setzen ( dieser beinhaltet allerdings standardmäßig die Versionsnr. "v 0.1" ).Dazu in der "EigeneTools.lua" die Funktion InsertTimestamp gegen die folgende austauschen:
geänderte InsertTimestamp
Code
Alles anzeigen-- TIME STAMP===============================================BEGIN local function InsertTimestamp(sDir, sName, sExt) local caret = editor.CurrentPos local s = editor:GetText(), t, start, ende, lineNr, lineTxt, verMark, verLen local mustSave = 0 local sVer = 'v 0.1' lineLen = 0 if sExt == 'au3' then start = "#Region - TimeStamp" ende = "#EndRegion - TimeStamp" elseif sExt == 'lua' then start = "-- TIME_STAMP" ende = start end local a,b = editor:findtext("^"..start, SCFIND_REGEXP) local x,y = editor:findtext("^"..ende, SCFIND_REGEXP) editor:BeginUndoAction() if a ~= nil then editor:GotoPos(a) lineNr = editor:LineFromPosition(editor.CurrentPos) if sExt == 'lua' then lineTxt, lineLen = editor:GetLine(lineNr) else lineTxt = editor:GetLine(lineNr +1) end if y then -- Markierung für Versionsfortschreibung gesetzt? verMark = string.find(lineTxt, "[vVn]\r\n") sVer, mustSave = Version(lineTxt, verMark) if sExt == 'lua' then t = "-- TIME_STAMP "..os.date("%Y-%m-%d %H:%M:%S ")..sVer.."\r\n" y = a + lineLen else t = "#Region - Timestamp\r\n; "..os.date("%Y-%m-%d %H:%M:%S ")..sVer.."\r\n#EndRegion - TimeStamp\r\n" y = y +2 end editor:SetSel(a,y) editor:ReplaceSel(t) end else mustSave = 1 editor:SetSel(0,1) if editor:GetSelText() == '*' then mustSave = 0 s = string.sub(s, 2) end editor:GotoPos(0) if sExt == 'lua' then t = "-- TIME_STAMP "..os.date("%Y-%m-%d %H:%M:%S ")..sVer.."\r\n" editor:SetText(t.."\r\n"..s) else t = "#Region - Timestamp\r\n; "..os.date("%Y-%m-%d %H:%M:%S ")..sVer.."\r\n#EndRegion - TimeStamp\r\n" editor:SetText(t.."\r\n"..s) end caret = caret + string.len(t) +2 end editor:EndUndoAction() editor:GotoPos(caret) if mustSave == 1 then SaveToVersionFolder(sDir, sName, sExt, sVer) end end -- TIME STAMP=================================================END -
EDIT [02.10.2021] - Eine neuere Version (kpl. überarbeitet) gibt es hier.
EDIT [04.01.2019] - Mit v 1.4 wird das Skript allgemeingültig. Ohne weiter Änderungen am Skript kann jetzt jeder Dateityp in die Versionsverwaltung und/oder TimeStamp-Routine aufgenommen werden!
ACHTUNG! Script breaking chance! DIE PROPERTIES MÜSSEN ZWINGEND GEÄNDERT WERDEN!
Es wird nicht mehr für jeden Dateityp eine eigen Property erstellt, sondern wie folgt:
Auflisten der Dateitypen, für die ein Timestamp gesetzt werden soll
#~ TimeStamp setzen für folgende Dateitypen: EXT|EXT..
Use.TimeStamp.With.Files=au3|lua|py
Die Zeichen für Zeilenkommentare der verschiedenen Dateitypen müssen angegeben werden
#~ Kommentarzeichen für einzeiligen Kommentar: EXT=ZEICHEN|..|..
Line.Comment.Char=au3=;|lua=--|py=#
Auflisten der Dateitypen, für die ein Versionsbackup gespeichert werden soll
#~ Versions-Backup anwenden für folgende Dateitypen: EXT|EXT..
Use.VersionBackUp.With.Files=au3|lua
Version.Prefix und Version.Path.* bleiben unverändert.
Hallo,
ich habe die TimeStamp Funktion nun zu einer kleinen Versionsverwaltung für Skripte erweitert. Dabei habe ich mich allerdings auf eine zweistufige Versionierung (v Main.Sub) beschränkt.
So gehts:
In den User.properties wird festgelegt in welchem Pfad die Versionsbackups gespeichert werden sollen. Mit der Angabe von 'Default' geschieht das im Skriptordner (ebenso bei fehlender Property oder Property ohne Wert), wird ein fester Ordner angegeben (ohne abschließenden Backslash!), wird dieser verwendet, mit 'no' wird keine Versionssicherung durchgeführt.Es lassen sich die in SciTE üblichen Pfadmakros (z.B. "$(SciteDefaultHome)" ) verwenden.Beim erstmaligen Speichern einer Datei wird (wenn gewünscht)
- standardmäßig die Versionsnummer 'v 0.1' vergeben
- im Pfad aus den .properties wird ein Unterverzeichnis der Form: \BackupVer_DATEINAME.EXT\ angelegt
- in diesem Ordner wird eine Kopie der Datei als: DATEINAME[0.1].EXT erstelltBeim Speichern ohne Setzen eines Markers wird nur der TimeStamp aktualisiert.
Es können folgende Marker gesetzt werden (direkt hinter die aktuelle Versionsnummer):
- v Subversionsnr. wird um 1 erhöht
- V Mainversionsnr. wird um 1 erhöht, Subversionsnr. wird auf 0 gesetzt
- n die autom. Zählung ist nicht aktiv - aber eine per Hand eingetragene Änderung der Versionsnr. wird übernommen
So werden die Marker gesetzt:
Erhöhen Sub-Version:
;-- TIME_STAMP 2011-05-24 14:36:36 v 0.1v ==> ergibt dann nach dem Speichern: v 0.2Erhöhen Main-Version:
;-- TIME_STAMP 2011-05-24 14:36:36 v 0.1V ==> ergibt dann nach dem Speichern: v 1.0Setzen gewünschter Versions-Nr.:
;-- TIME_STAMP 2011-05-24 14:36:36 v 0.1
==> 0.1 ersetzen mit gewünschter Versions-Nr, z.B.: 0.5n ergibt dann nach dem Speichern: v 0.5NEU:
Um von einem Skript keine Backups anzulegen einfach vor dem ersten Speichern ein * an die erste Position im Editor setzen.Dafür notwendige Codeänderung: s. Post #2Somit habe ich im Normalfall einen TimeStamp und lege bei Bedarf eine höhere Version mit Backup an.
Da LUA ja keine Windows-orientierte Sprache ist, mußte ich einige Funktionen erst selbst zusammenbasteln (FileExists, FileCopy, FolderExists, FolderCreate).
Nicht wundern, dass beim Erstellen des jeweiligen Versionsordners ganz kurz ein CMD-Window aufpopt. Aber da mußte ich den Umweg über die CMD nehmen, da LUA keine direkte Möglichkeit zum Erstellen eines Ordners bietet.<-- Behoben durch Einsatz der shell.dll.
In meinen Tests hat bisher alles gut funktioniert, hoffe ihr werdet das dann bestätigen können.
Edit 17.05.2011:
Manchmal muß man einfach nochmal drüber schlafen, sonst sieht man den Wald vor lauter Bäumen nicht.
Eine Kopie der bestehenden Datei anzulegen ist ja gar nicht möglich, da die Aktion bei "BeforeSave" stattfindet. Somit wurde zum Einen der alte Inhalt gespeichert (mit falscher VersNr) und zum Anderen crashte es bei einer neuen Datei, da dort die zu kopierende ja noch gar nicht existierte.
Habe diesen Bug jetzt beseitigt und schreibe den aktuellen Editorinhalt in das Versionsbackup.Dazu sollte dann die SciTEStartup.lua so aussehen
geändert 29.05.
Code
Alles anzeigen-------------------------------------------------------------------------------- -- SciTE startup script. -------------------------------------------------------------------------------- -- A table listing all loaded files. LoadLuaFileList = { } -------------------------------------------------------------------------------- -- LoadLuaFile(file, directory) -- -- Helper function for easily loading Lua files. -- -- Parameters: -- file - The name of a Lua file to load. -- directory - If specified, file is looked for in that directory. By default, -- this directory is $(SciTEDefaultHome)\Lua. -------------------------------------------------------------------------------- function LoadLuaFile(file, directory) if directory == nil then directory = props["SciteDefaultHome"] .. "\\Lua\" end table.insert(LoadLuaFileList, directory .. file) dofile(directory .. file) end -- LoadLuaFile() -- Load all the Lua files. LoadLuaFile("Class.lua") -- Always load first. LoadLuaFile("Common.lua") -- Always load second. LoadLuaFile("AutoItPixmap.lua") LoadLuaFile("AutoHScroll.lua") LoadLuaFile("AutoItAutoComplete.lua") LoadLuaFile("LoadSession.lua") LoadLuaFile("AutoItIndentFix.lua") LoadLuaFile("EdgeMode.lua") LoadLuaFile("SmartAutoCompleteHide.lua") LoadLuaFile("Tools.lua") LoadLuaFile("AutoItTools.lua") LoadLuaFile("AutoItGotoDefinition.lua") LoadLuaFile("AutoCloseBraces.lua") -- wenn diese Datei nicht verwendet wird ==> mit '--' auskommentieren oder löschen -- Start up the events (Calls OnStartup()). EventClass:BeginEvents() -- Erst nach Registrierung der EventClass werden eigene Dateien geladen LoadLuaFile("AutoStampSaveVersion.lua") -- enthält Event: "OnBeforeSave"
Die Datei "AutoStampSaveVersion[1.4].lua" speichern und umbenennen zu "AutoStampSaveVersion.lua")
Und hier die Anpassungen in den SciTEUser.propertiesgeändert 04.01.19
Code
Alles anzeigen# END => DO NOT CHANGE ANYTHING BEFORE THIS LINE #-#-#-#-#-# #~ == MY SPECIAL SETTINGS =====================BEGIN #~ TimeStamp setzen für folgende Dateitypen: EXT|EXT.. Use.TimeStamp.With.Files=au3|lua|py #~ Kommentarzeichen für einzeiligen Kommentar: EXT=ZEICHEN|..|.. Line.Comment.Char=au3=;|lua=--|py=# #~ Versions-Backup anwenden für folgende Dateitypen: EXT|EXT.. Use.VersionBackUp.With.Files=au3|lua Version.Prefix=BUVer_ #~ Pfad für Version Backup Ordner [VER_DIR]: #~ WICHTIG!: Pfad NICHT in Quotierung! #~ KEIN folgender Backslash! #~ "Version.Path.*=default" - erstellt Unterverzeichnis in aktuellem Skript-Ordner (ebenso, wenn Property nicht vorhanden oder ohne Wert) #~ Ordnername: $(Version.Path.ext)\$(Version.Prefix)FILENAME.EXT\ #~ Dateiname: \FILENAME[Version-Number].EXT Version.Path.au3=C:\Code\VersionBackup\au3 Version.Path.lua=C:\Code\VersionBackup\lua #~ == MY SPECIAL SETTINGS =======================ENDEdit 21.05.2011:
Ich habe den Code nochmal überarbeit, die Funktionen jetzt alle sauber in ein Array gepackt und eine kleine Funktionserweiterung vorgenommen: Wird ein Skript beim erstmaligen Speichern von der Versionsverwaltung ausgenommen (Asterisk an erster Editorposition), so wird in diesem Fall auch nur der Timestamp gesetzt. Auch bei späterem Speichern bleibt dies so. Aber man kann jederzeit durch Markieren mit 'v' oder 'V' das Skript in die Versionsverwaltung aufnehmen.
Ich habe es soeben im EN-Forum gepostet, deshalb vorerst mal nur der Link dorthin: AutoStampSaveVersion.luaEdit 29.05.2011
Die im letzten Edit benannten Änderungen sind jetzt auch hier im Skript. Alle nicht global benötigten Funktionen sind jetzt auch als lokal erstellt.
Zusätzlich erweitert: Beim Speichern springt die Cursorposition nicht mehr an den unteren Editorrand, die Ansicht im Editor ist identisch zu 'VorSpeichern'.
Aktuelle Version: "v 1.1"Edit: 16.05.2014
Nach Jahren mal wieder was Neues hier. Ich habe jetzt die shell.dll integriert, somit gibt es kein aufpopendes Fenster mehr, wenn ein neuer Ordner beim Sichern erstellt wird.
Weiterhin habe ich die Darstellung des TimeStamps verändert, mit der #Region gefällt mir das nicht mehr. Es wird jetzt in dieser Form ausgegeben:
;-- TIME_STAMP 2014-05-16 12:41:54 v 0.1
Es ist eine zusätzliche Property in der SciTEUser.properties festzulegen: Version.Prefix=BUVer_
Bisher wurde automatisch der Präfix "BUVer_" verwendet bei der Erstellung des Ordners für eine neu zu sichernde Datei. Das kann jetzt vom User festgelegt werden.
Ansonsten ändert sich nichts an der Vorgehensweise.
Um die shell.dll einzubinden, empfehle ich folgendes Vorgehen:Installation shell.dll
- In der SciTEUser,properties eine Property erstellen für die eigenen Lua-Pfade Lua.User.Scripts.Path=C:\Code_AutoIt\LUA
- In diesen Pfad die shell.dll kopieren
- In der SciTEStartup.lua am Anfang einfügen
local sUserLua = props["Lua.User.Scripts.Path"]LUA_USER_PATH = sUserLua .. "\\?.dll;" .. sUserLua .. "\\?\\?.dll;"
package.cpath = LUA_USER_PATH .. package.cpathJetzt werden die in diesen Pfaden gespeicherten Dll beim Start von SciTE geladen.
Die bereits vorhandenen TimeStamps können mit der beigefügten "ReplaceTimeStamp.au3" auf die neue Version geswitcht werden. Einfach den Root auswählen, alle *.au3 werden rekursiv von dort ausgelesen und vorhandene TimeStamps auf die neue Version geswitcht. Sicherheitshalber wird zuerst im Root ein Ordner ".\BAK_TimeStamp\" erstellt, in den alle gefundenen au3-Dateien in der vorhandenen Ordnerstruktur gesichert werden.
Aktuelle Version: "v 1.4"
-
UMFRAGE hinzugefügt.
Da fehlt aber eine Antwortmöglichkeit: "nie"
Ich persönlich schreibe lieber, als dass ich rede. Somit ergibt sich für mich überhaupt keine Notwendigkeit eines TS. Zumal das geschriebene Wort den unschätzbaren Vorteil hat, dass man jederzeit nachlesen kann, was bereits 'besprochen' wurde, wenn man das Thema später weiterbehandeln möchte.
-
-
Andere NAS, die ich bisher genutzt habe (DLink, Buffalo etc.) haben zwar auch eine (aus meiner Sicht absolut überflüssige) Konfigurationssoftware - aber dort steht dann zumindest gaaaaanz kleingedruckt im Manual die aktuelle IP des Gerätes im Werksauslieferungszustand. Damit gelangt man dann immer auf das Web-Interface zur Konfiguration.
Aber mir ist noch etwas aufgefallen:
HTML ist out. Der User hat gefälligst zu akzeptieren, dass er über das Interface Embedded Javascript oder (schlimmer) Flash-Inhalte serviert bekommt. Dass das nicht immer gut geht ist klar. Ein Win2K-PC, der locker seine Dienste im LAN noch tun kann, erreicht zwar dann die Interface Startseite - sieht aber keine Inhalte wegen mangelnder Unterstützung für das OS. :wacko: -
Hi,
ich hatte das "Vergnügen" in zwei LAN-Umgebungen (Intranet) als Netzwerkspeicher WD-Produkte zu integrieren.
Zum Einen das My Book Live als gemeinsamer Speicherplatz und zum Anderen das WD ShareSpace als Datenspeicher/Sicherungsserver im RAID 5.
Rein hardwaremäßig ist an den Produkten nichts auszusetzen. Aber die Software!!
Obwohl beide Produkte vom Hersteller ausdrücklich zur Nutzung in Heimnetzen (impliziert für mich auch eine Intranetumgebung) geeignet sind, ist es ZWINGEND erforderlich einen Internetzugang zu haben um überhaupt die Konfigurationssoftware anwenden zu können. Anderenfalls teilt diese Software trocken mit, das kein Device gefunden wurde!
Also schleppe ich die Geräte zu einem Ort mit INet-Anbindung um erstmalig auf das User-Interface zu gelangen. Dort ließen sich die Geräte dann problemlos mit einer fixen IP ausstatten, sodass ich die Konfigurationsoberfläche auch im LAN erreichen konnte.
Es ist mir absolut unverständlich, dass eine Firma wie WD keinen Gedanken daran verschwendet, dass es eventuell Anwender mit erhöhtem Sicherheitsbedürfnis (Intranet) oder auch Anwender ohne physischen Zugang zum Internet gibt. Zumal die Grundfunktion eines NAS nunmal nicht das Web-Sharing von Files ist.
Aus meiner Sicht hat ein Internetzugang auf einer produktiven PC-Einheit nichts verloren. Diese Sichtweise hat mir (und meinen Kunden) die letzten 15 Jahre 100%-ige Schädlingsfreiheit garantiert. Denn die Mehrzahl der Anwender kann es sich nicht leisten einen IT-Fachmann vorzuhalten nur um ständig und sofort alle Systeme schützen zu können.
Allein der Internetzugang an sich stellt eine Gefahr da - völlig dahingestellt, ob diese Gefahr auch Wirklichkeit wird. (Vergleichbar mit 'sicheren' Atomkraftwerken
).Mein Fazit zu WD
Technik = 1
Komfort = 5Als kleiner Nachtrag:
Es gibt solche Szenarien aber noch eine Stufe schlimmer - als NAS ausgewiesene Geräte, die zum Zugang einen aktiven! Internetzugang verlangen, der dann über die Herstellerseite ein Redirection auf das LAN durchführt. (Produktname ist mir gerade entfallen, hatte ich sofort von meiner mentalen Festplatte gestrichen ;)) -
Vielleicht solltest du einfach mal mein 2D-Array nachvollziehen...
Und vor allem die Syntax nachlesen! In der äußeren Schleife verwendest du den Ubound für die Zeilen, aber in der inneren Schleife mußt du den Ubound(Array,2) verwenden.
Steht aber auch genau so in meinem Tut, das du ja bereits gelesen hast.. :wacko: -
Antwort: Nein - und laß es bleiben. Verwende ordentliche Antiviren- und Defenderprogramme. Dann brauchst du dich um den Schei.. nicht zu kümmern.
-
Was mir beim Skripten mit LUA an besonderen Unterschieden auffällt, werde ich mal extra erwähnen:
Variablendeklaration/-Wertzuweisung
- Variablen ohne Wertzuweisung können, genau wie in AutoIt, durch Kommata getrennt hintereinander deklariert werden.
- Nach Deklaration einer Variablen mit Wertzuweisung darf keine weitere Deklaration mit Wertzuweisung durch Kommata getrennt erfolgen.
- Aber: Es können weitere leere Variablen kommagetrennt deklariert werden.
- Mehrere Deklarationen mit Wertzuweisung werden hintereinander geschrieben nur durch Leerzeichen getrennt.Codelocal a, b, c -->> OK local a = 5, b = 6, c = 7 -->> FEHLER local a = 5, b, c -->> OK local d = 5 e = 6 f = 7 -->> OKContinueLoop
Gibt es in LUA gar nicht. Hier muß man sich im Programmierverhalten umstellen. ContinueLoop ist strenggenommen eine 'GoTo'-Anweisung und somit wohl von den Entwicklern verpönt.
Ich habe einige, recht aufwändige Iterationskonstrukte gefunden, die ein Verhalten wie ContinueLoop ermöglichen sollen - aber solange das nicht nativ codiert ist verliert man dann im Code erst recht die Übersicht.Was mir fehlte, waren die kleinen Hilfsmittel zum Debuggen: DebugToConsole/~MsgBox.
Ich habe dazu entsprechende Varianten erstellt. Die von Jos für AutoIt geschaffenen Varianten habe ich aber außen vor gelassen. Diese können nur simple Variablenformen erfassen, Arrays werden nicht erkannt. Ist allein mit RegEx auch nicht zu lösen.
Meine Variante ist zwar etwas aufwändiger, erkennt aber auch Variablen"monster" der Form: "$arAA [ UBound( $arBB ) - 1 ] [ $i ]"
Einzige Bedingung: Der Cursor muß auf (oder links von) dem Variablenstamm stehen (hier also $arAA).
In Lua-Skripten ist die Erkennung noch etwas schwieriger, da Variablen keinen markanten Anfang haben. Somit können Array(Table)-konstrukte nicht sicher erkannt werden, wenn Leerzeichen in den Klammern sind.
Daher ist die Variablenerkennung für Lua-Skripte u.U. noch etwas fehlerbehaftet, also besser keine Leerzeichen in Klammern verwenden.Geändert: s. Post #4
Zur besseren Wartbarkeit der eigenen Dateien und für gute Übersicht, empfiehlt es sich z.B. eine Datei "EigeneTools.lua" zu erstellen, in der man die allgemein verfügbaren Funktionen bereitstellt.
Ich habe meine "EigeneTools.lua" mit angehängt, mit Funktionen für TimeStamp und DebugConsole/MsgBox, jeweils selbstselektierend für .lua oder .au3 .
Diese darf aber erst nach Registrierung der EventClass geladen werden, damit Skripte, die auf Events zurückgreifen (z.B. TimeStamp), nicht ins Leere laufen.
Damit MsgBox in LUA-Skripten möglich ist, muss ein zusätzliches Modul geladen werden:
- angehängten Ordner "LuaLib" (entpacken) als Unterordner in "..\Scite\Lua" einfügen
- in "SciTEStartup.lua" muß die Dll geladen werden, hier mal meine Startup:SciTEStartup.lua
Code
Alles anzeigen-------------------------------------------------------------------------------- -------------------------------------------------------------------------------- -- SciTE startup script. -------------------------------------------------------------------------------- -- Externe Module bereitstellen package.path = props["SciteDefaultHome"].."\\Lua\\LuaLib\\?.lua;"..package.path package.cpath = props["SciteDefaultHome"].."\\Lua\\LuaLib\\?.dll;"..package.cpath -- print(package.cpath) -- Dll laden require 'shell' -- test dll --~ if shell then --~ table.foreach(shell, print) --~ end -- A table listing all loaded files. LoadLuaFileList = { } -------------------------------------------------------------------------------- -- LoadLuaFile(file, directory) -- -- Helper function for easily loading Lua files. -- -- Parameters: -- file - The name of a Lua file to load. -- directory - If specified, file is looked for in that directory. By default, -- this directory is $(SciTEDefaultHome)\Lua. -------------------------------------------------------------------------------- function LoadLuaFile(file, directory) if directory == nil then directory = props["SciteDefaultHome"] .. "\\Lua\\" end table.insert(LoadLuaFileList, directory .. file) dofile(directory .. file) end -- LoadLuaFile() -- Load all the Lua files. LoadLuaFile("Class.lua") -- Always load first. LoadLuaFile("Common.lua") -- Always load second. LoadLuaFile("AutoItPixmap.lua") LoadLuaFile("AutoHScroll.lua") LoadLuaFile("AutoItAutoComplete.lua") LoadLuaFile("LoadSession.lua") LoadLuaFile("AutoItIndentFix.lua") LoadLuaFile("EdgeMode.lua") LoadLuaFile("SmartAutoCompleteHide.lua") LoadLuaFile("Tools.lua") LoadLuaFile("AutoItTools.lua") LoadLuaFile("AutoItGotoDefinition.lua") LoadLuaFile("AutoCloseBraces.lua") -- Start up the events (Calls OnStartup()). EventClass:BeginEvents() -- Erst nach Registrierung der EventClass werden eigene Dateien geladen LoadLuaFile("EigeneTools.lua") -------------------------------------------------------------------------------- --------------------------------------------------------------------------------
Um diese Debug-Module zu aktivieren, müssen zuerst die in SciTE4AutoIt aktiven Module abgeschaltet werden:
- .au3 Datei im Editor öffnen
- Ctrl+1 öffnet "SciTE Config"
- "Tools Selection"
- Checkboxen: 24, 25, 26 deaktivieren
- "Update" klickenin: "..\SciTEUser.properties"
einfügen:in SciTEUser.properties
Code
Alles anzeigen# END => DO NOT CHANGE ANYTHING BEFORE THIS LINE #-#-#-#-#-# #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# #... #... #~ Speichern mit TimeStamp J/N (1/0) SetTimeStampAU3=1 SetTimeStampLUA=1 #... #... #~ Debug To MsgBox command.name.43.*=Debug To MsgBox command.43.*=DebugToMsgBox command.mode.43.*=subsystem:lua,savebefore:no command.shortcut.43.*=Ctrl+Alt+D #~ Debug To Console command.name.42.*=&Debug To Console command.42.*=DebugToConsole command.mode.42.*=subsystem:lua,savebefore:no command.shortcut.42.*=Alt+D #... #... #-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-#-# # START: DO NOT CHANGE ANYTHING AFTER THIS LINE #-#-#-#-# # Created by SciTEConfig #------------------------------------------------------------In meinem SciTE4AutoIt funktioniert seltsamerweise die geladene Dll mit der MsgBox-Funktion nicht. Raupi hatte getestet und bei ihm läuft es in der Umgebung.
Da ich selbst eine andere SciTE-Version verwende vermute ich mal, dass es zu Konflikten zwischen den beiden Versionen kommt. Wenn ihr nur ein SciTE installiert habt, sollte somit die MsgBox auch in Lua funktionieren.
Syntax: shell.msgbox(TEXT, TITEL [,FLAG=0])
Mehr über die Funktionen der 'shell' könnt ihr im Ordner LuaLib, in der shell.html lesen. -
Sind die in allen Sprachen identisch?
Das richtet sich etwas nach den verwendeten RegEx-Engines. Aber wenn du es einmal verstanden hast, fällt es nicht schwer evtl. Syntaxunterschiede anzuwenden. Das Erkennungsprinzip ist grundsätzlich sehr ähnlich. -
okay io kann aus dateien lesen/schreiben, aber wie soll ich damit jetzt auf die console zugreifen oder consoleread kopieren?=)
Hast du es überhaupt schon probiert? Ich nehme mal an: Nein - denn sonst würdest du die Fragen gar nicht stellen.
Auch hier gilt, wie überall: ohne zu wissen, welchen Code du schon getestet hast, kann man dir schlecht helfen.
-
wie bei c++ cin
Ich kenne mich mit C++ kaum aus. Ist das vergleichbar mit einer InputBox in AutoIt oder eher eine Konsoleneingabe? -
Ne, ich meine eine Einbindung in AutoIt. Sodass man von AutoIt aus LUA-funktionen aufrufen kann, sowie Funktionen bereitstellen kann.
Achso, dann hatte ich das mißverstanden.
Bleibt die Frage, ob die Lua-Skripte, eingebunden in AutoIt, dann auch im kompilierten AutoIt-Skript laufen sollen?
Also lokales Ausführen ist sicher nicht das Problem. Aber in einem kompilierten Skript? Hab ich mir bisher noch keine Gedanken gemacht. -
also wofür ist das jetzt gut?
Nun, öffne doch einfach mal die Datei "..\AutoIt3\SciTE\Lua\AutoItTools.lua". Und siehe da - dort findest du Tools des täglichen AutoIt-Gebrauchs.
Ich möchte hier die Möglichkeit eröffnen eigene Tools zu erstellen, die das Skripten in AutoIt noch komfortabler gestalten.
Darüber hinaus ist LUA eine sehr mächtige Skriptsprache, die m.M. nach in einigen Bereichen AutoIt sogar weit überlegen ist. Und hier seinen Horizont zu erweitern und evtl. mal Lösungen auf andere Art vorzunehmen kann doch nicht schaden.
(Und wer nicht will, der muß ja nicht.. ;)) -
Gibt es eigentlich eine UDF um lua-skripte auszuführen? Wenn nicht, könnte ich schnell eine schreiben.
Du kannst LUA-Skripte aus SciTE heraus ausführen, die notwendigen Schritte dazu habe ich im Startpost beschrieben.