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

  • Funktionsparameter (Const, Default) und Enum

    • BugFix
    • 3. Oktober 2011 um 22:38

    Oh, diese Leichenschänderei :D
    Was man natürlich erwähnen kann: Die Abfrage ob "Default" gesetzt ist geht prima mit

    [autoit]

    IsKeyword($Parameter)

    [/autoit]

    denn "Default" ist das einzige in AutoIt existierende Keyword. ;)

  • Stringbearbeitung mit Python-Syntax

    • BugFix
    • 3. Oktober 2011 um 22:31
    Zitat von progandy

    und wieder mal viel zu viel RegEx für diese einfache Aufgabe :P


    :D Ich wollte nur deine Aufmerksamkeit wecken. :rofl: - Nun auch in RegExp-freier Version. ;)

  • Stringbearbeitung mit Python-Syntax

    • BugFix
    • 3. Oktober 2011 um 12:38

    Hi,
    ich habe mal ein wenig in der Python-Syntax "fremdgeschnüffelt" :D und finde die dortige Syntax zur Stringbearbeitung sehr komfortabel. Unsere Befehle StringLeft, -Right, -Mid, -TrimLeft, -TrimRight sind alle in einer simplen Syntax enthalten.

    Spoiler anzeigen
    Code
    Stringvariable[Maske]
    Maske:
    Index ist 0-basiert
    i		Zeichen an Index (i)
    i:j		String zwischen Index (i) und Index (j), inkl.(i)
    :i		String zwischen Anfang und Index (i)
    i:		String ab Index (i) bis Ende
    -n		das n-te Zeichen von rechts
    -n:		die letzten n Zeichen
    :-n		alles außer den n letzten Zeichen


    Das ist recht angenehm zu händeln. Also habe ich es mal für AutoIt analog umgesetzt. Vielleicht findet jemand Geschmack dran. ;)

    Spoiler anzeigen
    [autoit]

    $s = '0123456789'
    ConsoleWrite('> String gesamt ' & $s & @CRLF)
    ConsoleWrite('> Das 2-te Zeichen ' & _StrPython($s, '1') & @CRLF)
    ConsoleWrite('> an Index 2 bis 5 ' & _StrPython($s, '2:6') & @CRLF)
    ConsoleWrite('> bis Index 6 ' & _StrPython($s, ':6') & @CRLF)
    ConsoleWrite('> alles ab Index 6 ' & _StrPython($s, '6:') & @CRLF)
    ConsoleWrite('> 2-tes von rechts ' & _StrPython($s, '-2') & @CRLF)
    ConsoleWrite('> die letzten 3 ' & _StrPython($s, '-3:') & @CRLF)
    ConsoleWrite('> außer letzte 3 ' & _StrPython($s, ':-3') & @CRLF)

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

    Func _StrPython($sString, $sMask)
    Local $aMask = StringSplit($sMask, ':', 2)
    Select
    Case StringRegExp($sMask, '\A\d+\z') ; == i
    Return StringMid($sString, $sMask+1, 1)
    Case StringRegExp($sMask, '\A\d+:\d+\z') ; == i:j
    Return StringMid($sString, $aMask[0]+1, $aMask[1]-$aMask[0])
    Case StringRegExp($sMask, '\A\:\d+\z') ; == :i
    Return StringLeft($sString, $aMask[1])
    Case StringRegExp($sMask, '\A\d+:\z') ; == i:
    Return StringMid($sString, $aMask[0]+1)
    Case StringRegExp($sMask, '\A-\d+\z') ; == -n
    Return StringMid($sString, StringLen($sString)+$sMask+1, 1)
    Case StringRegExp($sMask, '\A-\d+:\z') ; == -n:
    Return StringRight($sString, Abs($aMask[0]))
    Case StringRegExp($sMask, '\A:-\d+\z') ; == :-n
    Return StringTrimRight($sString, Abs($aMask[1]))
    EndSelect
    EndFunc

    [/autoit]

    Edit:
    Ja ja - es geht natürlich auch ohne RegExp :P :

    Spoiler anzeigen
    [autoit]

    Func _StrPython($sString, $sMask)
    Local $aMask = StringSplit($sMask, ':', 2)
    If Not StringInStr($sMask, ':') Then ; == i, -n
    If $sMask < 0 Then Return StringMid($sString, StringLen($sString)+$sMask+1, 1) ; == -n
    Return StringMid($sString, $sMask+1, 1) ; == i
    ElseIf StringLeft($sMask, 1) = ':' Then ; == :i, :-n
    If $aMask[1] < 0 Then Return StringTrimRight($sString, Abs($aMask[1])) ; == :-n
    Return StringLeft($sString, $aMask[1]) ; == :i
    ElseIf StringRight($sMask, 1) = ':' Then ; == i:, -n:
    If $aMask[0] < 0 Then Return StringRight($sString, Abs($aMask[0])) ; == -n:
    Return StringMid($sString, $aMask[0]+1) ; == i:
    Else
    Return StringMid($sString, $aMask[0]+1, $aMask[1]-$aMask[0]) ; == i:j
    EndIf
    EndFunc

    [/autoit]


    Edit 16.10.2012
    Ich habe die Funktion jetzt etwas erweitert. Zusätzlich zu der bisherigen Syntax kann die Funktion jetzt mit Operationskonstanten aufgerufen werden. Das ist unter Umständen leichter zu merken.
    Weiterhin habe ich ein Skript beigefügt um UserCallTips für die Funktion zu installieren.

    StrPython v0.2
    [autoit]

    #Region - TimeStamp
    ; 2012-10-16 13:01:10 v 0.2
    #EndRegion - TimeStamp

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

    #include-once
    Global Const $_OIx = -2000 ; == On Index
    Global Const $_FTo = $_OIx +1 ; == From (Index) To (Index)
    Global Const $_FSTo = $_OIx +2 ; == From Start To (Index)
    Global Const $_FToE = $_OIx +3 ; == From (Index) To End
    Global Const $_PFR = $_OIx +4 ; == (Char At) Position From Right
    Global Const $_ChR = $_OIx +5 ; == (Number) Chars Right
    Global Const $_WoChR = $_OIx +6 ; == Without (Number) Chars Right

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

    ;===============================================================================
    ; Function Name....: _StrPython
    ; Description......: Stringbearbeitung mit Pythonsyntax
    ; Parameter(s).....: $sString der zu bearbeitende String
    ; .................: $sOp entweder Maske oder Operator Variable:
    ; .................: Maske, die die Operation definiert, Index ist 0-basiert
    ; .................: Maske OperatorVar.
    ; .................: i $_OIx Zeichen an Index (i)
    ; .................: i:j $_FTo String von Index (i) bis Index (j) , inkl. (i) / exkl. (j)
    ; .................: :i $_FSTo String ab Anfang bis Index (i) , exkl. (i)
    ; .................: i: $_FToE String ab Index (i) bis Ende , inkl. (i)
    ; .................: -n $_PFR das n-te Zeichen von rechts
    ; .................: -n: $_ChR die letzten n Zeichen
    ; .................: :-n $_WoChR alles außer den n letzten Zeichen
    ; .................: $iVal (nur bei Verwendung OperatorVar.) der (Von) Index
    ; .................: $iTo (nur bei Verwendung OperatorVar.) der Bis Index
    ; Return Value(s)..: Erfolg Das Ergebnis der Bearbeitung
    ; .................: Fehler '' und @error 1 = Von-Bis-Operation ohne Bis-Index
    ; .................: @error 2 = kein gültiger Operationstyp
    ; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
    ;===============================================================================
    Func _StrPython($sString, $sOp, $iVal='', $iTo='')
    Local $sMask = $sOp
    If $iVal <> '' Then
    Switch $sOp
    Case $_OIx ; == On Index
    $sMask = $iVal
    Case $_FTo ; == From To
    If $iTo = '' Then Return SetError(1,0,'')
    $sMask = $iVal & ':' & $iTo
    Case $_FSTo ; == From Start To
    $sMask = ':' & $iVal
    Case $_FToE ; == From To End
    $sMask = $iVal & ':'
    Case $_PFR ; == Position From Right
    $sMask = '-' & $iVal
    Case $_ChR ; == Chars Right
    $sMask = '-' & $iVal & ':'
    Case $_WoChR ; == Without Chars Right
    $sMask = ':-' & $iVal
    Case Else
    Return SetError(2,0,'')
    EndSwitch
    EndIf
    Local $aMask = StringSplit($sMask, ':', 2)
    If Not StringInStr($sMask, ':') Then ; == i, -n
    If $sMask < 0 Then Return StringMid($sString, StringLen($sString)+$sMask+1, 1) ; == -n
    Return StringMid($sString, $sMask+1, 1) ; == i
    ElseIf StringLeft($sMask, 1) = ':' Then ; == :i, :-n
    If $aMask[1] < 0 Then Return StringTrimRight($sString, Abs($aMask[1])) ; == :-n
    Return StringLeft($sString, $aMask[1]) ; == :i
    ElseIf StringRight($sMask, 1) = ':' Then ; == i:, -n:
    If $aMask[0] < 0 Then Return StringRight($sString, Abs($aMask[0])) ; == -n:
    Return StringMid($sString, $aMask[0]+1) ; == i:
    Else
    Return StringMid($sString, $aMask[0]+1, $aMask[1]-$aMask[0]) ; == i:j
    EndIf
    EndFunc ;==>_StrPython

    [/autoit]
    Beispiel
    [autoit]

    #include "StrPython.au3"

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

    $s = '0123456789'
    ConsoleWrite('> String gesamt ' & $s & @CRLF)
    ConsoleWrite('> Das 2-te Zeichen ' & _StrPython($s, '1' ) & @CRLF)
    ConsoleWrite('> von Index 2 bis (exkl.) 6 ' & _StrPython($s, '2:6') & @CRLF)
    ConsoleWrite('> bis Index 6 (exkl.) ' & _StrPython($s, ':6' ) & @CRLF)
    ConsoleWrite('> alles ab Index 6 (inkl.) ' & _StrPython($s, '6:' ) & @CRLF)
    ConsoleWrite('> 2-tes von rechts ' & _StrPython($s, '-2' ) & @CRLF)
    ConsoleWrite('> die letzten 3 ' & _StrPython($s, '-3:') & @CRLF)
    ConsoleWrite('> außer letzte 3 ' & _StrPython($s, ':-3') & @CRLF)
    ConsoleWrite(@CRLF)
    ConsoleWrite('> String gesamt ' & $s & @CRLF)
    ConsoleWrite('> Das 2-te Zeichen ' & _StrPython($s, $_OIx, 1) & @CRLF) ; == On Index
    ConsoleWrite('> von Index 2 bis (exkl.) 6 ' & _StrPython($s, $_FTo, 2, 6) & @CRLF) ; == From (Index) To (Index)
    ConsoleWrite('> bis Index 6 (exkl.) ' & _StrPython($s, $_FSTo, 6) & @CRLF) ; == From Start To (Index)
    ConsoleWrite('> alles ab Index 6 (inkl.) ' & _StrPython($s, $_FToE, 6) & @CRLF) ; == From (Index) To End
    ConsoleWrite('> 2-tes von rechts ' & _StrPython($s, $_PFR, 2) & @CRLF) ; == (Char At) Position From Right
    ConsoleWrite('> die letzten 3 ' & _StrPython($s, $_ChR, 3) & @CRLF) ; == (Number) Chars Right
    ConsoleWrite('> außer letzte 3 ' & _StrPython($s, $_WoChR, 3) & @CRLF) ; == Without (Number) Chars Right

    [/autoit]
    Installation UserCallTips
    [autoit]

    ; == UserCallTips installieren
    $sPathUserCallTips = StringLeft(@AutoItExe, StringInStr(@AutoItExe, '\', 0, -1)) & 'SciTE\api\au3.user.calltips.api'
    $sToWrite = _
    '_StrPython ( $Str, $_OIx, INDEX ) od. ( $Str, "INDEX" ) Gibt Zeichen an Index zurück; erfordert StrPython.au3' & @CRLF & _
    '_StrPython ( $Str, $_FTo, INDEX_1, INDEX_2 ) od. ( $Str, "INDEX_1:INDEX_2" ) Gibt Zeichen zw. Index_1 und (exkl.) Index_2 zurück; erfordert StrPython.au3' & @CRLF & _
    '_StrPython ( $Str, $_FSTo, INDEX ) od. ( $Str, ":INDEX" ) Gibt Zeichen von Start bis (exkl.) Index zurück; erfordert StrPython.au3' & @CRLF & _
    '_StrPython ( $Str, $_FToE, INDEX ) od. ( $Str, "INDEX:" ) Gibt Zeichen von Index bis Ende zurück; erfordert StrPython.au3' & @CRLF & _
    '_StrPython ( $Str, $_PFR, NUMBER ) od. ( $Str, "-NUMBER" ) Gibt das n-te Zeichen von rechts zurück; erfordert StrPython.au3' & @CRLF & _
    '_StrPython ( $Str, $_ChR, NUMBER ) od. ( $Str, "-NUMBER:" ) Gibt n Zeichen von rechts zurück; erfordert StrPython.au3' & @CRLF & _
    '_StrPython ( $Str, $_WoChR, NUMBER ) od. ( $Str, ":-NUMBER" ) Gibt String ohne n rechte Zeichen zurück; erfordert StrPython.au3' & @CRLF
    If Not FileExists($sPathUserCallTips) Then
    FileWrite($sPathUserCallTips, $sToWrite)
    Else
    $hFile = FileOpen($sPathUserCallTips, 1)
    FileWrite($hFile, @CRLF & $sToWrite)
    FileClose($hFile)
    EndIf

    [/autoit]

    Dateien

    StrPython.au3 3,71 kB – 317 Downloads
  • Ausgabestring Längengruppiert für bis zu 10 Werte

    • BugFix
    • 2. Oktober 2011 um 02:04

    Nun, ich finde an Eval() nichts auszusetzen , solange man es dosiert einsetzt. Und um eine variable Zahl an Parametern zu übergeben hat man keine andere Wahl. Vorher ein Parameterarray zu erstellen oder einen Parameterstring den ich dann splitte, halte ich für wenig komfortabel.
    Und wie progandy auch richtig anmerkte (in einem anderen Thread), sollte man der Geschwindigkeit zu liebe auf das langsame StringFormat verzichten.

  • Ausgabestring Längengruppiert für bis zu 10 Werte

    • BugFix
    • 1. Oktober 2011 um 12:58

    Ihr kennt es bestimmt auch: z.B. beim Debuggen möchte man sich im Schleifendurchlauf mehrere Werte nebeneinander anzeigen lassen. Schön wäre es natürlich, wenn diese Werte dann auch immer genau übereinander, also in Tabellenform ausgegeben werden.
    Genau das ermöglicht die Funktion _LenGroupedOutput.
    Der Einsatz beschränkt sich natürlich nicht nur auf die Konsolenausgabe. Überall, wo mit fixen Stringlängen gearbeitet werden soll ist es recht nützlich.
    So gehts:
    - Parameter $sLen -- legt die Stringlänge für die übergebenen Werte fest.
    Dabei gilt:
    '-ANZAHL' -- Alle Werte bekommen die Länge ANZAHL
    'ANZAHL_1,ANZAHL_2, ..ANZAHL_n' -- Länge für Element 'n' ; bei Ausrichtung Links nur bis n-1 erforderlich (Angabe bis vorletztes Element)
    - Parameter $charFill -- Zeichen, das zum Auffüllen verwendet werden soll
    - Parameter $iAlign -- Ausrichtung: 0=Links, 1=Rechts
    - Parameter $var_1 .._10 -- Die zu gruppierenden Werte

    Und so sieht es dann z.B. aus:

    Spoiler anzeigen
    Code
    Ausrichtung: Links, Länge für jeden Wert übergeben:
    9951......385...60..2686....2044....865
    1832......354...24..1047....794.....3253
    4157......566...9...4958....2032....732
    8108......644...60..3358....4092....1619
    9218......322...40..6387....1660....9286
    2037......960...78..4019....6150....5656
    4731......803...47..6326....4297....6075
    2964......436...29..2917....8831....9078
    
    
    Ausrichtung: Rechts, eine Länge gültig für alle Werte:
    ....9198.....704......22....1643....2147....4672
    ....4295.....562......57....1170....4806....6894
    ....1823......16......26....8112....7126....6141
    ....6806.....916......53....7885....6703....1689
    ....1586.....995.......6.....730....5141....7381
    ....5959.....421......25....4287.....806....5501
    ....7686.....854......56....2991....7314....4110
    ....1821.....428......28....5727....6935....6916
    Alles anzeigen
    _LenGroupedOutput(v0.1)
    [autoit]

    ConsoleWrite('Ausrichtung: Links, Länge für jeden Wert übergeben:' & @CRLF)
    For $i = 1 To 8
    ConsoleWrite(_LenGroupedOutput('10,6,4,8,8,8', '.', 0, Random(10,10000,1),Random(10,1000,1),Random(1,100,1),Random(10,10000,1),Random(10,10000,1),Random(10,10000,1)) & @CRLF)
    Next
    ConsoleWrite(@CRLF & 'Ausrichtung: Rechts, eine Länge gültig für alle Werte:' & @CRLF)
    For $i = 1 To 8
    ConsoleWrite(_LenGroupedOutput('-8', '.', 1, Random(10,10000,1),Random(10,1000,1),Random(1,100,1),Random(10,10000,1),Random(10,10000,1),Random(10,10000,1)) & @CRLF)
    Next

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

    ;===============================================================================
    ; Function Name....: _LenGroupedOutput
    ; Description......: Längengruppierten Ausgabestring aus bis zu 10 Werten erzeugen
    ; Parameter(s).....: $sLen Festlegen der Stringlänge der übergebenen Werte
    ; '-ANZAHL' das Minus gibt an: ANZAHL gilt für ALLE übergebenen Werte
    ; 'ANZAHL_1,ANZAHL_2,..ANZAHL_n' ANZAHL_n für Element 'n' ; bei $iAlign=0: n-1 (bis vorletztes Element)
    ; $charFill Zeichen, das zum Auffüllen verwendet werden soll
    ; $iAlign '0'= LeftAlign, '1'= RightAlign
    ; $var_1 .._10 Bis zu 10 Werte, die gruppiert werden sollen
    ; Return Value(s)..: Erfolg Der gruppierte String
    ; Fehler @error 1 - $sLen nicht für alle Elemente übergeben
    ; @error 2 - $charFill ist Leerstring oder zu lang
    ; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
    ;===============================================================================
    Func _LenGroupedOutput($sLen, $charFill, $iAlign, $var_1, $var_2, $var_3='-0', $var_4='-0', $var_5='-0', $var_6='-0', $var_7='-0', $var_8='-0', $var_9='-0', $var_10='-0')
    Local $aVar[9], $index = 0, $aLen, $sFill = '', $sOut = ''
    If $iAlign <> 1 Then $iAlign = 0
    If StringLen($charFill) <> 1 Then Return SetError(2,0,0)
    For $i = 1 To 30
    $sFill &= $charFill
    Next
    For $i = 1 To 10
    If Eval('var_' & $i) <> '-0' Then
    $aVar[$i-1] = Eval('var_' & $i)
    $index = $i -1
    Else
    ExitLoop
    EndIf
    Next
    If StringLeft($sLen, 1) = '-' Then
    $aLen = StringSplit(StringTrimLeft($sLen, 1), ',', 2)
    ReDim $aLen[$index+1]
    For $i = 1 To $index
    $aLen[$i] = $aLen[0]
    Next
    Else
    $aLen = StringSplit($sLen, ',', 2)
    If UBound($aLen) < $index Then Return SetError(1,0,0)
    EndIf
    For $i = 0 To $index
    If $iAlign = 0 Then
    If $i = $index Then ExitLoop
    $sOut &= StringLeft($aVar[$i] & $sFill, $aLen[$i])
    Else
    $sOut &= StringRight($sFill & $aVar[$i], $aLen[$i])
    EndIf
    Next
    If $iAlign = 0 Then $sOut &= $aVar[$index]
    Return $sOut
    EndFunc ;==>_LenGroupedOutput

    [/autoit]

    Dateien

    _LenGroupedOutput[0.1].au3 2,35 kB – 276 Downloads
  • Aktuelle Warnung vor Pfishing Mail Attacken

    • BugFix
    • 1. Oktober 2011 um 10:43
    Zitat von Cheater Dieter

    Bei vielen Regestrierungen verwende ich meist so was.


    So schön Wegwerf-Mail-Accounts sind: Inzwischen weisen (gefühlte) 99% aller Foren etc. Registrierungsversuche mit TrashMail ab.

  • Formatierung Zahlenwerte

    • BugFix
    • 1. Oktober 2011 um 10:39

    Ich hatte noch nicht alle Eventualitäten berücksichtigt - aber nach einmal drüber Schlafen ist nun alles im Lot.

  • Formatierung Zahlenwerte

    • BugFix
    • 1. Oktober 2011 um 01:28
    Zitat von progandy

    Wenn du StringFormat noch durch normale Stringfunktionen und Round ersetzt


    Habe ich gleich mal aufgegriffen und umgesetzt. Viel Spaß damit. ;)

  • Formatierung Zahlenwerte

    • BugFix
    • 30. September 2011 um 22:46

    Ich dachte eigentlich, dass ich vor 4..5 Jahren schonmal solch eine Funktion erstellt habe - finde sie aber nicht mehr.
    Ihr kennt ja sicher die sehr mächtige Funktion StringFormat. Und somit wißt ihr auch, wie schwer man sich diese Syntax merken kann. ;)
    In der Mehrzahl der Fälle brauche ich es um Zahlenwerte mit Vornullen oder fester Nachkommastellenlänge auszugeben. Und jedes mal grübele ich aufs Neue, wie die Syntax ist.
    Deshalb nun diese Funktion mit einer simpleren Syntax. Vielleicht auch eine Hilfe für andere. :D

    Spoiler anzeigen
    [autoit]

    ConsoleWrite( _FormatNumber('N5', '1243')& @CRLF) ; == Ganzzahl, 5-stellig (min) (Auffüllen mit Vornullen)
    ConsoleWrite( _FormatNumber('n5', '1243')& @CRLF) ; == Ganzzahl, 5-stellig (min) (Auffüllen mit Leerzeichen)
    ConsoleWrite( _FormatNumber('N5.2', '1243.5')& @CRLF) ; == Float, 5 Vorkommastellen (min) (Auffüllen mit Vornullen), 2 Nachkommastellen (Ergänzen mit Nullen)
    ConsoleWrite( _FormatNumber('n.3', '1243.56')& @CRLF) ; == Float, Vorkomma wie übergeben, 3 Nachkommastellen (Ergänzen mit Nullen bzw. Runden auf Anzahl NK)

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

    ;===============================================================================
    ; Function Name....: _FormatNumber
    ; Description......: Formatierung von Zahlenwerten (mit und ohne Vorzeichen, Integer od. Float)
    ; Parameter(s).....: $sMask Maske zum Bestimmen des Ausgabestrings
    ; N3 Ganzzahl min. 3 Stellen, Auffüllen mit Vornullen
    ; n3 Ganzzahl min. 3 Stellen, Auffüllen mit Leerzeichen
    ; N3.2 Float min. 3 Vorkommastellen (Auffüllen mit Vornullen), min. 2 Nachkommastellen (Ergänzen mit Nullen)
    ; n.3 Float, Vorkommastellen wie übergeben, 3 Nachkommastellen (Ergänzen mit Nullen bzw. Runden auf Anzahl NK)
    ; $sString der zu formatierende Zahlenwert
    ; Note.............: Bei negativen Zahlenwerten wird das Vorzeichen mit zur Anzahl der Vorkomma/Stellen eingerechnet
    ; Return Value(s)..: der formatierte Zahlenwert
    ; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
    ;===============================================================================
    Func _FormatNumber($sMask, $sString)
    Local $sType = StringLeft($sMask, 1)
    Local $preZero = StringIsUpper($sType)
    $sMask = StringTrimLeft($sMask, 1)
    $sMask = StringSplit($sMask, '.', 2)
    If UBound($sMask) = 1 Then
    If $preZero Then
    Return StringFormat('%0' & $sMask[0] & 'd', $sString)
    Else
    Return StringFormat('%' & $sMask[0] & 'd', $sString)
    EndIf
    Else
    If $preZero Then
    Return StringFormat('%0' & $sMask[0] + $sMask[1] +1 & '.' & $sMask[1] & 'f', $sString)
    Else
    Return StringFormat('%' & StringInStr($sString, '.') + $sMask[1] & '.' & $sMask[1] & 'f', $sString)
    EndIf
    EndIf
    EndFunc ;==>_FormatNumber

    [/autoit]

    Und hier mal die Umsetzung mit progandys Anregung:

    Oops - da fällt mir auf: Bei negativen Zahlen stimmt die Anordnung des Vorzeichens noch nicht. :D
    Ändere ich gleich noch.
    Jetzt passt es.

    Edit 01.10.20011
    Heut Nacht fiel mir plötzlich ein: Was ist eigentlich mit Übergabe Float zur Ganzzahlformatierung und umgekehrt. Hatte ich noch nicht berücksichtigt.
    Jetzt noch mal überarbeitet die wohl alles berücksichtigende Funktion:

    _FormatNumber(v0.1)
    [autoit]

    Local $aNumbers[6] = [123, 123.456, -123, -123.856, 0.5, -0.5]
    Local $aMasks[8] = ['N2', 'n2', 'N5', 'n5', 'N2.2', 'n.2', 'N5.2', 'n.3']
    Local $sFill = '..........'

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

    For $i = 0 To 5
    For $j = 0 To 7
    ConsoleWrite('> ' & StringLeft($aNumbers[$i] & $sFill, 10) & StringLeft($aMasks[$j] & $sFill, 8) & _FormatNumber($aMasks[$j], $aNumbers[$i]) & @CRLF)
    Next
    Next

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

    ;===============================================================================
    ; Function Name....: _FormatNumber
    ; Description......: Formatierung von Zahlenwerten (mit und ohne Vorzeichen, Integer od. Float)
    ; Parameter(s).....: $sMask Maske zum Bestimmen des Ausgabestrings
    ; N3 Ganzzahl min. 3 Stellen, Auffüllen mit Vornullen
    ; n3 Ganzzahl min. 3 Stellen, Auffüllen mit Leerzeichen
    ; N3.2 Float min. 3 Vorkommastellen (Auffüllen mit Vornullen), min. 2 Nachkommastellen (Ergänzen mit Nullen)
    ; n.3 Float, Vorkommastellen wie übergeben, 3 Nachkommastellen (Ergänzen mit Nullen bzw. Runden auf Anzahl NK)
    ; $sString der zu formatierende Zahlenwert
    ; Note.............: Bei negativen Zahlenwerten wird das Vorzeichen mit zur Anzahl der Vorkomma/Stellen eingerechnet
    ; Return Value(s)..: der formatierte Zahlenwert
    ; Author(s)........: BugFix ( [email='bugfix@autoit.de'][/email] )
    ;===============================================================================
    Func _FormatNumber($sMask, $sString)
    Local $aFill[2] = [' ','0000000000000000000'], $sLen
    Local $preZero = StringIsUpper(StringLeft($sMask, 1)), $fFloat = 0, $fNegative = 0
    If $sString < 0 Then $fNegative = 1
    Local $aVal = StringSplit($sString, '.', 2)
    If @error Then
    ReDim $aVal[2]
    Else
    $fFloat = 1
    EndIf
    $sMask = StringTrimLeft($sMask, 1)
    $sMask = StringSplit($sMask, '.', 2)
    $sLen = StringLen($aVal[0])
    If UBound($sMask) = 1 Then
    If $sLen >= $sMask[0] Then
    If $fFloat Then Return Round($sString)
    Return $sString
    Else
    If $fFloat Then $sString = Round($sString)
    If $fNegative Then Return '-' & StringReplace(StringLeft($aFill[$preZero], $sMask[0] - $sLen) & $sString, '-', '', 1)
    Return StringLeft($aFill[$preZero], $sMask[0] - $sLen) & $sString
    EndIf
    Else
    If $preZero And ($sLen < $sMask[0]) Then $aVal[0] = StringLeft($aFill[1], $sMask[0] - $sLen) & $aVal[0]
    If $fFloat Then
    $aVal[1] = Round('0.' & $aVal[1], $sMask[1])
    $aVal[1] &= StringLeft($aFill[1], $sMask[1] - (StringLen($aVal[1]) -2))
    If $fNegative Then Return '-' & StringReplace($aVal[0] & '.' & StringTrimLeft($aVal[1], 2), '-', '', 1)
    Return $aVal[0] & '.' & StringTrimLeft($aVal[1], 2)
    Else
    If $fNegative Then Return '-' & StringReplace($aVal[0] & '.' & StringLeft($aFill[1], $sMask[1]), '-', '', 1)
    Return $aVal[0] & '.' & StringLeft($aFill[1], $sMask[1])
    EndIf
    EndIf
    EndFunc ;==>_FormatNumber

    [/autoit]

    Dateien

    _FormatNumber[0.1].au3 2,67 kB – 380 Downloads
  • Skript per cmd aufrufen und ins offene cmd Fenster zurückschreiben

    • BugFix
    • 30. September 2011 um 11:35

    Wenn du in der Schleife einen festen Endwert (Ubound) definierst, kannst du sie nicht mehr dynamisch ändern.
    Du mußt die Ubound-Prüfung in den Schleifenkopf setzen - dann wird bei jedem Durchlauf geprüft und somit kannst du innerhalb der Schleife das Array verkleinern/vergrößern und trotzdem alle Elemente durchlaufen.
    so z.B.

    [autoit]

    For $i = 0 To UBound($Array) -1

    [/autoit]

    Btw: Umlaute in Variablennamen sind nicht möglich. ;)

  • Prüfen pb Inputbox mit Inhalt gefüllt ist und zusammenrechnen

    • BugFix
    • 30. September 2011 um 11:27

    Ah, da fehlt wohl noch das: #include <WindowsConstants.au3>
    Installiere dir mal gleich die OrganizeIncludes von Xeno (Link links neben der ShoutBox), damit geht das Includieren schön automatisch.

    Was passiert mit $WM_COMMAND?
    Nun, das ist eine Windows-Nachricht, die ausgewertet wird. Dazu wird sie zuerst mit GUIRegisterMsg für die GUI registriert und verweist hier auf die Auswertefunktion "WM_COMMAND".
    In dieser Funktion wird abgefragt von welchem Input die Nachricht $EN_CHANGE (Änderung des Inhalts) gesendet wird. Da 7 Inputs ausgewertet werden habe ich diese in ein Array gepackt - bzw. die Handle der Inputs, da diese in der Funktion verwendet werden - und prüfe in einer Schleife von welchem Input die Änderung kommt, lese den neuen Inhalt und schreibe ihn in die zweite Spalte des Arrays. Anschließend wird die Rechenfunktion aufgerufen, die mit den im Array gespeicherten Werten das Ergebnis erstellt und sofort anzeigt.
    Das passiert bei jeder Änderung und somit hast du eine "automatische" Berechnung.

    Versuche es mal für die anderen Berechnungen nachzuvollziehen, sieht schwerer aus, als es ist.

  • Aktuelle Warnung vor Pfishing Mail Attacken

    • BugFix
    • 30. September 2011 um 11:16

    Beste Lösung: Ich bin restriktiv! :D - Kenn ich einen Mailabsender nicht, wird die Mail ungelesen gelöscht. Wobei die Vorarbeit schon mein Provider macht und den meisten Müll in den Spambereich verschiebt. Da bekomm ich täglich eine Mail mit den Spam-Headern, kurzer Blick drauf, ob sich was drauf verirrt hat und erledigt. Somit ist mein Mailfach weitestgehend leer. :thumbup:

  • Skript per cmd aufrufen und ins offene cmd Fenster zurückschreiben

    • BugFix
    • 30. September 2011 um 11:08

    So erhältst du alle gemounteten Laufwerke:

    [autoit]

    #include <Array.au3>

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

    $wbemFlagReturnImmediately = 0x10
    $wbemFlagForwardOnly = 0x20
    $colItems = ""
    $strComputer = "localhost"

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

    $Output=""
    $Output = $Output & "Computer: " & $strComputer & @CRLF
    $Output = $Output & "==========================================" & @CRLF
    $objWMIService = ObjGet("winmgmts:\\" & $strComputer & "\root\CIMV2")
    $colItems = $objWMIService.ExecQuery("SELECT * FROM Win32_LogicalDisk", "WQL", _
    $wbemFlagReturnImmediately + $wbemFlagForwardOnly)

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

    If IsObj($colItems) then
    Local $aOut[1][2]
    For $objItem In $colItems
    If $aOut[UBound($aOut)-1][0] <> '' Then ReDim $aOut[UBound($aOut)+1][2]
    $aOut[UBound($aOut)-1][0] = $objItem.DeviceID
    $aOut[UBound($aOut)-1][1] = $objItem.Description
    Next
    Else
    Msgbox(0,"WMI Output","No WMI Objects Found for class: " & "Win32_LogicalDisk" )
    Endif
    _ArrayDisplay($aOut )

    [/autoit]
  • Prüfen pb Inputbox mit Inhalt gefüllt ist und zusammenrechnen

    • BugFix
    • 30. September 2011 um 10:49

    Hi,
    ein nettes Gimmick ist immer, wenn die Berechnung "von allein" erfolgt. Das heißt, bereits während der Eingabe werden die Ergebnisse berechnet und ausgegeben.
    Ich hab dir das mal für die erste Berechnung (Ware) erstellt. Kannst dich ja dann dran versuchen, dass auch für die anderen Berechnungen zu komplettieren. ;)
    Btw: Du meinst doch sicher Marge, oder?

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>
    #include <EditConstants.au3>

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

    #Region ### START Koda GUI section ### Form=c:\program files (x86)\autoit3\koda\forms\rechner.kxf
    $Form1_1 = GUICreate("Angebotsrechner", 658, 625, 237, 137)
    $Group1 = GUICtrlCreateGroup("Wareneinkauf", 8, 16, 537, 161)
    $HEK = GUICtrlCreateLabel("Händler EK", 40, 48, 58, 17)
    $VERSI = GUICtrlCreateLabel("Versicherung", 296, 48, 66, 17)
    $UMW = GUICtrlCreateLabel("Umweltpauschale", 40, 80, 88, 17)
    $VERSA = GUICtrlCreateLabel("Versandkosten", 296, 80, 75, 17)
    $SK = GUICtrlCreateLabel("Sonstige Kosten", 40, 112, 81, 17)
    $MWST = GUICtrlCreateLabel("MwSt. %", 296, 112, 45, 17)
    $MAGE = GUICtrlCreateLabel("Mage %", 40, 144, 42, 17)
    $VK = GUICtrlCreateLabel("Verkaufspreis", 296, 144, 68, 17)
    $HEK_IN = GUICtrlCreateInput("", 192, 48, 65, 21)
    $UMW_IN = GUICtrlCreateInput("", 192, 80, 65, 21)
    $SK_IN = GUICtrlCreateInput("", 192, 112, 65, 21)
    $MAGE_IN = GUICtrlCreateInput("", 192, 144, 65, 21)
    $VERSI_IN = GUICtrlCreateInput("", 448, 48, 65, 21)
    $VERSA_IN = GUICtrlCreateInput("", 448, 80, 65, 21)
    $VK_OUT = GUICtrlCreateLabel("€", 448, 144, 66, 17)
    $MWST_IN = GUICtrlCreateInput("", 448, 112, 65, 21)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup("Stundenansatz", 8, 192, 537, 129)
    $SS_P = GUICtrlCreateLabel("Stundensatz Privatkunde", 40, 224, 123, 17)
    $SS_G = GUICtrlCreateLabel("Stundensatz Geschäftskunde", 40, 256, 144, 17)
    $GES_H_GEPL = GUICtrlCreateLabel("Geplante Gesamtstundenzahl", 296, 224, 143, 17)
    $SUMME_H = GUICtrlCreateLabel("Summe Stunden", 40, 288, 82, 17)
    $SS_P_IN = GUICtrlCreateInput("", 192, 224, 65, 21)
    $SS_GK_IN = GUICtrlCreateInput("", 192, 256, 65, 21)
    $S_GE = GUICtrlCreateInput("", 448, 224, 65, 21)
    $STUNDENSUMME = GUICtrlCreateLabel("€", 448, 288, 66, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group3 = GUICtrlCreateGroup("Anfahrtskosten", 8, 336, 537, 129)
    $Label11 = GUICtrlCreateLabel("Kilometerpauschale", 40, 368, 96, 17)
    $Label12 = GUICtrlCreateLabel("Anfahrtskilometer", 40, 400, 85, 17)
    $GEP_ANZ_ANF = GUICtrlCreateLabel("Geplante Anzahl Anfahrten", 296, 368, 131, 17)
    $Label14 = GUICtrlCreateLabel("Summe Anfahrten / Kilometer", 40, 432, 142, 17)
    $KILO_P = GUICtrlCreateInput("", 192, 368, 65, 21)
    $KILO_AN = GUICtrlCreateInput("", 192, 400, 65, 21)
    $ANZ_FAHR = GUICtrlCreateInput("", 448, 368, 65, 21)
    $H_Gesamt = GUICtrlCreateLabel("€", 448, 432, 66, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $UEBERN_WARE = GUICtrlCreateButton("Übernahme", 562, 136, 75, 25, 0)
    ;~ $ERRECHNEN_WARE = GUICtrlCreateButton("Errechnen", 562, 88, 75, 25, 0)
    $LEEREN_WARE = GUICtrlCreateButton("Leeren", 562, 40, 75, 25, 0)
    $UEBERNAHME_STUNDEN = GUICtrlCreateButton("Übernahme", 562, 286, 75, 25, 0)
    $ERRECHNEN_STUNDEN = GUICtrlCreateButton("Errechnen", 562, 246, 75, 25, 0)
    $LEEREN_STUNDEN = GUICtrlCreateButton("Leeren", 562, 206, 75, 25, 0)
    $UEBERNAHME_ANFAHRT = GUICtrlCreateButton("Übernahme", 562, 434, 75, 25, 0)
    $ERRECHNEN_ANFAHRT = GUICtrlCreateButton("Errechnen", 562, 394, 75, 25, 0)
    $LEEREN_ANFAHRT = GUICtrlCreateButton("Leeren", 562, 354, 75, 25, 0)
    $Group4 = GUICtrlCreateGroup("Gesamtkostenaufstellung", 8, 480, 537, 129)
    $Label5 = GUICtrlCreateLabel("Ware", 40, 512, 30, 17)
    $Label6 = GUICtrlCreateLabel("Stunden", 40, 544, 44, 17)
    $Label7 = GUICtrlCreateLabel("Anfahrten", 40, 576, 50, 17)
    $Label8 = GUICtrlCreateLabel("Gesamtkosten", 296, 512, 72, 17)
    $GES_KOSTEN_OUT = GUICtrlCreateLabel("€", 448, 512, 66, 17)
    $WARE_OUT = GUICtrlCreateLabel("€", 192, 512, 74, 17)
    $STUNDEN_OUT = GUICtrlCreateLabel("€", 192, 544, 74, 17)
    $ANFAHRTEN_OUT = GUICtrlCreateLabel("€", 192, 576, 74, 17)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $ERRECHNEN_GESAMT = GUICtrlCreateButton("Errechnen", 562, 530, 75, 25, 0)

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

    Global $aWARE[8][2] = [[0], _
    [GUICtrlGetHandle($HEK_IN)],[GUICtrlGetHandle($UMW_IN)],[GUICtrlGetHandle($SK_IN)],[GUICtrlGetHandle($MAGE_IN)], _
    [GUICtrlGetHandle($VERSI_IN)],[GUICtrlGetHandle($VERSA_IN)],[GUICtrlGetHandle($MWST_IN)]]

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

    GUISetState(@SW_SHOW)

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

    GUIRegisterMsg($WM_COMMAND, 'WM_COMMAND')

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

    #EndRegion ### END Koda GUI section ###
    Global $Var_WARE
    Global $Var_STUNDEN
    Global $Var_KM

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit

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

    Case $UEBERN_WARE
    GUICtrlSetData($WARE_OUT, $aWARE[0][0] & ' €')

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

    Case $ERRECHNEN_STUNDEN
    If GUICtrlRead($SS_P_IN) <> '' ANd GUICtrlRead($SS_GK_IN) <> '' Then
    MsgBox(0, '', 'Bist Du verwirrt?')
    GUICtrlSetData($SS_GK_IN, '')
    GUICtrlSetData($SS_P_IN, '')
    ContinueCase
    EndIf
    If GUICtrlRead($SS_GK_IN) <> '' Then GUICtrlSetData($STUNDENSUMME, GUICtrlRead($SS_GK_IN)* GUICtrlRead($S_GE) & ' €')
    If GUICtrlRead($SS_P_IN) <> '' Then GUICtrlSetData($STUNDENSUMME, GUICtrlRead($SS_P_IN)* GUICtrlRead($S_GE) & ' €')

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

    Case $UEBERNAHME_STUNDEN
    If GUICtrlRead($SS_P_IN) <> '' ANd GUICtrlRead($SS_GK_IN) <> '' Then
    MsgBox(0, '', 'Bist Du verwirrt?')
    GUICtrlSetData($SS_GK_IN, '')
    GUICtrlSetData($SS_P_IN, '')
    ContinueCase
    EndIf
    If GUICtrlRead($SS_GK_IN) <> '' Then GUICtrlSetData($STUNDEN_OUT, GUICtrlRead($SS_GK_IN)* GUICtrlRead($S_GE) & ' €')
    If GUICtrlRead($SS_P_IN) <> '' Then GUICtrlSetData($STUNDEN_OUT, GUICtrlRead($SS_P_IN)* GUICtrlRead($S_GE) & ' €')

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

    EndSwitch
    WEnd

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

    Func WM_COMMAND($hWnd, $iMsg, $iwParam, $ilParam)
    Local $hWndFrom, $iIDFrom, $iCode
    $hWndFrom = $ilParam
    $iIDFrom = BitAND($iwParam, 0xFFFF) ; Low Word
    $iCode = BitShift($iwParam, 16) ; Hi Word
    Switch $iCode
    Case $EN_CHANGE
    For $i = 1 To 7
    If $hWndFrom = $aWARE[$i][0] Then $aWARE[$i][1] = StringStripWS(GUICtrlRead($iIDFrom), 8)
    Next
    GUICtrlSetData($VK_OUT, _CalculateWare() & ' €')
    EndSwitch
    Return $GUI_RUNDEFMSG
    EndFunc ;==>WM_COMMAND

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

    Func _CalculateWare()
    Local $a = $aWARE[1][1] + $aWARE[2][1] + $aWARE[3][1] + $aWARE[5][1] + $aWARE[6][1]
    Local $b = $a / 100 * $aWARE[4][1]
    Local $c = $a / 100 * $aWARE[7][1]
    $aWARE[0][0] = $a + $b + $c
    Return $aWARE[0][0]
    EndFunc

    [/autoit]
  • 'Fenster' - Auflistung in Menüleiste

    • BugFix
    • 29. September 2011 um 19:41

    Aus dem Skript-Bsp. habe ich jetzt eine UDF erstellt. s. Post #1
    Aber.. noch ein kleines Problem:
    Ohne erkennbaren Grund friert manchmal beim Schließen von registrierten Fenstern oder beim Fokuswechsel zwischen diesen das Skript ein. Ich konnte bisher die Ursache nicht ausmachen - vielleicht hat jemand von euch den zündenden Gedanken.

  • Hilfe bein Löschen von Windows.edb

    • BugFix
    • 29. September 2011 um 14:14

    Mal ganz ketzerisch: Muß ja was faul sein, wenn der Index-Dienst euer System lahm legt. Das Herumdoktorn an den Symptomen hilft zwar temporär, ist aber auch nicht optimal. Deaktiviere doch den Indexdienst. Dann teste, ob du überhaupt merkst, dass er nicht läuft. Bisher war dieser Dienst eher eine Bremse als ein Vorteil.

  • UDF-Portal?

    • BugFix
    • 28. September 2011 um 19:55

    Die Motivation das Werk dann auch zu verwalten, war für mich der Anlaß einen Thread mit Links zu meinen Werken zu erstellen. Hat den Vorteil, dass ich auch schnell selbst meine Skripte finde. Und das ist ausreichend Motivation. ;)
    Eine zentrale Verwaltung, sicher schön - aber ich glaub nicht wirklich dran, dass das gepflegt wird.

  • 'Ersatz'-Signatur

    • BugFix
    • 28. September 2011 um 12:52

    Aktualisiert, sortiert und besser lesbar formatiert. s. Post #1

  • Kleinere Autoit EXE´N mitliefern

    • BugFix
    • 28. September 2011 um 09:10

    Also ich habe mir das Skript nicht angesehen (Mache ich nie, wenn ich dazu erst was herunterladen muss! - Wozu kann man Code hier im Spoiler darstellen?!), aber der mehr als wagen Erklärung nach vermute ich Folgendes:
    Jede zur Exe kompilierte au3 besteht aus Interpreter+Code. Um nicht in jeder Exe erneut den Interpreter einzubinden, wird er nur einmal verwendet und die Einzelskripte werden kaskadiert angehängt. Es werden also nicht, wie suggeriert, tatsächlich kleinere Exe'n erstellt, sondern die Exe'n werden als Einzeldatei nicht mehr ausführbar und müssen in der 'Sammlung mit Interpreter' integriert sein. Kein wirklicher Vorteil, wie ich meine.

    Oder interpretiere ich das jetzt falsch?

    Eine detaillierte Beschreibung von Funktionen ist immer noch der beste Weg um Irritationen zu vermeiden. ;) Und wenn 3 Leute "..äh Bahnhof?" schreien, kannst du sicher sein, dass es mit der Beschreibung nicht weit her ist.

  • bedingung in einer gui

    • BugFix
    • 26. September 2011 um 21:56

    Freut uns - und jetzt noch im ersten Post den Präfix auf "gelöst" setzen: Dann sind auch wir glücklich. ;)

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™