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

  • Dateinamen an Script übergeben

    • BugFix
    • 19. Mai 2017 um 15:06
    Zitat von Schmunzel57

    aber doch bei weitem nicht so elegant wie gewünscht. Oder ???

    Kommt drauf an, an welchen Kriterien du dein Skript bemisst. Soll es in Schönheit sterben oder solide funktionieren? :P
    Ich setze die Prämisse auf Funktionalität. Scripting sugar kann - muß aber nicht sein. ;)

  • Dateinamen an Script übergeben

    • BugFix
    • 18. Mai 2017 um 22:17
    Zitat von alpines

    Es ist nicht möglich mehrere Dateien an eine Datei zu schicken so wie es in dem Thread steht.

    Meiner Meinung nach hat der von dir benannte Thread nichts mit dem Problem des TE zu tun.

    Selbstverständlich lassen sich per Kontextmenü z.B. 3 markierte Dateien gemeinsam an eine Zielanwendung senden. Diese arbeitet die Dateien dann, wie vom TE gewünscht, nacheinander ab.
    Aufruf wäre dann so: "c:\tools\meine.exe 'c:\data\docs\doc1.txt' 'c:\data\docs\doc2.txt' 'c:\data\docs\doc3.txt'"
    "meine.exe" als Zielanwendung in der Registry eintragen - fertig.

    Edit:
    Die Erkennung der selektierten Dateien, muß natürlich selbst geskriptet werden, standardmäßig würde, wie schon richtig gesagt, für jede Datei eine Instanz der Anwendung aufgerufen werden.
    Vor etlichen Jahren hatte ich mal etwas Ähnliches geschrieben: Kontextmenüeintrag (Dateiexplorer) - Infos markierte Dateien in Zwischenablage kopieren

  • Teilstring einer Variable ab letztem Zeichen

    • BugFix
    • 17. Mai 2017 um 14:54

    Oder mit StringRegExpReplace

    AutoIt
    $url = 'domainurl.test.com'
    
    
    $sFirst = StringRegExpReplace($url, '([^.]+).+', '$1')
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $sFirst --> " & $sFirst & @LF)
    
    
    $sLast = StringRegExpReplace($url, '.+\.([^.]+)$', '$1')
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   var: $sLast --> " & $sLast & @LF)
  • Ordner/Dateien verpacken mit Progressbar

    • BugFix
    • 15. Mai 2017 um 14:26
    Zitat von alpines

    Bei der Methode musst du aber auf das Working-Directory aufpassen, weil die out.txt Datei dort hingeschrieben wird.

    Das kannst du mit der Angabe eines fixen Pfades umgehen. Also z.B. ... >> c:\tempout\out.txt

  • EXCEL _Excel_RangeFind ist zu langsam

    • BugFix
    • 15. Mai 2017 um 14:22

    [OT]

    Zitat von tubsids

    Wo hackt es?

    :Face:
    Die Hacke ist ein Gartenwerkzeug, mit ihr wird gehackt!
    Wenn etwas hängt, dann hakt es!
    [/OT]

  • Frage zu include bei nicht kompilierung

    • BugFix
    • 12. Mai 2017 um 10:24
    Zitat von BLinz

    Dann müsste auf allen Rechnern der Benutzer auch Autoit installiert sein - sonst weiß deren rechner nicht was eine .au3 Datei ist.

    Werft mal einen Blick in die Hilfe. AutoIt -Dateien /-Codezeilen lassen sich unabhängig von einem installierten AutoIt ausführen. Es braucht dazu nur eine beliebige AutoItdatei, die zur *.exe kompiliert wurde. Diese lässt sich dann verwenden um *.au3 zu interpretieren. In diesem Falle müssten aber alle zu includierenden Dateien mitgeliefert werden

    Code
    Run a script using another compiled script:
    
    
    Compiled.exe [/ErrorStdOut] /AutoIt3ExecuteScript file [params ...]
                    Execute another AutoIt script file from a compiled AutoIt3 executable. 
    
    
    Compiled.exe [/ErrorStdOut] /AutoIt3ExecuteLine "command line"
                    Execute one line of code as with AutoIt3.exe above. 
    
    
    This means that there is no need to have a copy of AutoIt3.exe in addition to the compiled file - the interpreter stub of the compiled file will replace it.  So as long as there is at least one compiled script available, other AutoIt scripts can be run without the need to have AutoIt3.exe on the machine., either pre-installed or added via FileInstall.
    Alles anzeigen
  • RegEx Pattern kürzen?

    • BugFix
    • 1. Mai 2017 um 14:06

    Wenn der Auswertestring in einer Zeile vorliegt, geht das wesentlich einfacher:

    AutoIt
    $s = '<td>14,6;77;12,4;134,5;216;5</td>'
    $aNumbers = StringRegExp($s, '([\d,]+)', 3)
    
    
    For $i = 0 To UBound($aNumbers) -1
    	ConsoleWrite($aNumbers[$i] & @CRLF)
    Next
  • RegEx Pattern kürzen?

    • BugFix
    • 1. Mai 2017 um 11:36
    Zitat von Lesato

    Im oben aufgeführten String sind die benötigten Zahlen jeweils durch ein Komma getrennt.

    Wohl eher durch ein Semikolon? Oder möchtest du aus den Semikolon-getrennten Zahlen nur von den Zahlen mit Nachkommaanteil den Ganzzahlwert?

  • Excel - Formaterkennung für Daten

    • BugFix
    • 28. April 2017 um 19:38
    Zitat von Bitnugger

    Du sag mal, machst du das Lua-Script (OHK) mit den SciTE-Variablen noch irgendwann fertig? (eg. "props['SciteDirectoryHome']")

    Oh Shit - da war doch was. Bitte erinnere mich regelmäßig alle 6 Monate daran. :rofl:

  • Excel - Formaterkennung für Daten

    • BugFix
    • 28. April 2017 um 16:07

    Hi,
    vielleicht kennt ihr das - ihr habt Daten, die aus einer Textdatei/Datenbank in eine Exceltabelle übertragen werden sollen. Wenn in den Daten z.B. Postleitzahlen oder Telefonnummern enthalten sind, muß ich vor dem Übertragen der Daten die Tabelle formatieren, da sonst die Vornullen weg sind. Früher hatte ich das mit einem Skript für jeden Anwendungsbereich extra gelöst. Jetzt löse ich das, wie folgt:

    AutoIt
    #include <Excel.au3>
    
    
    ; Bsp: CSV-Datei
    #cs
    KDNR;NAME;VNAME;STRASSE_NR;PLZ;ORT;TEL;EMAIL;REGISTERDATUM
    10123;Mustermann;Max;Mustergasse 123;08150;Musterhausen;089123456789;max.mustermann@mustermann.de;18.01.2017
    #ce
    
    
    ; erste Datenzeile einlesen (simuliert: _FileReadToArray($sPathFile, $aFile))
    Local $aFile[] = [3, _
    "KDNR;NAME;VNAME;STRASSE_NR;PLZ;ORT;TEL;EMAIL;REGISTERDATUM", _
    "10123;Mustermann;Max;Mustergasse 123;08150;Musterhausen;089123456789;max.mustermann@mustermann.de;18.01.2017", _
    "10124;Musterfrau;Maria;Mustergässle 456;56789;Musterdorf;099987654321;maria.musterfrau@musterfrau.de;21.02.2017"]
    
    
    ; erste Datenzeile splitten
    Local $aLine = StringSplit($aFile[2], ';')
    
    
    ; Exceltabelle erstellen und vor Befüllen mit Daten die Spalten formatieren
    Local $oExcel = _Excel_Open()
    Local $oWorkbook = _Excel_BookNew($oExcel, 1)
    Local $oSheet = $oWorkbook.Worksheets(1)
    For $i = 1 To $aLine[0]
    	$oSheet.Columns($i).NumberFormat = _GetExcelFormatByData($aLine[$i])
    Next
    
    
    ; Exceltabelle füllen
    For $i = 1 To $aFile[0]
    	$aLine = StringSplit($aFile[$i], ';', 2)
    	For $j = 0 To UBound($aLine) -1
    		$oSheet.Range("A1").Offset($i-1, $j).Value = $aLine[$j]
    		ConsoleWrite('$i-1, $j: ' & $i-1 & ', ' & $j & @CRLF)
    	Next
    Next
    
    
    
    
    
    
    
    
    ; #FUNCTION# ====================================================================================================================
    ; Name ..........: _GetExcelFormatByData
    ; Description ...: Gets the (german) Excel format string for a given data
    ; Syntax ........: _GetExcelFormatByData($sData)
    ; Parameters ....: $sData         - Value for the detection of the format
    ; Return values .: The Excel format string
    ; Author ........: BugFix
    ; ===============================================================================================================================
    Func _GetExcelFormatByData($sData)
    	$sData = String($sData)
    	Local $sPattDateHMS = '^\d{1,2}\.\d{1,2}\.\d{4} \d{1,2}:\d{1,2}:\d{1,2}$'
    	Local $sPattDateHM = '^\d{1,2}\.\d{1,2}\.\d{4} \d{1,2}:\d{1,2}$'
    	Local $sPattDate = '^\d{1,2}\.\d{1,2}\.\d{4}$'
    	Local $sPattFloat = '^\d+,\d+$'
    	Local $sPattZero = '^0$' ; alleinstehende Null als Integer nicht als String, wie führende Null in PLZ od. TelefonNr
    	Local $sPattInteger = '^[1-9]\d*$'
    	Select
    		Case StringRegExp($sData, $sPattDateHMS)
    			Return 'TT.MM.JJJJ hh:mm:ss'
    		Case StringRegExp($sData, $sPattDateHM)
    			Return 'TT.MM.JJJJ hh:mm'
    		Case StringRegExp($sData, $sPattDate)
    			Return 'TT.MM.JJJJ'
    		Case StringRegExp($sData, $sPattFloat)
    			Return '#0,#'
    		Case StringRegExp($sData, $sPattZero) Or StringRegExp($sData, $sPattInteger)
    			Return '#'
    		Case Else
    			Return '@'
    	EndSelect
    EndFunc  ;==>_GetExcelFormatByData
    Alles anzeigen
  • Powershell Fehlermeldung

    • BugFix
    • 26. April 2017 um 09:32

    Habe es schon verschoben.

  • Autoit Windows Wipe Datei und/oder Ordner

    • BugFix
    • 26. April 2017 um 09:30
    Zitat von Musashi

    Bist Du sicher, dass man damit gezielt einzelne Dateien final löschen kann ? Soweit ich das verstanden habe, überschreibt Cipher nur den freien Speicherplatz. Dateien müssen vorher 'normal' gelöscht werden.

    Da hast du Recht, ich hatte das auch anders in Erinnerung. Daten müssen zuerst gelöscht werden.

  • und nochmals RunWait @ComSpec

    • BugFix
    • 25. April 2017 um 10:12
    Zitat von mauric

    Mit diesem Weg klappt es auch nicht.

    $c = RunWait(StringFormat('"%s" x "%s" "%s"',@ComSpec,@Systemdir, $7a, $x, $all, $de), '', @SW_SHOW)

    Wie auch. Du verwendest nur 3 Formatvariablen (%s) und hast im Befehl 6 Variablen!
    Und was bitte soll das @ComSpec im Aufruf? Das ist doch total überflüssig, da du den Pfad zur Ausführungsdatei angibst und keinen Befehl aus der CMD.exe.

  • [gelöst] SQL - Positionsabfrage von rechts?

    • BugFix
    • 24. April 2017 um 11:13

    Der Verweis auf Case war gut.
    Habe mir jetzt eine zweistufige dreistufige Lösung erstellt (also von 2 3 möglichen Leerzeichen wird beim letzten getrennt. Damit sollten 99% der Fälle abgedeckt sein (solange wir nicht als Kundin Pippilotta Viktualia Rollgardina Pfefferminz Efraimstochter Langstrumpf bekommen :rofl: ).

    SQL
    select 
      case
        when pos(" ",name1) > 0 
         and pos(" ", substrex(name1, pos(" ",name1)+1, 40)) > 0 
         and pos(" ", substrex(name1, pos(" ",name1)+pos(" ", substrex(name1, pos(" ",name1)+1, 40))+1, 40)) > 0 then
          substrex(name1, pos(" ",name1)+pos(" ", substrex(name1, pos(" ",name1)+1, 40))+pos(" ", substrex(name1, pos(" ",name1)+pos(" ", substrex(name1, pos(" ",name1)+1, 40))+1, 40))+1, 40)
        when pos(" ",name1) > 0 and pos(" ", substrex(name1, pos(" ",name1)+1, 40)) > 0 then 
          substrex(name1, pos(" ",name1)+pos(" ", substrex(name1, pos(" ",name1)+1, 40))+1, 40)
        when pos(" ",name1) > 0 then 
          substrex(name1, pos(" ",name1)+1, 40)  
        else name1
      end NAME,
      case
        when pos(" ",name1) > 0 
         and pos(" ", substrex(name1, pos(" ",name1)+1, 40)) > 0 
         and pos(" ", substrex(name1, pos(" ",name1)+pos(" ", substrex(name1, pos(" ",name1)+1, 40))+1, 40)) > 0 then
          substrex(name1, 1, pos(" ",name1)+pos(" ", substrex(name1, pos(" ",name1)+1, 40))+pos(" ", substrex(name1, pos(" ",name1)+pos(" ", substrex(name1, pos(" ",name1)+1, 40))+1, 40))) 
        when pos(" ",name1) > 0 and pos(" ", substrex(name1, pos(" ",name1)+1, 40)) > 0 then 
          substrex(name1, 1, pos(" ",name1)+pos(" ", substrex(name1, pos(" ",name1)+1, 40)))
        when pos(" ",name1) > 0 then 
          substrex(name1, 1, pos(" ",name1)-1)
        else ''
      end VORNAME
    from 
      kunden
    where 
      kundennr = ::KDNR
    ;
    Alles anzeigen
  • _Excel_BookSaveAs immer mit Fehler

    • BugFix
    • 23. April 2017 um 21:24

    Unser Firmennetz ist ausschliesslich Intranet, insofern können wir da ganz entspannt sein. Es gibt zwei Einzel-PC mit Internetanschluß für Mailverkehr.

  • _Excel_BookSaveAs immer mit Fehler

    • BugFix
    • 23. April 2017 um 15:06

    Wir machen in der Firma heute dasselbe, wie im Jahr 2000. Insofern wäre es unsinnig Geld für Software auszugeben, wenn die vorhandene allen Anforderungen gerecht wird. Office 2000 wird hier also bestimmt noch 15 Jahre laufen. ;)

  • _Excel_BookSaveAs immer mit Fehler

    • BugFix
    • 23. April 2017 um 14:07

    Das ändert nichts.
    Ich bleibe dann lieber bei den nativen Objektfunktionen, aber vielleicht läßt sich das ja in die Funktion _Excel_BookSaveAs auch integrieren:

    $oExcel.ActiveWorkBook.SaveAs(@ScriptDir & '\test.xls') -- funktioniert fehlerfrei

  • _Excel_BookSaveAs immer mit Fehler

    • BugFix
    • 23. April 2017 um 13:11

    Hi,
    ich nutze selten die Excel-UDF, hier bleibe ich jetzt hängen. Das Workbook läßt sich nicht speichern. Mit $oWorkbook als Parameter sollte das doch funktionieren. Ich bekomme aber immer Fehler, auch bei alternativer Angabe von $oExcel oder $oSheet. Ich verwende Office 2000.

    AutoIt
    #include <Excel.au3>
    
    
    Local $oExcel = _Excel_Open()
    Local $oWorkbook = _Excel_BookNew($oExcel, 1)
    Local $oSheet = $oWorkbook.Worksheets(1)
    
    
    With $oSheet
    	For $i = 0 To 5
    		.Range("A1").Offset(0, $i).Value = 'SPALTE ' & $i+1
    	Next
    EndWith
    
    
    ; speichern als
    
    
    _Excel_BookSaveAs($oWorkbook, @ScriptDir & '\test.xls', Default, True)
    ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   _Excel_BookSaveAs($oWorkbook) --> #Error: " & @error & @TAB & "#Extended: " & @extended & @LF) ; #Error: 5	#Extended: -2147352567
    
    
    ;~ _Excel_BookSaveAs($oExcel, @ScriptDir & '\test.xls', Default, True)
    ;~ ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   _Excel_BookSaveAs($oWorkbook) --> #Error: " & @error & @TAB & "#Extended: " & @extended & @LF) ; #Error: 1	#Extended: 0
    
    
    ;~ _Excel_BookSaveAs($oSheet, @ScriptDir & '\test.xls', Default, True)
    ;~ ConsoleWrite("@@ Debug line" & @TAB & @ScriptLineNumber & "   _Excel_BookSaveAs($oSheet) --> #Error: " & @error & @TAB & "#Extended: " & @extended & @LF) ; #Error: 5	#Extended: 0
    Alles anzeigen
  • [gelöst] SQL - Positionsabfrage von rechts?

    • BugFix
    • 21. April 2017 um 14:15

    Hi,
    in AutoIt lässt sich bei StringInStr() mit -1 im Parameter für Vorkommen von rechts suchen.

    Ich suche für Firebird-SQL eine solche Variante.
    Wir haben leider Adressangaben mit: Vorname Zuname in einem Datenfeld. Manchmal benötige ich aber beides getrennt. Momentan nutze ich folgendes Query:

    SQL
    select 
     substrex( name1, pos(" ",name1)+1, 256 ) NAME,
     substrex( name1, 1, pos(" ",name1)-1 ) VORNAME
    from 
     kunden 
    where 
     kundennr = 10000

    Interne Funktionen:
    substrex ( sString, iStartPos, iCount ) gibt iCount Zeichen ab iStartPos zurück
    pos ( sSearch, sString) gibt Integer Position von sSearch zurück

    Ich kann somit nur das erste Leerzeichen verwerten. Für viele Namen ist das ausreichend, aber wenn z.B. Doppelvornamen ohne Bindestrich existieren oder auch ein Titel, dann gehts in die Hose. Eine bessere Treffergröße hätte ich bei Abfrage des letzten Leerzeichens.
    Gibt es evtl. Workarounds, die das StringInStr simulieren können?
    Ich hatte schon überlegt (mangels Möglichkeit von Schleifen) eine gestaffelte Abfrage zu erstellen, die die Leerzeichenposition des letzten Querys als Start im nächsten nimmt. Mehr als 5 Leerzeichen sind nicht zu erwarten, also wäre das auch nicht zu verschachtelt - aber wie kann ich anweisen, dass bei Positionsergebnis 0 auf das Ergebnis des vorigen Schrittes zugegriffen werden soll?

    Bin für jede Idee dankbar.

    EDIT: Als Hinweis - ich verwende Firebird Version 1.5, die Funktion IIF (funktioniert wie ein Ternärer Operator) gibt es erst ab Version 2.0

  • Nutzungsrechte Skripte

    • BugFix
    • 17. April 2017 um 14:58

    Ich verstehe das weniger als rechtliche Äusserung zum Urheberrechtsschutz als eine Manifestation des Forumsgedankens.
    Ich persönlich finde jede Bestrebung geistiges Eigentum an Software zu manifestieren als pervers.

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™