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. nwmbd

Beiträge von nwmbd

  • Dienstplanung

    • nwmbd
    • 28. September 2016 um 17:03

    Hallöchen,

    wie der Name schon sagt möchte ich gern, sofern das nicht unendlich kompliziert ist, ein Dienstplan bauen.

    Mir geht es gegen den Strich das meine Excel Einträge und Formeln gelöscht werden.

    Ich habe schon eigentlich fast alles gesperrt, aber die Eingabe ansich kann man nicht sperren.

    Wie dem auch sei :)

    Mir ist klar das ich die Einträge in einer Datei ablegen muss.

    Ich möchte das die Einträge einzeln klickbar sind (in jedem Feld) dort dann editieren und löschen als option angeboten wird.
    Klickt jemand auf editieren öffnet sich ein Fenster wo er die neue Schicht eintragen kann, löschen ist denke ich selbsterklärend :)

    Hat das schon einmal jemand gemacht? Ist mein Ansatz komplett daneben? ?(

    Vielen Dank

    Nachfolgend noch der Code den ich bis jetzt gemacht habe, den Buttons sind noch keine Funktion zugeteilt / nur Spass.

    C
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    
    
    Dienstplan()
    
    
    Func Dienstplan()
        Local $listview, $button, $button2, $item1, $item2, $item3, $msg
    
    
        GUICreate("Dienstplan", 1000, 450, 100, 200, -1, $WS_EX_ACCEPTFILES)
        GUISetBkColor(0x000000FF)
    
    
        $listview = GUICtrlCreateListView("Name|01.01.16|02.01.16|03.01.16|04.01.16|05.01.16|...|Stundenanzahl", 20, 10, 950, 300)
        $button1 = GUICtrlCreateButton("Monatsübersicht Drucken", 100, 420, 150, 20)
        $button2 = GUICtrlCreateButton("Login für Änderungen", 300, 420, 150, 20)
        $item1 = GUICtrlCreateListViewItem("MA1|T", $listview)
        $item2 = GUICtrlCreateListViewItem("MA2", $listview)
        $item3 = GUICtrlCreateListViewItem("MA3", $listview)
    	$item4 = GUICtrlCreateListViewItem("MA4", $listview)
        $item5 = GUICtrlCreateListViewItem("MA5", $listview)
    	$item6 = GUICtrlCreateListViewItem("MA6", $listview)
    	$item7 = GUICtrlCreateListViewItem("MA7", $listview)
    	$item8 = GUICtrlCreateListViewItem("Soll|4|5|6|....", $listview)
        GUISetState()
    
    
        Do
            $msg = GUIGetMsg()
    
    
            Select
                Case $msg = $button1
                   GUICtrlSetData($item1, "||Nachttest")
    		 EndSelect
        Until $msg = $GUI_EVENT_CLOSE
    EndFunc
    Alles anzeigen
  • FileCopy erst dann ausführen, wenn Scan-Datei fertiggestellt ist.

    • nwmbd
    • 24. September 2016 um 21:33

    Vielen Dank.

    Die Hilfe ist wirklich gut, aber die Hilfe bringt ja nur etwas wenn man weiß mit welchem Befehl man was erreichen kann. Wenn man den bestimmten Befehl gefunden hat hilft die Hilfe ganz gut, das stimmt.

    Das mit den guis finde ich absolut beeindruckend.

    Ich muss ehrlich sagen das ich schon sehr lange Computer besitze, dass programmieren hat mich bis zu meinem ersten Eintrag hier, nicht so recht interessiert. Ich finde es aber echt gut und interessant was man alles so "selbst" machen kann. Bin eher durch Zufall auf autoit gestoßen.
    Und um so mehr man sich da einliest und merkt was man alles so machen kann, wächst das Verlangen mehr über dies zu erfahren.
    Seit ich hier bin und das ist noch nicht lange, finde ich immer mehr was man dank autoit im Arbeitsalltag verbessern könnte, wenn man den wüsste wie man es macht :)
    Ich finde, sollte es etwa so im Arbeitsalltag geben was eine Maschine machen kann, egal was es ist, sollte sie es tun. Es gibt, wie sicherlich in jeder Firma, Abläufe die 30 Minuten und mehr dauern die ein Programm in wenigen Sekunden lösen kann / die Arbeit um ein Vielfaches vereinfacht.

  • FileCopy erst dann ausführen, wenn Scan-Datei fertiggestellt ist.

    • nwmbd
    • 24. September 2016 um 20:21

    learning by doing. Aber wirklich beeindruckend.
    Aus deine Sicht, wie fängt man am besten damit an, welche Bücher / Videos sind besonders für das verstehen wie das ganze aufgebaut ist besonders hilfreich. Hier im Forum kann man sehr viel lesen aber so richtig verstehe ich das meist noch nicht, es ist oft schon für Fortgeschrittene beschrieben.
    Bei meinen Thread verstehe ich das mit dem Array (es geht alles 1a) überhaupt nicht. Mich würde interessieren was aus deine Sicht gerade für Anfänger und Fortgeschrittene ein Must have ist, um möglichst einfach die ganzen Grundprinzipien, zu verstehen.
    Danke

  • FileCopy erst dann ausführen, wenn Scan-Datei fertiggestellt ist.

    • nwmbd
    • 23. September 2016 um 22:51

    Was manche hier so von 0 auf 100 hinzaubern ist echt beachtlich.

    Oscar hast du dir das alles selbst beigebracht oder hast du das irgendwo gelernt / studiert?

  • Prüfung einer Datei

    • nwmbd
    • 23. September 2016 um 21:15
    Zitat von Kanashius

    Dann dürfte das hier genau das machen, was du haben möchtest:

    AutoIt
    #include <array.au3>
    
    
    Global $sSep=" " ;Trennzeichen zwischen Spalten in der Tabelle
    ;$sFileData=FileRead("PFAD")
    
    
    $sFileData="16.09.2016 07:14:53 Hauptgebäude ZZ123456 Online/Alarm Öffnung Tor 3"&@crlf&"16.09.2016 07:14:53 Hauptgebäude ZZ123456 Online/Alarm Öffnung Tor 3"& _
    		   @crlf&"16.10.2016 07:14:53 Hauptgebäude ZZ123456 Online/Alarm Öffnung Tor 3"&@crlf&"16.09.2016 07:14:53 Nebengebäude ZZ123456 Online/Alarm Öffnung Tor 3"& _
    		   @crlf&"16.10.2016 07:14:53 Nebengebäude ZZ123456 Online/Alarm Öffnung Tor 3"; Beispieldaten
    local $arResult=StringRegExp($sFileData,"(?m)^\d\d.(\d\d).\d\d\d\d"&$sSep&"(?:.*?)"&$sSep&"(.*?)"&$sSep,4);RegExpPattern um das wichtige zu Filtern
    ;(?m) sagt das ^ den Zeilenanfang sucht, nicht den Textanfang
    ;\d ist eine Zahlm also wird dort das Datum gesucht. Die () um den Monat sorgen dafür, dass dieser Teil einen eigenen Eintrag im Array bekommt. (Capture Group)
    ;Danach kommt der Spalten Trenner. Das ?: in den () Danach, sagt, dass die Klammer ein Ausdruck ist, der nicht gematcht werden soll. Somit wird die Spalte danach übergangen
    ;Und die Spalte danach wird als Gebäude wieder gespeichert. (.*?) findet alles, bis das danach kommt, hier also der Spaltentrenner
    ;Für genauere Infos sieh dir die Hilfe zu StringRegExp an :)
    
    
    local $arEntryDates[0][2];Array anlegen, indem für jedes Gebäude ein Array gespeichert wird
    for $i=0 to UBound($arResult)-1 step 1;Alle funde durchgehen
    	local $arInsert=$arResult[$i];Auf das jeweilige Ergebnis zugreifen
    	local $index=_ArraySearch($arEntryDates,$arInsert[2],0,0,0,0,1,0);Gucken, ob das Gebäude bereits einen Eintrag hat
    	if $index=-1 then;Wenn nicht einen neuen anlegen
    		$index=UBound($arEntryDates)
    		ReDim $arEntryDates[UBound($arEntryDates)+1][2];Array um 1 vergrößern
    		local $tmp[0][2];ein 2d Array für Monat und Count anlegen
    		$arEntryDates[$index][0]=$arInsert[2];Gebäudenamen reinschreiben
    		$arEntryDates[$index][1]=$tmp;Array eintragen
    	endif
    	local $arGet=$arEntryDates[$index][1];Array zu dem Gebäude abrufen
    	local $indexSec=_ArraySearch($arGet,$arInsert[1],0,0,0,0,1,0);Nachsehen, ob der Monat schon einen Eintrag hat
    	if $indexSec<0 then;Wenn nicht einen neuen Erstellen
    		$indexSec=UBound($arGet)
    		ReDim $arGet[$indexSec+1][2];Array vergrößern
    		$arGet[$indexSec][0]=$arInsert[1];Monatsnummer
    		$arGet[$indexSec][1]=1;Ersten Count, den aktuellen
    	else
    		$arGet[$indexSec][1]=$arGet[$indexSec][1]+1;Sonst den Zähler an der Stelle, wo der Monat gefunden wurde erhöhen
    	endif
    	$arEntryDates[$index][1]=$arGet;Array zurückschreiben, da AutoIt Arrays kopiert und keine Pointer nimmt
    next
    
    
    local $sErg=""
    for $i=0 to UBound($arEntryDates)-1 step 1
    	$sErg&=$arEntryDates[$i][0]&@crlf;Den Gebäudenamen hinzufügen
    	local $arTmp=$arEntryDates[$i][1];Array abfragen
    	_ArraySort($arTmp);Sortieren, damit die Monate untereinander in der richtigen Reihenfolge sind und nicht nach dem ersten Fund sortiert sind
    	for $j=0 to UBound($arTmp)-1 step 1;Alle Monate durchlaufen und an den String anhängen
    		$sErg&=$arTmp[$j][0]&$sSep&$arTmp[$j][1]&@crlf
    	Next
    next
    
    
    MsgBox(48,"",$sErg)
    ;FileWrite("PATH",$sErg)
    Alles anzeigen

    Siehe und lerne ;)

    Ist am Ende eine .csv Datei, die kann Excel auch speichern und auslesen. $sSep ist der Spaltentrenner, hier LEERZEICHEN, vermutlich bei dir @Tab. Musst du passend ändern :)
    Und die Pfade eintragen zum lesen und speichern.

    MfG Kanashius

    Hallo Kanashius,

    ich habe mich vertan, es sind immer Tabs zwischen den Einträgen :(

    Wie kann ich das anpassen?

  • Server/Client option

    • nwmbd
    • 23. September 2016 um 20:42

    Hallo diablisch,

    am besten du schreibst was du alles weißt und was du mit dem Script vor hast / was es können muss.

    Versuch das ganze so genau wie nur irgendwie möglich zu beschreiben, hast du das getan, wird dir ganz sicher jemand helfen.

  • Server/Client option

    • nwmbd
    • 20. September 2016 um 20:29

    Hallo diablisch,

    Alina hat dir die Antwort ja bereits gegeben.

    Du musst deine Daten in einer Datei ablegen, die lässt du dann überprüfen und je nach Eintrag kannst du automatisiert Abläufe starten.

    Ich gehe mal davon aus das er prüfen soll ob der Server online ist, wenn nicht soll er gestartet werden.

  • Prüfung einer Datei

    • nwmbd
    • 18. September 2016 um 13:52

    Wow, also wenn ich das durchlaufen lasse sieht das Ergebnis richtig gut aus.

    Ich glaube das ich mich vielleicht falsch ausgedrückt habe, ich füge mal eine txt an.

    Es wird jede Auslösung in einer Zeile gespeichert, selbst wenn ein Eintrag identisch ist muss er berechnet werden, es soll quasi ab 01.08.2016 00:00:01 - 31.08.2016 23:59:59 alles berechnet werden.

    Theoretisch müsste ich ja "nur" alle Einträge der Txt in dein $sFileData bekommen, dann sollte das ja eigentlich gehen.

    EDIT:

    Ich sollte erst lesen dann schreiben, du hast die Antwort ja schon geschrieben, ist das Peinlich :(

    EDIT2:

    Selbst mit deiner Erklärung ist das echt schwer zu verstehen, da fehlen die absoluten Basics.

    EDIT3:

    Je öfter man es liest desto mehr macht es langsam Sinn, alles verstehe ich nicht so recht, dass wäre aber auch langweilig :)
    Ich finde zum lernen immer Videos interessant, hier kommt es natürlich auf den an der es erklärt, aber meist bleibt dann mehr hängen als wenn man sich etwas 10 mal durchliesst.
    Eine Video Rubrik wäre echt genial, wo Anfängern einfache Projekte erklärt werden, bei yt findet man Tonnen von Videos, diese finde ich persönlich aber nicht sehr anschaulich und man findet sehr selten welche die so gemacht sind das man etwas lernt, gibt natürlich auch hier Ausnahmen, aber bei den Tonnen sind die schwer zu finden.
    Diese Anfage zB. Wie mache ich was, warum mache ich das, was genau bedeutet das, warum macht man das nicht so, dass kann nur so gehen, diese Abfrage/Array ... muss immer so aussehen, da brauch man eine Variable, weil sonst ... usw.
    Des weiteren könntet Ihr etwas durch Werbung verdienen, ich habe hier jegliche Blocker deaktiviert.
    Ich habe noch nicht eine Werbung gefunden, (kann auch sein das ich Blind bin) dass verwundert mich etwas.

  • Prüfung einer Datei

    • nwmbd
    • 18. September 2016 um 12:43

    die Txt sieht wie folgt aus:

    Spoiler anzeigen

    16.09.2016 07:14:53 Hauptgebäude ZZ123456 Online/Alarm Öffnung Tor 3

    Mich interessiert nur das Datum und die Anlage (Hauptgebäude), der Rest ist komplett egal.

    Das ganze dann wenn möglich in eine Excel Datei schreiben.

    zB:

    Auswertung.xls

    Blatt Hauptgebäude
    Januar Einträge 1
    Februar Einträge 2
    ...

    Blatt Nebengebäude
    Januar Einträge 2
    Februar Einträge 3
    ...

  • Prüfung einer Datei

    • nwmbd
    • 18. September 2016 um 11:40

    Hallo,

    könntest du mir eine kurze Hilfe geben wo man da genau ansetzt?

    Irgendwoher muss er ja wissen welches Datum ich möchte.

    Besteht die Möglichkeit das ganze in einer Excel Tabelle zu speichern, das ist mit einer Text etwas unübersichtlich.

    Das er zB in die Tabelle Haupt seine Daten von Jan - Dez und bei Neben auch Jan - Dez speichert.

  • Prüfung einer Datei

    • nwmbd
    • 18. September 2016 um 11:23

    Hallo Bugfix,

    habe das nun wie folgt angepasst.

    Da muss ich ja jeden Monat den Code ändern / ich schreib das für das ganze Jahr :)

    Code
    $haupt=FileRead("C:\Test\Test.txt")
    StringReplace($haupt,"01.08.2016","")
    StringReplace($haupt,"02.08.2016","")
    StringReplace($haupt,"Haupt","")
    FileWrite("C:\Test\Alarme.txt", "Haupt: " & @extended & @CRLF)
    
    
    $neben=FileRead("C:\Test\Test.txt")
    StringReplace($neben,"01.08.2016","")
    StringReplace($neben,"02.08.2016","")
    StringReplace($neben,"Neben","")
    FileWrite("C:\Test\Alarme.txt", "Neben: " & @extended)
    Alles anzeigen
  • Prüfung einer Datei

    • nwmbd
    • 18. September 2016 um 10:22

    Hallo zusammen,

    durch eure Hilfe fallen mir immer mehr Sachen ein welche die Arbeit erleichtern können.

    Ich denke das nachfolgende ist relativ einfach, hoffe ich.

    Ich möchte in der txt alle Einträge auslesen und dann alle Einträge für Hauptgebäude Nebengebäude etc. für den jeweiligen Monat zählen.

    Sofern das möglich ist automatisiert zum 01 jeden Monats an mich senden lassen.

    Danke vorab.

    EDIT:

    Ok das Zählen ansich war doch kein Problem, wie kann ich das einfacher eingrenzen?

    Nachfolgend noch der Code.

    Das ist ja sehr umständlich.

    Code
    $string=FileRead("C:\Test\Test.txt")
    StringReplace($string,"01.08.2016","")
    StringReplace($string,"02.08.2016","")
    StringReplace($string,"Haupt","")
    Msgbox(0,"",@extended & " Einträge.")
  • Prüfung einer Datei

    • nwmbd
    • 17. September 2016 um 10:52

    Hallo Oscar,

    vielen vielen Dank, hier wird einem gut geholfen.

    Besteht nicht die Möglichkeit das man den ersten Teil sucht, ist dieser da dann den zweiten Teil sucht ist der da dann dann das Ereignis ausführen.

    So in der Art:

    If StringInStr($sLastLine, 'Hauptgebaeude') and If StringInStr($sLastLine, 'Öffnung Tor 3') Then

    das er quasi in der ganzen Zeile sucht, theoretisch ist es ja egal, findet er die Texte, egal wo, soll er das Ereignis auslösen.

    Es gibt ja nur 2 Faktoren die entscheidend sind, wo (Hauptgebäude Nebengebäude...) und was (Tor 1-X)

    Danke vorab.

    EDIT:
    ES GEHT !!!!!!!!!!!!! :D:D:D

    Danke Oscar, dein Ansatz hat mich zum Ziel gebracht.
    Nachfolgend noch der Code falls dies jemand interessiert.

    Einwas hätte ich dann doch noch, könnte ich das Überwachungsfenster auf dem 2. Monitor unten links anzeigen? :D

    Code
    Func WM_SHELLCHANGENOTIFY($hWnd, $iMsg, $wParam, $lParam)
    	#forceref $hWnd, $iMsg
    	Local $sPath = _WinAPI_ShellGetPathFromIDList(DllStructGetData(DllStructCreate('dword Item1; dword Item2', $wParam), 'Item1'))
    	If $sPath = $sNotifyFile Then
    		Local $sLastLine = FileReadLine($sNotifyFile, -1)
    		Local $sMsg = ""
    		If StringInStr($sLastLine, 'Haupt') And StringInStr($sLastLine, 'Tor2') Then
    			$sMsg = 'TOR 2 UNBEDINGT WIEDER SCHLIESSEN!'
    				ShellExecute("C:\Test\Test.pdf")
    				EndIf
    		If StringInStr($sLastLine, 'Haupt') And StringInStr($sLastLine, 'Tor3') Then
    			$sMsg = 'TOR 3 UNBEDINGT WIEDER SCHLIESSEN!'
    			ShellExecute("C:\Test\Test.pdf")
    		EndIf
    		GUICtrlSetData($idLabel, $sMsg)
    		WinActivate($hGui)
    	EndIf
    EndFunc   ;==>WM_SHELLCHANGENOTIFY
    Alles anzeigen
  • Menü Problem

    • nwmbd
    • 17. September 2016 um 10:49

    Die Lösung und warum das genau so aussehen muss.

    Danke

  • Prüfung einer Datei

    • nwmbd
    • 16. September 2016 um 16:33

    Hallo Oscar,

    Das Datum ist immer gleich, es sind zwischen dein Einträgen aber verschieden Lange Leerzellen. (Sofern das von Bedeutung ist)
    Dort steht auch Nebengebäude, da gibt es dann andere Handlungen oder auch Lager.
    Die Anlagennummer besteht aus 2Buchstaben und 6 Zahlen. zB ZZ123456

    Es würde vollkommen reichen wenn er die Anlage und den Text ganz hinten filtert, der Rest ist vollkommen uninteressant.

    Danke vorab.

  • Prüfung einer Datei

    • nwmbd
    • 16. September 2016 um 16:14

    Hallo Oscar,

    Daten sehen wie folgt aus:


    16.09.2016 07:14:53 Hauptgebäude Anlagennummer Online/Alarm Öffnung Tor 3. Es müsste quasi das Datum, die Anlagennummer sowie das Online/Alarm gekillt werden.

    Wie bekomme ich das hin? :(

  • Menü Problem

    • nwmbd
    • 16. September 2016 um 15:44

    Hallo,

    kann mir jemand das zum Verständnis erklären?

    Danke

  • Prüfung einer Datei

    • nwmbd
    • 16. September 2016 um 08:39

    Hallo Oscar,

    Daten sehen wie folgt aus:

    16.09.2016 07:14:53 Hauptgebäude Anlagennummer Online/Alarm Öffnung Tor 3. Es müsste quasi das Datum, die Anlagennummer sowie das Online/Alarm gekillt werden.

    EDIT:

    Habe den Code nun so verändert, funktioniert 1a. Ist das auch richtig so? :D

    Code
    Func WM_SHELLCHANGENOTIFY($hWnd, $iMsg, $wParam, $lParam)
    	#forceref $hWnd, $iMsg
    	Local $sPath = _WinAPI_ShellGetPathFromIDList(DllStructGetData(DllStructCreate('dword Item1; dword Item2', $wParam), 'Item1'))
    	If $sPath = $sNotifyFile Then
    		Local $sLastLine = FileReadLine($sNotifyFile, -1)
    		Local $sMsg = ""
    		Switch $sLastLine
    			Case 'Öffnung Tor 2'
    				$sMsg = 'TOR 2 UNBEDINGT WIEDER SCHLIESSEN!'
    				ShellExecute("C:\Test\Test.pdf")
    			Case 'Öffnung Tor 3'
    				$sMsg = 'TOR 3 UNBEDINGT WIEDER SCHLIESSEN!'
    				ShellExecute("C:\Test\Test.pdf")
    		EndSwitch
    		GUICtrlSetData($idLabel, $sMsg)
    		WinActivate($hGui)
    	EndIf
    EndFunc   ;==>WM_SHELLCHANGENOTIFY
    Alles anzeigen
  • Prüfung einer Datei

    • nwmbd
    • 15. September 2016 um 20:26

    Hallo Oscar,

    vielen Dank, klingt logisch.

    Er bringt aber sobald die Datei andere Einträge hat folgenden Fehler.

    45) : ==> Variable used without being declared.:
    GUICtrlSetData($idLabel, $sMsg)
    GUICtrlSetData($idLabel, ^ ERROR
    ->20:25:51 AutoIt3.exe ended.rc:1
    +>20:25:51 AutoIt3Wrapper Finished.

    EDIT:
    Kann man den ausgelesen Text auch mit irgendwas auffüllen?! ( mit * ging bei meinem Test nicht ) vor den Einträgen steht immer Datum und Uhrzeit, die kenne ich ja nicht vorher :)

  • Prüfung einer Datei

    • nwmbd
    • 15. September 2016 um 19:58

    Hallo BugFix,

    habe mir das mal angesehen aber irgendwie bin ich entweder zu doof oder verstehe das System nicht.

    ich gehe mal davon aus das ich in diesem Teil etwas ändern muss.

    If $sPath = $sNotifyFile Then
    Local $sLastLine = FileReadLine($sNotifyFile, -1)
    Local $sMsg = 'Achtung! Neuer Eintrag:\n' & _Now() & ' -> ' & $sLastLine
    GUICtrlSetData($idLabel, StringFormat($sMsg))
    WinActivate($hGui)
    EndIf

    Aber wo zum Geier pack ich die Zeilen die ich haben will hin?
    Cool wäre ja auch wenn er, wie oben, auf einen Text den er ausliest einen benutzerdefinierten Text ausgibt.

    Danke vorab

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™