1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. BugFix

Beiträge von BugFix

  • FireBird.au3 mit FDB Datenbank - ExecuteSelect Rückgabewert

    • BugFix
    • 21. Februar 2014 um 11:35

    Aus deinem Skript ist nicht ersichtlich, wie du SQL-Execute vollziehst. (FireBird.au3 ist eine UDF, solltest du drauf verlinken, wenn du diese verwendest. Mir ist sie nicht bekannt.)

    Hier mal die Funktionen, die ich mir für die Interaktion mit Firebird erstellt habe:

    Spoiler anzeigen
    [autoit]

    ;===============================================================================
    ; Function Name: _oSQLDB_Connect($connStr)
    ; Description:: erstellt eine Objektreferenz auf eine Firebird-DB
    ; Parameter(s): $connStr Connection-String enthält die Verbindungsparameter
    ; Requirement(s): Firebird und installierte FB-ODBC-Treiber
    ; Return Value(s): Erfolg Referenz des ADODB-Objektes
    ; Fehler 1, @error 1
    ; Author(s): BugFix
    ;===============================================================================
    Func _oSQLDB_Connect($connStr)
    Local $objConnection = ObjCreate("ADODB.Connection")
    If Not IsObj($objConnection) Then Return SetError(1,0,1)
    $objConnection.Open($connStr)
    Return $objConnection
    EndFunc ;==>_oSQLDB_Connect

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ; Function Name: _oSQLDB_Execute($oConn, $strCommand, $Options=-1)
    ; Description:: führt Kommandostring (SQL-Sequenz) aus
    ; Parameter(s): $oConn Referenz des FB-Objektes
    ; $strCommand Kommandostring
    ; optional $Options CommandTypeEnum (http://msdn.microsoft.com/en-us/library/ms675946(VS.85).aspx) oder
    ; ExecuteOptionEnum (http://msdn.microsoft.com/en-us/library/ms676517(VS.85).aspx)
    ; Return Value(s): Eine Recordset Objekt-Referenz, ein Stream oder Nichts
    ; Author(s): BugFix
    ;===============================================================================
    Func _oSQLDB_Execute($oConn, $strCommand, $Options=-1)
    Local $recAffected
    Return $oConn.Execute($strCommand, $recAffected, $Options)
    EndFunc ;==>_oSQLDB_Execute

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ; Function Name: _oRecSet_Close($oRecSet)
    ; Description:: Beendet ein RecordsetObjekt
    ; Parameter(s): $oRecSet Referenz des Objektes
    ; Author(s): BugFix
    ;===============================================================================
    Func _oRecSet_Close($oRecSet)
    $oRecSet.Close
    EndFunc ;==>_oRecSet_Close

    [/autoit] [autoit][/autoit] [autoit]

    ;===============================================================================
    ; Function Name: _oSQLDB_Close($oConn)
    ; Description:: Beendet eine Firebird-Verbindung
    ; Parameter(s): $oConn Referenz des FB-Objektes
    ; Author(s): BugFix
    ;===============================================================================
    Func _oSQLDB_Close($oConn)
    $oConn.Close
    EndFunc ;==>_oSQLDB_Close

    [/autoit]


    Und hier mal ein Beispiel:

    [autoit]

    Global $data_source = "Lw:/PFAD/DEINER/FB-DB" ; Notation mit "/" beachten!!
    Global $strConnection = "DRIVER=Firebird/InterBase(r) driver; UID=SYSDBA; PWD=masterkey; DBNAME=" & $data_source & ";"

    [/autoit][autoit][/autoit][autoit]

    Global $oFB, $oRS, $sql_str, $arTables, $arFieldType

    [/autoit][autoit][/autoit][autoit]

    $oFB = _oSQLDB_Connect($strConnection)
    If Not IsObj($oFB) Then
    MsgBox(0, 'Datenbank', 'keine Verbindung')
    _close()
    EndIf

    [/autoit][autoit][/autoit][autoit]

    ; #### alle UserTabellen auslesen ####
    $sql_str = "SELECT RDB$RELATION_NAME FROM RDB$RELATIONS WHERE RDB$SYSTEM_FLAG = 0 ORDER BY RDB$RELATION_NAME;"
    $oRS = _oSQLDB_Execute($oFB, $sql_str)
    $arTables = $oRS.GetRows
    _ArrayDisplay($arTables)

    [/autoit][autoit][/autoit][autoit][/autoit][autoit]

    ; #### alle UserTabellen mit Feldnamen und FeldTypen ####
    $sql_str = "SELECT RDB$RELATION_NAME, RDB$FIELD_NAME, RDB$FIELD_SOURCE FROM RDB$RELATION_FIELDS WHERE RDB$RELATION_NAME NOT CONTAINING '$' order by RDB$RELATION_NAME, RDB$FIELD_NAME;" ;[0]=Feld, [1]=Tabelle, [2]=Typ-Länge
    $oRS = _oSQLDB_Execute($oFB, $sql_str)
    $arFieldType = $oRS.GetRows ; Tabelle-Feld-Datentyp
    _ArrayDisplay($arFieldType)

    [/autoit][autoit][/autoit][autoit]

    _close()

    [/autoit][autoit][/autoit][autoit]

    Func _close()
    If IsObj($oRS) Then _oRecSet_Close($oRS)
    If IsObj($oFB) Then _oSQLDB_Close($oFB)
    Exit
    EndFunc

    [/autoit]
  • Simple Filename Replacer: mehrere Dateien gleichzeitig umbenennen; aufrufbar per Kontextmenü

    • BugFix
    • 21. Februar 2014 um 10:45
    Zitat von zemkedesign

    Aber bei einer Mehrfachselektion ruft Windows für jede Datei eine separate Instanz des Programms auf. Diese verschiedenen Instanzen müssen einen Master aushandeln; alle anderen Instanzen werden zu Slaves und kommunizieren mit dem Master. Windows startet die Instanzen manchmal auf die Millisekunde gleich, sodass es eine Herausforderung war.


    Das hast du dir dann wohl etwas komplizierter als erforderlich gestaltet. ;)
    Hier eine einfache Lösungsvariante.

  • Tipps für ein Programm

    • BugFix
    • 10. Februar 2014 um 15:20

    Weil das aus deinem Text nicht hervorgeht: Wo befindet sich denn das Gegenstück zu dem Ordner, den du synchronisieren möchtest?
    Vielleicht ist es lohnenswert mit Hardlinks zu arbeiten? Würde dir die Arbeit der Synchronisation abnehmen.

  • Welche AutoIt Version nutzt ihr?

    • BugFix
    • 6. Februar 2014 um 20:54

    Für mich ist 3.3.8.1 die letzte Version, die ich nutze.
    Ich kann nicht nachvollziehen, was für Verschlimmbesserungen vorgenommen werden, statt sich mal dazu zu entschließen die echten Schwachpunkte auszumerzen.
    Dazu zähle ich:
    - derselbe Operator für Zuweisung und Vergleich
    - Zählervariablen, die auch außerhalb der Schleife weiter existieren
    - Datentyp Variant ( Ich weiß, dass vielen dieser Datentyp gefällt, aus meiner Sicht fördert er nur eine schlampige Programmierweise. )
    - fehlende Unterscheidung von Gross- / Kleinschreibung
    Letztlich sind das alles Faktoren, die für mich dazu führen AutoIt nur noch auf Nebenschauplätzen anzuwenden.
    Hauptsächlich werde ich mich in Zukunft mit Lua und Python beschäftigen.

  • Array2DSortFree - negative Zahlen

    • BugFix
    • 31. Januar 2014 um 23:26

    Tricksen wird hier schwerfallen, da wir ja zeitgleich mehrere Spalten sortieren, ist ein Nacheinander der Sortierung nicht möglich.
    Ich werde mal noch ein bischen Grübeln, vielleicht habe ich eine Eingebung. ;)

  • Array2DSortFree - negative Zahlen

    • BugFix
    • 31. Januar 2014 um 23:05

    Ging schnell - hab mir den Code nochmal angesehen.
    Um überhaupt nummerisch sortieren zu können muß ich die SQL-Funktion "Abs" nutzen, ansonsten ist der Inhalt aus Sicht von SQLite ein String. "Abs" wiederum macht was der Name sagt: es liefert den absoluten Wert. Bei negativen Zahlen wird somit das Vorzeichen gekillt.

    Das Problem ist Folgendes:
    AutoIt-Arrays sagen uns nichts über den Inhalt. Ist die Ziffer eine Ziffer? Oder soll sie als Zahl genutzt werden? Der Scheiß-Datentyp Variant spuckt uns hier mitten ins Gesicht.
    (Jeden weiteren Tag, den ich was mit AutoIt mache könnte ich mich mehr über diesen Dreck aufregen. Ist doch nun wirklich nicht problematisch den Nutzer zu zwingen, festzulegen, was für Daten er überhaupt verwenden will. :evil: )
    Und aus diesem Variant-Grund kann ich beim Erstellen der Datenbank keine Datentyp-orientierten Felder erstellen - ich weiß ja nie, was kommt. Also muss ich die Felder als Variant lassen und mit "Abs" den nummerischen Vergleich erzwingen - mit besagtem Problem bei negativen Zahlen.

    Fazit: Eine allgemeingültige Funktion, die auch negative Zahlen sortiert, ist so nicht möglich.
    Dazu müßtest du dann fallbezogen jeweils eine Datenbank mit konkreter Datentyp-Struktur erstellen.

  • Array2DSortFree - negative Zahlen

    • BugFix
    • 31. Januar 2014 um 22:46

    Pooh - da bin ich im Moment überfragt.
    Leider ist SQLite ja genauso dreckig wie AutoIt, was Datentypen und den Umgang damit angeht.
    Ich werde mir das nochmal anschauen, ist ja doch schon ein paar Tage alt. Muss ich mich mal wieder reinfinden.

  • Suche Workaround RegExp Repeating Character Pattern Limit

    • BugFix
    • 31. Januar 2014 um 09:24

    Die max. Länge des Matches ist durch die Regex Engine limitiert auf 65500 und ein paar Zerquetschte.
    Die Länge von 25 in seinem Bsp. war nur zur Verdeutlichung.

  • Suche Workaround RegExp Repeating Character Pattern Limit

    • BugFix
    • 30. Januar 2014 um 23:53

    Habs dann doch noch gleich fertiggestellt, geht tadellos und schwuppdifix ;)
    Du brauchst die angehängten Includes dafür.

    [autoit]


    #include "LuaInline.au3"
    _Lua_StartUp() ; == Initialisiert Lua, Shutdown automatisch bei AutoIt-Ende

    [/autoit][autoit][/autoit][autoit]

    Global $sLua = _
    " local pathStr = 'C:\\Code_AutoIt\\TEST\\String.txt'" & _ ; == Dateipfad zum Einlesen
    " local pathOut = 'C:\\Code_AutoIt\\TEST\\Separated.txt'" & _ ; == Dateipfad für Ergebnis (jede Zeile ein Wert)
    " local fh = io.open(pathStr)" & _
    " local sString = fh:read()" & _
    " fh:close()" & _
    " " & _
    " local iMax = 80000" & _ ; <<<<<< Hier die Max Länge angeben <<<<<<<<
    " local sTmp, tResult = '', {}" & _
    " " & _
    " local Merge = function(_v)" & _
    " if _v == nil then" & _
    " tResult[#tResult+1] = sTmp" & _
    " elseif (#_v + #sTmp) > iMax then" & _
    " tResult[#tResult+1] = sTmp" & _
    " sTmp = _v" & _
    " else" & _
    " sTmp = sTmp.._v" & _
    " end" & _
    " end" & _
    " " & _
    " for v in sString:gmatch('(%b[])') do" & _
    " v = v:gsub('[%[%]]', '')" & _
    " Merge(v)" & _
    " end" & _
    " Merge()" & _
    " " & _
    " local sWrite = ''" & _
    " for i = 1, #tResult do" & _
    " sWrite = sWrite..tResult[i]..'\n'" & _
    " end" & _
    " fh = io.open(pathOut, 'w+')" & _
    " fh:write(sWrite)" & _
    " fh:close()"

    [/autoit][autoit][/autoit][autoit]

    _Lua_DoString($sLua)

    [/autoit][autoit][/autoit][autoit]

    ConsoleWrite('FERTIG !' & @LF)

    [/autoit]

    Edit:
    Du wolltest das unbedingt in ein Pattern pressen, das ist aber der Aufgabe schlicht und einfach nicht angemessen. Ein generisches Abarbeiten der Matches ist hier effektiver.

    Das generische Bearbeiten, wie ich es dort in Lua gemacht habe, läßt sich aber auch in AutoIt per Callback-Funktion erledigen. Und ist (zumindest bei der Dateigröße von 800 kb) nicht spürbar langsamer als in Lua. Bei größeren Dateien könnte die Speed von Lua spürbar werden.

    AutoIt-Variante:

    [autoit]

    $pathStr = 'C:\Code_AutoIt\TEST\String.txt'
    $pathOut = 'C:\Code_AutoIt\TEST\Separated.txt'
    $sString = FileRead($pathStr)
    $iMax = 80000
    Global $sMatch, $sTmp

    [/autoit][autoit][/autoit][autoit]

    _StringRegExpReplace_Callback($sString, "(\[.+?\])", "__CallBack_Match('\1')")
    __CallBack_Match() ; letzten Inhalt von $sTmp noch anfügen

    [/autoit][autoit][/autoit][autoit]

    ;~ ConsoleWrite($sMatch & @LF)
    FileWrite($pathOut, $sMatch)

    [/autoit][autoit][/autoit][autoit]

    Func __CallBack_Match($s='')
    $s = StringRegExpReplace($s, '[\[\]]', '')
    If $s = '' Then
    $sMatch &= @CRLF & $sTmp
    ElseIf (StringLen($sTmp) + StringLen($s)) > $iMax Then
    $sMatch &= @CRLF & $sTmp
    $sTmp = $s
    Else
    $sTmp &= $s
    EndIf
    EndFunc

    [/autoit][autoit][/autoit][autoit]

    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _StringRegExpReplace_Callback
    ; Description ...:
    ; Syntax ........: _StringRegExpReplace_Callback($sString, $sPattern, $sCallback[, $sBefore = ''[, $sAfter = '']])
    ; Parameters ....: $sString
    ; $sPattern
    ; $sCallback
    ; $sBefore
    ; $sAfter
    ; Return values .: None
    ; Author ........: Taz77 (Markus Ehmig <autoit at ehmig dot net>)
    ; Since .........: 2012/04/23
    ; Modified ......: 2013/05/11
    ; Remarks .......: Achtung! Das ' wird temporär im $sString durch \x1a ersetzt, wenn im plattern danach gesucht werden soll, muss nach \x1a enstelle von ' gesucht werden
    ; Related .......:
    ; Link ..........:
    ; Example .......: No
    ; ===============================================================================================================================
    Func _StringRegExpReplace_Callback($sString, $sPattern, $sCallback, $sBefore='', $sAfter='')
    Local $Str = Execute("'" & StringRegExpReplace(StringReplace($sString, "'", Chr(26), 0, 2), $sPattern, $sBefore&"'&" & $sCallback & "&'"&$sAfter) & "'")
    If @error then
    ConsoleWrite('_StringRegExpReplace_Callback error! Pattern: "'&$sPattern&'", Callback: "'&$sCallback&'"' & @LF)
    Return $sString
    EndIf
    Return StringReplace($Str, Chr(26), "'", 0, 2)
    EndFunc

    [/autoit]

    Dateien

    LuaInline.au3 13,39 kB – 277 Downloads LuaSource.au3 451,85 kB – 301 Downloads
  • Suche Workaround RegExp Repeating Character Pattern Limit

    • BugFix
    • 30. Januar 2014 um 22:14

    OK, ich teste das mal aus. Aber vor morgen abend werde ich da nicht zu kommen - aber ist nicht vergessen.

  • Suche Workaround RegExp Repeating Character Pattern Limit

    • BugFix
    • 30. Januar 2014 um 21:26

    Hast du mal so eine Musterdatei?
    Ich könnte probieren, ob das mit Lua realisierbar ist. Ich habe ja eine UDF zur Verwendung von Lua-Inline in AutoIt erstellt. Ich kann aber vorab nicht sagen ob das Pushen solch großer Datenmengen auf den Lua Stack anstandslos funktioniert.

  • Umlaute in der Konsole

    • BugFix
    • 30. Januar 2014 um 19:47

    Wer will US-ASCII?
    gesucht ist: Windows-Westeuropäisch, und das ist nunmal 1252. ;)

  • Suche Workaround RegExp Repeating Character Pattern Limit

    • BugFix
    • 30. Januar 2014 um 18:32

    Alternativvariante:
    - Lösche alle "[" "]" und ","
    - übrig bleibt der gewünschte Inhalt
    - jetzt häckseln in Teile fester Länge

    [autoit]


    $s = StringRegExpReplace("DEIN_STRING", "[\[\],]", "")
    $aMatch = StringRegExp($s, ".{1, " & $iMaxLen & "}", 3)

    [/autoit]
  • Suche Workaround RegExp Repeating Character Pattern Limit

    • BugFix
    • 30. Januar 2014 um 17:51

    So richtig kann ich dir nicht folgen.
    Du hast einen String, tausende Zeichen lang mit Gruppen von"[irgendwas]" getrennt durch Kommata - richtig?
    Und was ist jetzt der Knackpunkt, was macht es unmöglich den Teil zwischen den Klammern abzufragen? Ich sehe da kein Hindernis.

  • Suche Workaround RegExp Repeating Character Pattern Limit

    • BugFix
    • 30. Januar 2014 um 17:01

    Vielleicht erklärst du mal, was du vorhast, damit man dein Problem nachvollziehen kann.
    Was für einen Text willst du parsen, was soll dabei rauskommen?

  • SciTE - Select Statement

    • BugFix
    • 29. Januar 2014 um 22:28

    Hi,
    i2c hat die Idee hierzu gehabt. Ich habe es mal umgesetzt:

    Man markiert Code, aktiviert einen Shortcut, eine Auswahlliste popt auf. Man wählt ein Statement und dann wird der markierte Code in das Statement eingebettet. Hat das Statement mehrere Blöcke wird der Code im ersten Block eingefügt.
    Bsp.:

    [autoit]


    ; == vorher:
    MsgBox(0, 'Test', 'Blub')

    [/autoit][autoit][/autoit][autoit]

    ; == in der Liste wurde "If-Then" gewählt: "|" ist die anschließende Cursorposition
    If | Then
    MsgBox(0, 'Test', 'Blub')
    EndIf

    [/autoit]

    Bilder sagen mehr als 1000 Worte: V I D E O

    Ich habe eine Version für SciTE4AutoIt und eine für SciTE-RU erstellt.

    Installation
    Code
    SciTE4AutoIt
    			- "SelectStatement.lua" in den Lua-Skriptordner kopieren
    
    
    			- In "SciTEStartup.lua" anfugen
    				LoadLuaFile("SelectStatement.lua", "DIRECTORY")
    
    
    			- Shortcut erstellen, (SciTEUser.properties)
    				command.NR.*.au3=Statement.ShowStatementList()
    
    
    		SciTE-RU
    			- "SelectStatementRU.lua" in den Lua-Skriptordner kopieren
    
    
    			- In "COMMON.lua" einfugen
    				dofile("PATH\\SelectStatement.lua")
    				Statement.Handler()
    
    
    			- Shortcut erstellen,
    				command.NR.*.au3=Statement.ShowStatementList()
    
    
    	Anwendung:
    
    
    		- Code markieren
    		- Shortcut aufrufen
    		- der Code wird in das Statement eingebettet
    Alles anzeigen


    Edit:
    Folgende Statements stehen zur Auswahl

    Code
    "If-Then"           
    "If-Then-Else"      
    "If-Then-ElseIf"    
    "If-Then-ElseIf-Else"
    "For-Loop"          
    "While-Loop"        
    "Do-Until"          
    "With-EndWith"      
    "Func-EndFunc"

    Dateien

    SelectStatement.lua 2,55 kB – 434 Downloads SelectStatementRU.lua 2,55 kB – 421 Downloads
  • Source verschwunden, obfuscated source unobfuscaten?

    • BugFix
    • 29. Januar 2014 um 09:33

    OMFG - habt ihr keinen Frisör?

    Ich denke mal, dass weiter Ergüsse zu dieser Thematik nicht erforderlich sind.

    [CLOSED]

  • SciTE - Export au3-Datei oder markierter Code als HTML, wahlweise als Datei oder Copy2Clipboard

    • BugFix
    • 28. Januar 2014 um 20:21

    SciTE bietet die Möglichkeit Au3-Dateien als HTML-Datei zu exportieren.
    Ich habe jetzt ein Lua-Skript erstellt, dass etwas mehr Funktionalität bietet:

    • Datei oder markierte Codezeilen werden exportiert
    • Auswahl von Codepage und Language (Konstanten am Skriptanfang)
    • kpl. HTML-Datei in Datei oder Clipboard ausgeben (Dateiname = Au3-Dateiname.html im selben Pfad)
    • nur CSS-Definitionen in Clipboard ausgeben
    • nur Codeblock in Clipboard ausgeben (praktisch beim erstellen von Tuts)

    Der Code wird dann in einer Codebox dargestellt ( so wie hier ).

    Installation
    Code
    - Kopiere "CodeAsHtml.lua" in deinen Lua-Skript Ordner
    - Das Skript in der Startup Datei laden
    	SciTE4AutoIt: Datei "SciTEStartup.lua", am Ende anfügen:
    				  LoadLuaFile("CodeAsHtml.lua", "DIRECTORY")
    	SciTE-RU:     Datei "COMMON.lua", einfügen:
    				  dofile ("PATH\\CodeAsHtml.lua")
    - In "SciTEUser.properties" neue commands und shortcuts erstellen
    	z.B. Command number 36:
    	command.name.36.$(au3)=HTML: Code --> Datei
    	command.36.*.au3=dostring HtmlConvert.AsCSS()
    	command.mode.36.*=subsystem:lua
    	command.shortcut.36.*.au3=YOUR_SHORTCUT
    
    
    	"dostring HtmlConvert.AsCSS()" or "dostring HtmlConvert.AsCSS('file')"
    		Erstellt eine Datei als "NAME.html"
    
    
    	"dostring HtmlConvert.AsCSS('clip')"
    		Kopiert die Übersetzung zum Clipboard (selber Inhalt, wie in der Datei)
    
    
    	"dostring HtmlConvert.AsCSS('cssclip')"
    		Kopiert nur die CSS Definition ins Clipboard
    
    
    	"dostring HtmlConvert.AsCSS('codeclip')"
    		Kopiert nur den Codeblock ins Clipboard
    Alles anzeigen
  • Tage und Monat minus bestimmte Zahl subtrahieren

    • BugFix
    • 28. Januar 2014 um 15:36
    Zitat von MadCatz

    Aber ich kann das zurückgegeben Format YYYY/MM/DD nicht in YYYY-MM-DD anpassen

    [autoit]

    $sDate = '2014/01/28'
    $sDate = StringRegExpReplace($sDate, '(\d{4})/(\d{2})/(\d{2})', '$1-$2-$3') ; ==> -2014-01-28

    [/autoit]
  • Tage und Monat minus bestimmte Zahl subtrahieren

    • BugFix
    • 28. Januar 2014 um 15:07

    Die Datumsfunktionen funktionieren tadellos - sie erfordern aber auch zwingend, dass du das korrekte Datumsformat übergibst ( "YYYY/MM/DD" ). Ohne Jahr kannst du nicht rechnen.
    Und du wirst immer ein gültiges Datum bekommen, dafür sorgt die Funktion, inklusive Berücksichtigung von Schaltjahren.

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™