Ich vermute du lädst du die Datei rauf? Dazu gibt es schon entsprechende Skripts (ich glaube von Xeno), wie du die Größe beim Upload ermitteln kannst. Mußt mal suchen.
Beiträge von BugFix
-
-
Hier findest du die Codes:
Hilfe AutoIt ==> Appendix ==> Windows Message CodesNäheres über die Anwendung kannst du mit dem jeweiligen Code ergoogeln, oder bei MSDN nachschauen.
-
Hi,
da ich für meine Oberflächen auf Arbeit viel mit Datumsfeldern arbeite, habe ich mir jetzt mal eigene Datum-Inputs erstellt.
Der Nachteil beim GUICtrlCreateDate ist, dass man bei der Eingabe immer in einer der 3 Gruppen (TT, MM od. JJJJ) hängt und nicht fortlaufend schreiben kann.
Da ich den Date-Picker sowieso nie benutze, ist mir ein vorformatiertes Input lieber. Die Eingaben werden während des Schreibens auf Richtigkeit geprüft. Bei Eingabe eines falschen Wertes wird die Anzeige auf den Stand vor der Eingabe zurückgesetzt. Rein optisch bleibt der Cursor stehen. Beim Verlassen des Inputs wird nochmals validiert (falls unvollständige Eingabe). Liegt ein Fehler vor, bleibt der Fokus auf dem Input. Man kann das Input nur bei korrektem oder wieder gelöschtem Datum verlassen.
Überprüft wird der Datumszeitraum von 01.01.1900 bis 31.12.2999 (Da das Pattern bis 2099 unwesentlich kürzer als bis 2999 ist, habe ich den gesamten Zeitraum verwendet.). Löschen ist nicht mit Backspace möglich, sondern über: Markieren - Entfernen.
Zur Verwendung:
Die Inputs, wie im Bsp. erstellen und deren ID's im $arDateInput der Funktion MY_WM_COMMAND() hinterlegen.
Geschrieben werden kann nur, wenn ein Bereich markiert ist (also überschreibbar). Das ist gewollt, da immer der noch nicht geschriebene Teil des Datums markiert wird. Deshalb am Besten per TAB zu den Inputs bewegen, dann ist sofort alles markiert.Edit: Oops, da hatte ich einen Fehler in die Validierungsfunktion reinkopiert... Ist nun behoben.
Spoiler anzeigen
[autoit]#include <Editconstants.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstants.au3>
#include <WindowsConstants.au3>
Global $GUI, $Input1, $Input2, $Input3, $Input4
$GUI = GUICreate('TEST')
$Input1 = GUICtrlCreateInput("__.__.____", 20, 50, 62, 21, $ES_NUMBER)
$Input2 = GUICtrlCreateInput("__.__.____", 20, 80, 62, 21, $ES_NUMBER)
$Input3 = GUICtrlCreateInput("__.__.____", 20, 110, 62, 21, $ES_NUMBER)
$Input4 = GUICtrlCreateInput("__.__.____", 20, 140, 62, 21, $ES_NUMBER)
GUISetState()
GUIRegisterMsg($WM_COMMAND, 'MY_WM_COMMAND')While 1
[/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]
$msg = GUIGetMsg()
Switch $msg
Case $GUI_EVENT_CLOSE
Exit
Case Else
; ...
EndSwitch
WEndFunc MY_WM_COMMAND($hWnd, $Msg, $wParam, $lParam)
[/autoit] [autoit][/autoit] [autoit]
Local $nNotifyCode = BitShift($wParam, 16)
Local $hCtrl = $lParam
Local $arDateInput[4] = [$Input1,$Input2,$Input3,$Input4] ; Array mit den ID der zu prüfenden Inputs
If $nNotifyCode = 1024 Then
For $i = 0 To UBound($arDateInput) -1
If $hCtrl = GUICtrlGetHandle($arDateInput[$i]) Then
_CheckDateInput($hWnd, $arDateInput[$i])
ExitLoop
EndIf
Next
ElseIf $nNotifyCode = 512 Then
For $i = 0 To UBound($arDateInput) -1
If $hCtrl = GUICtrlGetHandle($arDateInput[$i]) Then
_CheckByFocusLost($hWnd, $arDateInput[$i])
ExitLoop
EndIf
Next
EndIf
Return $GUI_RUNDEFMSG
EndFuncFunc _CheckDateInput($hWnd, $ID)
[/autoit] [autoit][/autoit] [autoit]
Local $current = StringReplace(GUICtrlRead($ID),'.',''), $str = '__.__.____'
Local $num = StringRegExp($current, '\d', 3)
If @error Then Return GUICtrlSetData($ID, $str)
Local $ub = UBound($num)
Local $arPattern[8] = [ _
"[0-3]", "(0[1-9]|[12][0-9]|3[01])", "(0[1-9]|[12][0-9]|3[01])[0-1]", _
"(((0[1-9]|[12][0-9])02)|((0[1-9]|[12][0-9]|30)(0[469]|11))|(0[1-9]|[12][0-9]|3[01])(0[13578]|1[02]))", _
"(((0[1-9]|[12][0-9])02)|((0[1-9]|[12][0-9]|30)(0[469]|11))|(0[1-9]|[12][0-9]|3[01])(0[13578]|1[02]))[12]", _
"(((0[1-9]|[12][0-9])02)|((0[1-9]|[12][0-9]|30)(0[469]|11))|(0[1-9]|[12][0-9]|3[01])(0[13578]|1[02]))[12][09]", _
"(((0[1-9]|[12][0-9])02)|((0[1-9]|[12][0-9]|30)(0[469]|11))|(0[1-9]|[12][0-9]|3[01])(0[13578]|1[02]))[12][09]\d", _
"((((0[1-9]|1[0-9]|2[0-8])02)|((0[1-9]|[12][0-9]|30)(0[469]|11))|(0[1-9]|[12][0-9]|3[01])(0[13578]|1[02]))" & _
"((19|2[0-9])([02468][1235679]|[13579][01345789])|(19|2[1235679])00))|((((0[1-9]|1[0-9]|2[0-9])02)|((0[1-9]|[12][0-9]|30)" & _
"(0[469]|11))|(0[1-9]|[12][0-9]|3[01])(0[13578]|1[02]))((19|2[0-9])(04|08|[2468][048]|[13579][26])|(20|24|28)00))"]
If Not StringRegExp($current, $arPattern[$ub-1]) Then $ub -= 1
Switch $ub
Case 0
GUICtrlSetData($ID, $str)
Case 1
GUICtrlSetData($ID, $num[0] & StringRight($str, 9))
Case 2
GUICtrlSetData($ID, $num[0] & $num[1] & StringRight($str, 8))
Case 3
GUICtrlSetData($ID, $num[0] & $num[1] & '.' & $num[2] & StringRight($str, 6))
$ub += 1
Case 4
GUICtrlSetData($ID, $num[0] & $num[1] & '.' & $num[2] & $num[3] & StringRight($str, 5))
$ub += 1
Case 5 to 8
Local $sYear = ''
For $i = 4 To $ub -1
$sYear &= $num[$i]
Next
GUICtrlSetData($ID, $num[0] & $num[1] & '.' & $num[2] & $num[3] & '.' & $sYear & StringRight($str, 8 -$ub))
$ub += 2
EndSwitch
ControlSend($hWnd, '', $ID, '{END}{SHIFTDOWN}{HOME}{RIGHT ' & $ub & '}{SHIFTUP}')
EndFuncFunc _CheckByFocusLost($hWnd, $ID)
[/autoit]
If StringLen(StringReplace(StringReplace(GUICtrlRead($ID),'.',''),'_','')) = 0 Then Return
If Not StringRegExp(StringReplace(StringReplace(GUICtrlRead($ID),'.',''),'_',''), "((((0[1-9]|1[0-9]|2[0-8])02)|((0[1-9]|[12][0-9]|30)(0[469]|11))|(0[1-9]|[12][0-9]|3[01])(0[13578]|1[02]))" & _
"((19|2[0-9])([02468][1235679]|[13579][01345789])|(19|2[1235679])00))|((((0[1-9]|1[0-9]|2[0-9])02)|((0[1-9]|[12][0-9]|30)" & _
"(0[469]|11))|(0[1-9]|[12][0-9]|3[01])(0[13578]|1[02]))((19|2[0-9])(04|08|[2468][048]|[13579][26])|(20|24|28)00))") Then _
ControlFocus($hWnd, '', $ID)
EndFunc -
Hab das in Python angefangen, da Auoit dafür nicht geignet ist.
Hab zwar keine Phyton-Kenntnisse - aber das was ich im Code gelesen hab, scheint mir ohne weiteres auch in AutoIt realisierbar.
Woraus schließt du, das AutoIt dafür ungeeignet ist? -
Dann mach es so:
[autoit]#include<array.au3>
[/autoit]
$string = '<td style="vertical-align: top;"><font size="-1">NAME,VORNAME<br>'
$ret = StringRegExp($string, '(?<="-1"\>).*(?=\<br\>)', 1)
_ArrayDisplay($ret) -
_FileSelectFolder()
-
Das ist kein Problem mit den UDF der GuiComboBoxEx.au3.
Du erstellst eine Imagelist mit den Farben und weist den Einträgen die entsprechenden Images zu.
Schau dir mal die Bsp. dort an. -
"Local" in Zeile 19 kannst du löschen, ich hatte es vergessen als ich die Deklarationen an den Anfang verschoben hab

Um alle Unterordner ab Pfad zu durchsuchen, mußt du dir eine rekursive Filelist erstellen. Nutze mal die SuFu - dazu hab u. a. ich eine UDF erstellt.
-
Wenn du per Button die GUI_2 aufrufst, kannst du doch als erstes eine Prüffunktion für Inhalte der Inputs durchführen. Nur wenn die OK gibt, zeigst du GUI_2, sonst brichst du ab und bleibst somit auf GUI_1.
-
Um einen Wert zu switchen, bietet sich BitXOr() an:
[autoit]Local $val = 0
[/autoit][autoit][/autoit][autoit]ConsoleWrite(_switch($val) & @CRLF)
[/autoit][autoit][/autoit][autoit]
ConsoleWrite(_switch($val) & @CRLF)
ConsoleWrite(_switch($val) & @CRLF)Func _switch(ByRef $VAR)
[/autoit]
$VAR = BitXOR($VAR, 1)
Return $VAR
EndFunc -
Stimmt, mit FileSelectFolder() läßt sich nur ein Ordner wählen.
[autoit]
Aber wenn du mehrere möchtest, kannst du den Dialog ja in einer Schleife aufrufen und erst mit Abbruch ohne Auswahl wird diese beendet:Local $arFolder[100], $i = 0, $path = @MyDocumentsDir
[/autoit]
While True
$arFolder[$i] = FileSelectFolder("Ordner auswählen", $path)
If @error Then ExitLoop
$i += 1
WEnd
ReDim $arFolder[$i+1] -
Was soll dieses Array NewFile nützen??
Spoiler anzeigen
[autoit]#include <file.au3>
[/autoit] [autoit][/autoit] [autoit]
#Include <Array.au3>
#include "_Array2DEmptyDel.au3"Local $folder, $filesinpath, $aFile
[/autoit] [autoit][/autoit] [autoit]
While True
$folder = FileSelectFolder("Ordner auswählen","c:\admin_V8\config\project_config\users\")
If @error Then
If MsgBox(262180,"Achtung!","Es wurde kein Ordner gewählt." & @CRLF & "Soll das Programm beendet werden?") = 6 Then Exit
Else
ExitLoop
EndIf
WEnd$filesinpath = _FileListToArray($folder, "*.ucf", 1)
[/autoit] [autoit][/autoit] [autoit]
If @error Then Exit MsgBox(262192,"Achtung!","Der gewählte Ordner enthält keine Dateien!")
;~ _ArrayDisplay($filesinpath)Local
[/autoit] [autoit][/autoit] [autoit]For $i = 1 To UBound($filesinpath)
[/autoit]
If Not _FileReadToArray( $folder & "\" & $filesinpath[$i], $aFile) Then ContinueLoop
For $k = 1 To UBound($aFile) -1
If StringRegExp($aFile[$k], '(MS_)(MDL(APPS)?|DGNAPPS)') Then $aFile[$k] = ''
Next
_Array2DEmptyDel($aFile)
_FileWriteFromArray($folder & "\clean_" & $filesinpath[$i], $aFile, 1)
; hab hier mal einen anderen Dateinamen verwendet um das Original nicht zu überschreiben
Next -
User wird angenommen (OK)
Passwort aber nicht (authentification failed)Also ist das Passwort falsch, oder wird falsch übermittelt.
-
Ich glaube, du mißverstehst den Sinn des Skript-Forums.
Es geht hier nicht darum kompilierte Dateien zu posten. Hier wird Skriptcode allen zugänglich dargestellt.
Oder gehörst du zu den Menschen, die fremde exe-Files ausführen? :wacko:
Außerdem wäre es ratsam zu erklären, was das Skript den eigentlich vollbringt. -
Hi,
es ist schon alles vorbereitet, du mußt die Teile nur zusammenfügen.Diese Lösung:
[autoit]If StringInStr($aFile[$i],"MS_MDLAPPS") Or StringInStr($aFile[$i],"MS_MDL") Or StringInStr($aFile[$i],"MS_DGNAPPS") Then ContinueLoop
[/autoit]ist nicht zu empfehlen, da sie der gestellten Bedingung nicht entspricht. Es wurde gesagt, dass nur wenn eine Zeile mit den benannten Begriffen beginnt, diese gelöscht werden soll. StringInStr() prüft nur auf Vorkommen irgendwo im String.
[autoit]
Deshalb meine Variante:If StringRegExp($arFile[$i], '(MS_)(MDL(APPS)?|DGNAPPS)') Then $arFile[$i] = ''
[/autoit] -
Und?...warum behebst du den Syntaxfehler nicht? Steht doch glasklar lesbar drin, was der Fehler ist:
Unausgeglichene Klammersetzung! -
Weil wir noch immer hoffen, dass du mal einen kurzen Blick in die Hilfe wirfst
Dort findest du deine Fragen ausgiebig mit Beispiel erläutert. -
Hi,
so gehts in der einzelnen Datei. Du kannst ja alle Dateien vorher in ein Array einlesen und dann hiermit abarbeiten:Spoiler anzeigen
[autoit]#include<array.au3>
[/autoit] [autoit][/autoit] [autoit]
#include<file.au3>;~ Local $arFile, $Path = 'Pfad'
[/autoit] [autoit][/autoit] [autoit]
;~ _FileReadToArray($Path, $arFile)
;~ If Not IsArray($arFile) Then Exit MsgBox(0, '', 'Datei konnte nicht gelesen werden.'); ##### zum Test ######
[/autoit] [autoit][/autoit] [autoit]
Local $arFile[9] = [8, _
'MS_MDLAPPS > C:/Programme/MicroStationV8/Workspace/standards/mdlapps/intelnt/', _
'MS_MDL > D:/prj/25808061/prcfg/mdl/', _
'MS_DGNAPPS > sscloud', _
'MS_MDL = C:/Programme/MicroStationV8/Program/MicroStation/FeatureModeling/features/', _
'MS_DGNAPPS > $(SR_ADMIN)user_config/$(_USTN_USERNAME)/sscloud.ma', _
'bjklllm', _
'khglbhötji', _
'MMMGGG']
; ######################For $i = 1 To UBound($arFile) -1
[/autoit] [autoit][/autoit] [autoit]
If StringRegExp($arFile[$i], '(MS_)(MDL(APPS)?|DGNAPPS)') Then
$arFile[$i] = ''
$arFile[0] -= 1
EndIf
Next
_Array2DEmptyDel($arFile)
_ArrayDisplay($arFile);~ _FileWriteFromArray('Ausgabedatei', $arFile, 1)
[/autoit] [autoit][/autoit] [autoit];----------------------------------------------------------------------------------------------------------------------
[/autoit]
; Function _Array2DEmptyDel(ByRef $avArray [, $Col=0])
;
; Description Delete empty Array elements
; Delete all emty Rows or all empty Columns
; Works also with 1D-Array (only Rows)
;
; Parameter $avArray Given Array
; optional $Col set 1 to delete empty Columns; default is 0 to delete empty Rows
;
; Return Succes 0 ByRef the given Array without empty Elements, resized
; Failure 1 and set @error = 1
;
; Author BugFix ([email='bugfix@autoit.de'][/email])
;----------------------------------------------------------------------------------------------------------------------
Func _Array2DEmptyDel(ByRef $avArray, $Col=0)
If ( Not IsArray($avArray) ) Then Return SetError(1,0,1)
Local $i, $k, $notEmpty
Local $UBound2nd = UBound($avArray,2)
If @error = 2 Then
Local $arTMP[1]
For $i = 0 To UBound($avArray)-1
If StringLen($avArray[$i] > 0) Then
If StringLen($arTMP[UBound($arTMP)-1]) = 0 Then
$arTMP[UBound($arTMP)-1] = $avArray[$i]
Else
ReDim $arTMP[UBound($arTMP)+1]
$arTMP[UBound($arTMP)-1] = $avArray[$i]
EndIf
EndIf
Next
Else
If $Col = 0 Then
Local $arTMP[1][$UBound2nd], $val, $len
For $i = 0 To UBound($avArray)-1
$val = ''
For $k = 0 To $UBound2nd-1
$val &= $avArray[$i][$k]
Next
If StringLen($val) > 0 Then
$len = 0
For $k = 0 To UBound($arTMP,2)-1
$len &= StringLen($arTMP[UBound($arTMP)-1][$k])
Next
If $len = 0 Then
For $k = 0 To $UBound2nd-1
$arTMP[UBound($arTMP)-1][$k] = $avArray[$i][$k]
Next
Else
ReDim $arTMP[UBound($arTMP)+1][$UBound2nd]
For $k = 0 To $UBound2nd-1
$arTMP[UBound($arTMP)-1][$k] = $avArray[$i][$k]
Next
EndIf
EndIf
Next
Else
Local $arTMP[UBound($avArray)][1], $val, $len
For $k = 0 To $UBound2nd-1
$val = ''
$notEmpty = 0
For $i = 0 To UBound($avArray)-1
$val &= $avArray[$i][$k]
If StringLen($val) > 0 Then
$notEmpty = 1
ExitLoop
EndIf
Next
If $notEmpty = 1 Then
$len = 0
For $i = 0 To UBound($arTMP)-1
$len &= StringLen($arTMP[$i][UBound($arTMP,2)-1])
Next
If $len = 0 Then
For $i = 0 To UBound($avArray)-1
$arTMP[$i][0] = $avArray[$i][$k]
Next
Else
ReDim $arTMP[UBound($avArray)][UBound($arTMP,2)+1]
For $i = 0 To UBound($avArray)-1
$arTMP[$i][UBound($arTMP,2)-1] = $avArray[$i][$k]
Next
EndIf
EndIf
Next
EndIf
EndIf
$avArray = $arTMP
Return 0
EndFunc ;==>_Array2DEmptyDel -
So, nach langer Zeit mal wieder was Neues:
_Array2DMinMax()
- Ermittelt den Min- oder Maxwert in einem Array
- Vergleich in einer oder allen Spalten
- Rückgabe Array mit [Wert,Index]Werde es bei Gelegenheit in die Sammlung einfügen.
Spoiler anzeigen
[autoit];==================================================================================================
[/autoit]
; Function Name: _Array2DMinMax(ByRef $ARRAY [, $MAX=0 [, $iCol=0 [, $sDelim=';']]])
; Description:: gibt den minimalen od. maximalen Wert eines 1D/2D-Array zurück
; Überprüfung einer oder aller Spalten
; Parameter(s): $ARRAY das zu prüfende Array
; $MAX 0 = Minwert (Standard); 1 = Maxwert
; $iCol SpaltenIndex 0 = Standard
; -1 = alle Spalten werden geprüft
; $sDelim Trennzeichen f. Indexwerte, Standard ';'
; mit 'Default' Zeichen von Opt('GUIDataSeparatorChar')
; Return Value(s): Erfolg Array[0] = Max/Min-Wert; Array[1] = Index(Zeile [, Spalte])
; Fehler -1 @error = 1 kein Array übergeben
; @error = 2 $iCol überschreitet UBound,2
; Author(s): BugFix ([email='bugfix@autoit.de'][/email])
;==================================================================================================
Func _Array2DMinMax(ByRef $ARRAY, $MAX=0, $iCol=0, $sDelim=';')
If Not IsArray($ARRAY) Then Return SetError(1,0,-1)
Local $Ub2nd = UBound($ARRAY, 2)-1, $arOut[2] = [0]
If $MAX <> 0 Then $MAX = 1
If $sDelim = Default Then $sDelim = Opt('GUIDataSeparatorChar')
If @error Then
For $i = 0 To UBound($ARRAY) -1
If $MAX = 1 Then
If Number($ARRAY[$i]) > $arOut[0] Then
$arOut[0] = Number($ARRAY[$i])
$arOut[1] = $i
EndIf
Else
If $i = 0 Then
$arOut[0] = Number($ARRAY[$i])
$arOut[1] = $i
EndIf
If Number($ARRAY[$i]) < $arOut[0] Then
$arOut[0] = Number($ARRAY[$i])
$arOut[1] = $i
EndIf
EndIf
Next
Else
If $iCol > $Ub2nd Then Return SetError(2,0,-1)
If $iCol < -1 Then $iCol = -1
If $iCol = -1 Then
For $i = 0 To UBound($ARRAY) -1
For $k = 0 To $Ub2nd
If $MAX = 1 Then
If Number($ARRAY[$i][$k]) > $arOut[0] Then
$arOut[0] = Number($ARRAY[$i][$k])
$arOut[1] = $i & $sDelim & $k
EndIf
Else
If $i = 0 Then
$arOut[0] = Number($ARRAY[$i][$k])
$arOut[1] = $i & $sDelim & $k
EndIf
If Number($ARRAY[$i][$k]) < $arOut[0] Then
$arOut[0] = Number($ARRAY[$i][$k])
$arOut[1] = $i & $sDelim & $k
EndIf
EndIf
Next
Next
Else
For $i = 0 To UBound($ARRAY) -1
If $MAX = 1 Then
If Number($ARRAY[$i][$iCol]) > $arOut[0] Then
$arOut[0] = Number($ARRAY[$i][$iCol])
$arOut[1] = $i & $sDelim & $iCol
EndIf
Else
If $i = 0 Then
$arOut[0] = Number($ARRAY[$i][$iCol])
$arOut[1] = $i & $sDelim & $iCol
EndIf
If Number($ARRAY[$i][$iCol]) < $arOut[0] Then
$arOut[0] = Number($ARRAY[$i][$iCol])
$arOut[1] = $i & $sDelim & $iCol
EndIf
EndIf
Next
EndIf
EndIf
Return $arOut
EndFunc ;==>_Array2DMinMax -
Ich habe NIE verstanden was UBound macht...
Gar nicht so schwer, sagt eigentlich der Name schon.
UpperBound - Obergrenze
UBound($Array, 0) = Anzahl der Dimensionen
UBound($Array, 2) = Anzahl Elemente in 2.ter Dimension
UBound($Array, n) = Anzahl Elemente in n.ter Dimension