wenn du mal den gesamten COde posten könntest, oder zumindest die For schleifen, dann wäre es einfacher zu helfen ![]()
Beiträge von TheLuBu
-
-
Auch wenns schon gelöst ist, kannst du dir auch mal mein Wildcard Script aus meiner Signatur ansehen
-
füg das hier bei dir ein, nach Zeile 51:
[autoit]$Language = "German.ini"
[/autoit], er versucht einen Wert aus der Registry zu lesen, die es nicht gibt

-
Habs jetzt etwas umständlich gelöst

Nochmal zur Erklärung, ich habe die Werte und die dazugehörigen Prozente.
Jetzt möchte ich "zufällig" 100 Variablen einen Wert zuweisen, aber mit beachtung der Prozentwerte.
Also eben nicht48xWert1, 17xWert2, 2xWert3, 5xWert4, 25xWert5 sondern ungefähr so
2xWer1, 3xWert2,5xWert1, 1xWert4, 2xWert5,9xWert1 usw.Habe es jetzt so gelöst:
[autoit]$full = 100
[/autoit]
For $i = 1 To UBound($Werte) - 1
$Werte[$i][2] = ($Werte[$i][1] / $Alle_werte) * 100 ; Berechnet den Prozentwert
$Werte[$i][4] = $full - Round($Werte[$i][2], 2) ; untere Grenze
$Werte[$i][5] = $full ;obere grenze
$full -= Round($Werte[$i][2], 2)
Next
Die Prozentzahl wird von 100 abgezogen, der entstehende Wert ist damit die untere grenze, obere grenze ist 100. Dann wird der Prozentsatz von 100 abgezogen, um die neue Obergrenze für den nächsten Wert zu stellen.Jetzt kann ich mit
[autoit]Random(0, 100)
[/autoit]einen Wert "zufällig" erstellen, wenn dieser zwischen der Ober- und Untergrenze liegt, wird der entsprechende Wert zurückgeliefert.
Habe es mit 100000 Werten durchlaufen lassen und die Ergebnisse sind Prozentual richtig (ca. natürlich
) aber eben willkürlich verteilt, genauso wie es sein soll (bei mir zumindest ^^) -
Hallöchen,
ich sitze hier grade vor einem kleinen Logikproblem.
Ich habe Werte, denen ein Prozentsatz zugehört.Code[0]|48.7179487179487|WERT1 [1]|17.9487179487179|WERT2 [2]|2.56410256410256|WERT3 [3]|5.12820512820513|WERT4 [4]|25.6410256410256|WERT5´Diese Werte werden ständig neu berechnet, also nutzt sie nur als Beispiel

Jetzt muss ich diese Werte nach den prozentwerten verteilen, aber nicht in einer bestimmten Reihenfolge, (48x den Wert, 17x den nächsten) sondern in einer zufälligen Reihenfolge.
Die Werte können nicht im nachhinein "gemischt" werden.
Hat da jemand eine Idee? -
Ich hatte das Problem, das ich eine Uhrzeit aus Excel ausgelesen habe und nur eine Dezimalzahl erhalten habe.
Ich habe mich dann mal drangesetzt, und diese Funktion geschrieben, welche die Uhrzeit aus der Dezimalzahl wieder in eine "normale" Darstellung umwandelt. Vielleicht kann das ja jemand gebrauchen.Spoiler anzeigen
[autoit]; #FUNCTION#
[/autoit]
;===============================================================================
;
; Name...........: _ExcelTimeToNormalTime
; Description ...: Wandelt eine Exceluhrzeit (Dezimal) in eine normale Uhrzeit (hh:mm:ss) um
; Syntax.........: _ExcelTimeToNormalTime($i_time)
; Parameters ....: $i_time - Die Uhrzeit, wie sie von Excel gespeichert wird
; Return values .: Success - Die normale Uhrzeit
; Failure - Returns 0 and Sets @Error:
; |0 - Kein Fehler
; |1 - $i_time ist keine gültige Zahl
; Author ........: TheLuBu ([email='LuBu@veytal.com'][/email])
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........;
;
;==========================================================================================
Func _ExcelTimeToNormalTime($i_time)
$i_time = StringReplace($i_time, ",", ".")
If Not IsNumber($i_time) Then Return SetError (1,0,0)
Return StringRight("0" & Int($i_time * 24), 2) & ":" & StringRight("0" & Int((($i_time * 24) - Int($i_time * 24)) * 60), 2) & ":" & StringRight("0" & Int(((($i_time * 24) - Int($i_time * 24)) * 60 - Int((($i_time * 24) - Int($i_time * 24)) * 60)) * 60), 2)
EndFunc ;==>_ExcelTimeToNormalTime -
Hast du das Fenster schon mit
[autoit]WinActivate
[/autoit]aktiviert? bzw. erstmal gewartet, bis es aktiv ist mit
[autoit]WinActive
[/autoit] -
du hast ein Komma vergessen
[autoit]
Hinter 377DllCall(@TempDir & "\captdll.dll", "int", "CaptureRegion", "str", $CaptureDirectory & $CaptureFile, "int", 263, "int", 497, "int", 830, "int", 377, "int", 100)
[/autoit] -
So, dreimal Kopf aufn Tisch geknallt... Hab ich verdient.
Hatte vorher mit <> "" gearbeitet, deswegen stand das Else noch drin.
Danke
-
Vielleicht geht es so?
[autoit]While True
[/autoit]
If PixelSearch( 263, 497, 1113, 894, 0x000000, 100) Then
MsgBox(0, "Farbe", "Farbe gefunden")
Exitloop
Else
MsgBox(0, "Farbe", "Farbe nicht gefunden")
Sleep(10000)
EndIf
WEnd -
Hab mich jetzt für VB entschieden, da ich zu keiner Lösung gekommen bin.
Dein Vorschlag funktioniert bei der Exceldatei leider niht, hatte auch schon drüber nachgedacht, aber so wie die Tabelle aufgebaut und gepflegt wird klappt es leider nicht.Zum VB Code
Code
Alles anzeigenSub Stundenkonto() Dim intRow As Integer For intRow = 3 To 200 If Cells(intRow, 13) = "" Then Else Cells(intRow, 12).Copy Cells(intRow, 13).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _ :=False, Transpose:=False End If Next intRow End Sub
Ich habe jetzt mehrere Formeln in die Datei eingebaut. In Spalte L steht jetzt der Wert, den ich kopieren will (ohne Formeln, nur Wert), und der soll nur in Spalte M kopiert werden, wenn nichts in M steht.
Allerdings klappt es nicht, die Schleife läuft nicht durch.
Weiß jemand rat? -
Hallöchen, ich schreib es mal hier, weil es nicht direkt mit AutoIt zutun hat.
Ich habe eine Exceltabelle mit der Arbeitszeit unserer Mitarbeiter.
In Spalte K steht das aktuelle Stundenkonto.
Wenn die jetzt mehr als 10 Überstunden haben, bekommen sie einen Bonus. Dieser wird aber nur einmalig im Monat gezahlt, das Stundenkonto fängt dann aber wieder neu an für diesen Bonus zu zählen.
Mal als Beispiel
Mitarbeiter A hat insgesamt 12 Überstunden, erhält also den Bonus. In der Spalte N soll nun das Überstundenkonto "zurückgesetzt werden" und dann von vorne zählen. In Spalte K steht weiterhin das aktuelle Stundenkonto. Ich brauche jetzt also den Wert 12, um ihn abziehen zu können, aber eben als festen Wert. Kennt jemand eine Möglichkeit, dies mit einer Formel zu machen? Oder muss ich dafür VB nehmen?Ich hoffe mich versteht jemand

-
[autoit]
$date = _DateAdd('w', -1, _NowCalcDate())
[/autoit]
;$split = Stringsplit(GUICtrlRead($date), ".") ;Wieso GuictrlRead, ist doch kein Gui Control
$split = Stringsplit($date, "/") ;probiers mal so
Send($split[3] & "." & $split[2] & "." & $split[1]) -
[autoit]
EndFunc _RefreshServerList()
[/autoit]
[autoit]
Du beendest die FUnktion und rufst in der selben Zeile die Funktion auf.
Einfach nurEndFunc
[/autoit]und der Error sollte weg sein

-
Du musst die Daten auch empfangen, bis jetzt hast du nur einen Request abgeschickt und überprüfst, ob eine Antwort zurück kommt.
[autoit]#include <WinHTTP.au3>
[/autoit][autoit][/autoit][autoit]$hOpen = _WinHttpOpen()
[/autoit][autoit][/autoit][autoit]
$hConnect = _WinHttpConnect($hOpen, "http://www2.willstequatschen.de")
$hRequest = _WinHttpOpenRequest($hConnect, "GET", "/la/sites/offline/index.php")
_WinHttpSendRequest($hRequest)MsgBox(0, 0, $hRequest)
[/autoit][autoit][/autoit][autoit]_WinHttpCloseHandle($hRequest)
[/autoit]
_WinHttpReceiveResponse($hRequest)
$hRequest = _WinHttpOpenRequest($hConnect, "POST", "/insert/login.php", "HTTP/1.1")
_WinHttpSendRequest($hRequest, "Content-Type: application/x-www-form-urlencoded" & @CRLF, "/insert/login.php?action=login benutzer=benutzername&pass=kennwort&secpass=&secure=0")
_WinHttpReceiveResponse($hRequest)
Local $data = ""
Do
$data &= _WinHttpReadData($hRequest)
Until @error
ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $data = ' & $data & @crlf & '>Error code: ' & @error & @crlf) ;### Debug Console
FileWrite("req01.html", $data)
_WinHttpCloseHandle($hRequest) -
Ich habe eine Funktion gebraucht, die mir die Tage einer Kalenderwoche ausgibt, und da hier schon jemand nach etwas ähnlichem gefragt hat, hier die Funktion, vielleicht kann sie einer von euch ja auch noch gebrauchen.
Spoiler anzeigen
[autoit]; #FUNCTION# ;===============================================================================
[/autoit]
;
; Name...........: _DateWeekISOtoDate
; Description ...: Liefert die Tage der gewählten Kalenderwoche
; Syntax.........: _DateWeekISOtoDate($iKW, $iYear = @YEAR)
; Parameters ....: $iKW - Die Kalenderwoche, dessen Tage gesucht werden sollen
; $iYear - Das Jahr (Standart = Aktuelles Jahr)
; Return values .: Success - Eindimensionales Array mit den Tagen der gesuchten Woche.
; - In $Result[0] steht die Anzahl an Wochen des Jahres
; Failure - Returns 0 and Sets @Error:
; |0 - Kein Fehler
; |1 - $iKW ist keine Zahl
; |2 - $iKW ist kleiner 1 oder größer 53
; |3 - $iKW ist 53, es gibt aber nur 52 Wochen
; |4 - $iYear ist keine Zahl
; |5 - $iYear ist kein Jahr
; Author ........: TheLuBu ([email='LuBu@veytal.com'][/email])
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........;
;
; ;==========================================================================================
Func _DateWeekISOtoDate($iKW, $iYear = @YEAR)
If Not StringIsDigit($iKW) THen Return SetError(1,0,0)
If $iKW = 0 Or $iKW > 53 Then Return SetError(2,0,0)
If Not StringIsDigit($iYear) THen Return SetError(4,0,0)
If Not StringLen($iYear) = 4 THen Return SetError(5,0,0)
Local $s4thjanuary, $s1thjanuary, $idatereduce, $iMaxWeeks, $asReturndate[8]
$s4thjanuary = _DateToDayOfWeek($iYear, "01", "04")
$s1thjanuary = _DateToDayOfWeek($iYear, "01", "01")
For $i = 1 To 6
$idatereduce = $s4thjanuary - $i
If $idatereduce = 2 Then ExitLoop
Next
$sFirstDayWeekISO = _DateAdd("D", -$i, $iYear & "/01/04")
Switch $s1thjanuary
Case 5 ;Donnerstag
$iMaxWeeks = 53
Case 4 ;Mittwoch
If _DateIsLeapYear($iYear) Then
$iMaxWeeks = 53
Else
$iMaxWeeks = 52
EndIf
Case Else
$iMaxWeeks = 52
EndSwitch
If $iMaxWeeks = 52 And $iKW = 53 Then SetError(3,0,0)
$asReturndate[0] = $iMaxWeeks
For $i = 1 To 7
$asReturndate[$i] = _DateAdd("w", $iKW - 1, _DateAdd("D", $i-1, $sFirstDayWeekISO))
Next
Return $asReturndate
EndFunc ;==>_DateWeekISOtoDate -
Hab sowieso grade an einer Datumskonvertierung gearbeitet, schau dir mal die Funktion von mir an, vielleicht hilft sie dir.
Spoiler anzeigen
[autoit]; #FUNCTION# ;===============================================================================
[/autoit]
;
; Name...........: _DateWeekISOtoDate
; Description ...: Liefert die Tage der gewählten Kalenderwoche
; Syntax.........: _DateWeekISOtoDate($iKW, $iYear = @YEAR)
; Parameters ....: $iKW - Die Kalenderwoche, dessen Tage gesucht werden sollen
; $iYear - Das Jahr (Standart = Aktuelles Jahr)
; Return values .: Success - Eindimensionales Array mit den Tagen der gesuchten Woche.
; - In $Result[0] steht die Anzahl an Wochen des Jahres
; Failure - Returns 0 and Sets @Error:
; |0 - Kein Fehler
; |1 - $iKW ist keine Zahl
; |2 - $iKW ist kleiner 1 oder größer 53
; |3 - $iKW ist 53, es gibt aber nur 52 Wochen
; |4 - $iYear ist keine Zahl
; |5 - $iYear ist kein Jahr
; Author ........: TheLuBu ([email='LuBu@veytal.com'][/email])
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........;
;
; ;==========================================================================================
Func _DateWeekISOtoDate($iKW, $iYear = @YEAR)
If Not StringIsDigit($iKW) THen Return SetError(1,0,0)
If $iKW = 0 Or $iKW > 53 Then Return SetError(2,0,0)
If Not StringIsDigit($iYear) THen Return SetError(4,0,0)
If Not StringLen($iYear) = 4 THen Return SetError(5,0,0)
Local $s4thjanuary, $s1thjanuary, $idatereduce, $iMaxWeeks, $asReturndate[8]
$s4thjanuary = _DateToDayOfWeek($iYear, "01", "04")
$s1thjanuary = _DateToDayOfWeek($iYear, "01", "01")
For $i = 1 To 6
$idatereduce = $s4thjanuary - $i
If $idatereduce = 2 Then ExitLoop
Next
$sFirstDayWeekISO = _DateAdd("D", -$i, $iYear & "/01/04")
Switch $s1thjanuary
Case 5 ;Donnerstag
$iMaxWeeks = 53
Case 4 ;Mittwoch
If _DateIsLeapYear($iYear) Then
$iMaxWeeks = 53
Else
$iMaxWeeks = 52
EndIf
Case Else
$iMaxWeeks = 52
EndSwitch
If $iMaxWeeks = 52 And $iKW = 53 Then SetError(3,0,0)
$asReturndate[0] = $iMaxWeeks
For $i = 1 To 7
$asReturndate[$i] = _DateAdd("w", $iKW - 1, _DateAdd("D", $i-1, $sFirstDayWeekISO))
Next
Return $asReturndate
EndFunc ;==>_DateWeekISOtoDate -
Hab jetzt grade mal was geschrieben, bei mir klappt es:
Spoiler anzeigen
[autoit]#include <GuiComboBox.au3>
[/autoit] [autoit][/autoit] [autoit]
#include <GUIConstantsEx.au3>
$Test = "Test1|Test2|Test3"
$Test2 = "Test4|Test5|Test6"
Dim $GUITitle = "Finderling"
Dim $GUIWidth = 300
Dim $GUIHeight = 150
Global $WindowGui = GUICreate($GUITitle, $GUIWidth, $GUIHeight)
Global $check = GUICtrlCreateCheckbox("LongLog", 170, 60)
Global $combo = GUICtrlCreateCombo("", 50, 70, 100, 25)
Global $button_start = GUICtrlCreateButton("Start", 50, 100, 100, 25)
Global $label = GUICtrlCreateLabel("l", 170, 105, 100, 50)
GUICtrlCreateLabel("DatenTyp:", 50, 50, 80, 20)
$button_SelectFile = GUICtrlCreateButton("SelectIniFile", 50, 20, 100, 25)
$button_Hilfe = GUICtrlCreateButton("Hilfe", 170, 20, 90, 25)
GUISetState(@SW_SHOW)#Region - GUI SelectLoop
[/autoit] [autoit][/autoit] [autoit]
While 1
$msg = GUIGetMsg()
Select
Case $msg = $GUI_EVENT_CLOSE
Exit
Case $msg = $button_start
GUICtrlSetData($combo, $Test)
Case $msg = $button_Hilfe
_GUICtrlComboBox_ResetContent($combo)
GUICtrlSetData($combo, $Test2)EndSelect
[/autoit]
WEnd
#EndRegion - GUI SelectLoop
[autoit]
Wenn ich deinen Code versuche zu deuten, klickst du zuerst auf Select File, wenn du dann die Werte ändern willst auf Hilfe und dann wieder auf Select File?
Du könntest_GUICtrlComboBox_ResetContent($combo)
[/autoit]direkt in die SelectFile() Funktion setzen, denn dort wird ja auch der neue Wert eingetragen.
Da ich keine Inidatei habe, kann ich dein Script leider nicht weiter testen -
Wo schreibst du denn die neuen Werte in die Combobox? Poste doch bitte das gesamte Script
-
FTP Ordner wohl nicht mit Backslashes aber IP wird wohl zutreffen.
Könnte auch ein FTP Ordner sein, der als Netzlaufwerk eingebunden ist, die haben dann auch den Zugriff mit "\\"