• Zitat

    Nein !

    Du hast wieder Fehler bei der Klammersetzung in der Zuweisung, und damit 5 Elemente :

    Ja, du hast Recht, beim kopieren ist die letzte eckige Klammer nicht mitgekommen. Davor hatte ich beim kopieren deines Codes Probleme und es kam zu Fehlermeldungen.

    Jetzt funktioniert es aber soweit mit deinem Code was das Array betrifft.

  • So, weiter geht es:

    Es startet, zeigt aber glaube ich, eine Fehlermeldung an: /ErrorStdOut......

    :/

  • Hi kayes !

    Ist das momentane Skript 'A: ein Prototyp zum Herumtesten' oder 'B: bereits die Basis für das fertige Tool ' ? Falls B: , dann hätte ich einige Vorschläge, die man bereits jetzt einbauen könnte/sollte.

    Anmerkung :

    In dem Skript hast Du folgende Zeile :

    GUICreate("Datenaustausch von kayes & Musashi erstellt im Dezember 2018")

    Es gehört immer zum guten Ton Helfer zu nennen :thumbup: , es muss aber nicht unbedingt im Fenstertitel der Anwendung geschehen :P.

    Außerdem bin ich nicht der einzige der bisher etwas beigetragen hat, und es werden ggf. noch andere hinzukommen. Du könntest z.B vor das Skript Wrapperanweisungen und einen Kommentarbereich setzen (inkl. Danksagungen) :

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Es gehört immer zum guten Ton Helfer zu nennen :thumbup: , es muss aber nicht unbedingt im Fenstertitel der Anwendung geschehen :P .


    Außerdem bin ich nicht der einzige der bisher etwas beigetragen hat, und es werden ggf. noch andere hinzukommen. Du könntest z.B vor das Skript Wrapperanweisungen und einen Kommentarbereich setzen (inkl. Danksagungen) :

    Ich weiss, in einer vorherigen Antwort ( das Kopiertool für Fotos) hatte ich das im Code schon gesehen und ich werde das jetzt auch so hier machen.


    Ist das momentane Skript 'A: ein Prototyp zum Herumtesten' oder 'B: bereits die Basis für das fertige Tool ' ? Falls B: , dann hätte ich einige Vorschläge, die man bereits jetzt einbauen könnte/sollte.

    Ganz klar B.

    Ich hatte das ja hier herein gepostet, in der Hoffnung, das mir jemand den Code fertig schreibt.

    So ist aber auch nicht schlimm, da lerne ich auch noch was dabei. Immerhin weiß ich jetzt ungefähr Arrays zu handhaben.

    Ich bin immer offen für Ideen. Bisher habe ich mir immer gedacht schaue wie weit du kommst und denkst es ist richtig, poste es und warte auf Reaktionen.

    Was hättest du denn für Vorschläge?

  • Was hättest du denn für Vorschläge?

    Nur ein Beispiel, und nicht mal ein übermäßig elegantes :

    Man könnte die Pfade (und ggf. auch einige Referenzen für die GUI) in eine ini.-Datei auslagern. Das hätte den Vorteil, dass man während der Testphase einfache, und für alle Helfer identische Pfadstrukturen hinterlegen könnte (der funktionale Kern ist ja das Kopieren von A nach B). Außerdem wäre diese Lösung flexibler, z.B. bei einer Erweiterung auf 5+ PC's.

    Beim Aufbau des Skriptes und der Notation von Variablen etc. gäbe es auch einiges zu verbessern. So etwas später 'nachzurüsten' wäre aufwendiger als es gleich richtig zu machen.

    Du hast korrekterweise die Rubrik 'Ohne Gegenleistung' gewählt, weil Du Dir ein weitgehend fertiges Skript wünscht. Da mein Schreibtisch leider voll ist, möchte ich dazu nichts versprechen, aber es gibt ja noch andere hier im Forum. Außerdem scheinst Du ja auch Gefallen an AutoIt gefunden zu haben ^^.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • nächste Version:

    Ich habe den Kopierbefehl in einer anderen Datei "getestet":

    Code
    #include <FileConstants.au3>
    Global $projekt ="16D001"
    Global $jjjj = "20" & StringTrimRight($projekt, 4)
    DirCopy("F:\TESTUMGEBUNG\SERVER\DATEN\" & $jjjj & "\" & $projekt & "\", "F:\TESTUMGEBUNG\RECHNER2\DATEN\" & $jjjj &"\" & $projekt & "\", $FC_OVERWRITE)
  • Hi kayes !

    Puh, ich weiß gar nicht, wo ich anfangen soll :P :

    1.

    Es ist sehr unübersichtlich, die Globals quer durch das Programm zu deklarieren.

    2.

    Es ist sehr sinnvoll, GUI-Elemente mit einer ControlID zu versehen. So ist z.B. :

    GUICtrlCreateEdit("", 352, 88, 180, 40, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN))

    Global $Projektdown = GUICtrlSetData(-1, "19")

    falsch, da Du $Projektdown mit dem Rückgabewert von GUICtrlSetData besetzt, hier also mit 1 (da erfolgreich). Zudem bezieht sich -1 in GUICtrlSetData(-1, "19") immer auf das zuletzt erzeugte Control.

    Wenn Du später in Deinen Funktionen, also z.B.
    Func copydown()

    ...

    Local $jjjj = "20" & StringTrimRight($Projektdown, 4)

    auswerten willst, kommst Du an den Eingabewert von $Projektdown nicht heran.

    Folge : $Projektdown = 1 , d.h.

    -> StringTrimRight($Projektdown, 4) ist leer ==> $jjjj ist '20', nicht '2019'.

    Das erzeugt zwar nicht den Fehler im DirCopy Befehl (hier stimmt die Anzahl der Argumente nicht), aber der Pfad wäre nicht wie gewünscht !

    Besser wäre :

    Global $ProjektDown

    Global $idEditProjektDown = GUICtrlCreateEdit("", 40, 168, 180, 40, BitOR ... )

    GUICtrlSetData($idEditProjektDown, "19")

    GUICtrlSetFont($idEditProjektDown, 18, 400, 0, "MS Sans Serif")

    So kann man den Wert von $Projektdown jederzeit durch GUICtrlRead($idEditProjektDown) ermitteln. Hat der User z.B. '19D001' eingegeben, dann ergibt

    StringTrimRight(GUICtrlRead($idEditProjektDown), 4) die gewünschte 19.

    Nebenbei :

    In beiden Funktionen copydown() und copyup() wird Return VOR dem DirCopy Befehl aufgerufen.

    Die Funktion terminiert, bevor sie dort überhaupt ankommt.

    Ist das Absicht (wg. Test) ?

    Ich möchte Dich nicht entmutigen, aber da Du Interesse an AutoIt gezeigt hast, versuche ich hier

    schrittweise einige (von mehreren :P) Problempunkten zu erklären. Falls Dich das stört, darfst Du es mir gerne sagen.

    Dann wäre es aber wahrscheinlich besser, wenn jemand das Programm komplett neu für Dich erstellt.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Stimme Musashi zu 100% zu...

    Besser wäre :

    Hier kannst du allerdings auch -1 für das zuletzt erstellte Control verwenden...

    Global $ProjektDown

    Global $idEditProjektDown = GUICtrlCreateEdit("", 40, 168, 180, 40, BitOR ... )

    GUICtrlSetData(-1, "19")

    GUICtrlSetFont(-1, 18, 400, 0, "MS Sans Serif")

  • Hier kannst du allerdings auch -1 für das zuletzt erstellte Control verwenden...

    Ich weiß, aber so ist es, trotz des erhöhten Tippaufwandes, immer eindeutig - gerade bei Anwendern, die in Syntaxfragen (nennen wir es mal) 'unsicher' sind. Ansonsten wird die -1 Notation garantiert irgendwo benutzt, wo sie nicht mehr passt :P.

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • Da möchte ich Musashi unterstützen.

    Es ist absolut nicht nötig. Aber es dient der Sicherheit.

    Niemand muss es machen, aber wer Opt("MustDeclareVars", 1) benutzt, stellt sich so eine Frage nicht mehr, denn die Richtung ist die selbe.

    Grüße autoiter

  • Niemand muss es machen, aber wer Opt("MustDeclareVars", 1) benutzt, stellt sich so eine Frage nicht mehr, denn die Richtung ist die selbe.

    Stimmt...

    In größeren Scripts benutze ich allerdings nicht Opt("MustDeclareVars", 1) , sondern füge stattdessen folgende Zeile an den Anfang des Scripts ein:

    #AutoIt3Wrapper_AU3Check_Parameters=-q -d -w 1 -w 2 -w 3 -w- 4 -w 5 -w 6 -w- 7

    Das ist noch deutlich restriktiver als MustDeclareVars und es nervt auch ab und an gewaltig... aber andererseits hilft es ungemein dabei, "sauber" zu Programmieren!

  • Code
    2.
    
    Es ist sehr sinnvoll, GUI-Elemente mit einer ControlID zu versehen. So ist z.B. :
    
    GUICtrlCreateEdit("", 352, 88, 180, 40, BitOR($ES_AUTOVSCROLL,$ES_AUTOHSCROLL,$ES_WANTRETURN))
    
    Global $Projektdown = GUICtrlSetData(-1, "19")
    
    falsch, da Du $Projektdown mit dem Rückgabewert von GUICtrlSetData besetzt, hier also mit 1 (da erfolgreich). Zudem bezieht sich -1 in GUICtrlSetData(-1, "19") immer auf das zuletzt erzeugte Control.

    Das heißt also, das in einem Formulareingabefeld etwas eingetragen wird und der Wert der Variable ist dann 1 oder -1? Also, wird nur gecheckt, ob etwas eingetragen wird und nicht was wird an die Variable übergeben?

    Kann ich die Parameter nicht so setzen das der String aus dem Eingabefeld übernommen wird?

    • Offizieller Beitrag

    Kann ich die Parameter nicht so setzen das der String aus dem Eingabefeld übernommen wird

    Dann solltest du aber die ID des Eingabefeldes auch speichern.

    Code
    $IDedit = GuiCtrlCreateEdit(...)
    GuiCtrlSetData($IDedit, "19")   ; wenn diese Anweisung DIREKT nach der Erstellung des Ctrl erfogt, kann statt $IDedit auch -1 übergeben werden
    Global $Projektdown = GuiCtrlRead($IDedit)  ; um den Inhalt des Ctrl zu bekommen, musst du es auslesen.
  • Das heißt also, das in einem Formulareingabefeld etwas eingetragen wird und der Wert der Variable ist dann 1 oder -1? Also, wird nur gecheckt, ob etwas eingetragen wird und nicht was wird an die Variable übergeben?

    GUICtrlSetData verändert die Daten eines Controls, bei Dir z.B. des Editfeldes zu "19". Der Rückgabewert zeigt an, ob GUICtrlSetData erfolgreich war, also : 1 = erfolgreich, 0 bzw, -1 = nicht erfolgreich

    siehe :https://autoit.de/onlinehilfe/on…CtrlSetData.htm

    GUICtrlSetData besetzt NICHT die Variable (z.B. $Projektdown), in der Du die Usereingabe speichern willst. Um an die Usereingabe zu kommen, musst Du den Wert des Editfeldes mit GUICtrlRead auslesen. Das hatte ich in meinem Beitrag #27 doch bereits beschrieben :

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

  • So, habe jetzt den Code aus Beitrag #27 übernommen, aber jetzt kommt der Fehler bei dem Kopierbefehl (Incorrect number of parameters in function call)

  • Hallo kayes

    Ich habe es mir nicht komplett angeschaut. Aber dieser Fehler wiederholt sich im Code.

    DirCopy ( $source & $jjjj & "\" & $Projektdown & "\Berechnungen") , $dest & $jjjj & "\" & $Projektdown & "\") [$FC_CREATEPATH ,$FC_OVERWRITE]

    Ist falsch. Da sind schließende Klammern im Aufruf zu viel und dann fehlt sie am Ende und Kommas zwischen den Parametern auch nicht vergessen.

    So funktioniert etwa diese Zeile.

    DirCopy ( $source & $jjjj & "\" & $Projektdown & "\Berechnungen", $dest & $jjjj & "\" & $Projektdown & "\", [$FC_CREATEPATH ,$FC_OVERWRITE])

    Grüße autoiter

  • kayes !

    Hier kommen mehrere Fehler zusammen :

    (möglicherweise wird Dir das jetzt auch zu kompliziert ;))

    So funktioniert etwa diese Zeile.


    DirCopy ( $source & $jjjj & "\" & $Projektdown & "\Berechnungen", $dest & $jjjj & "\" & $Projektdown & "\", [$FC_CREATEPATH ,$FC_OVERWRITE])

    1. autoiter :

    Bei DirCopy gibt es laut Hilfe kein $FC_CREATEPATH. Dort steht :

    "Wenn die Ordnerstruktur des Zielordners nicht besteht, wird sie nach Möglichkeit erstellt."

    Allerdings haben wir dann ein Problem, das wir bereits diskutiert haben, siehe :

    Merkwürdiges Verhalten auch bei DirCopy ?

    2. kayes :

    Wenn Du Konstanten wie $FC_OVERWRITE verwendest, dann auch #include <FileConstants.au3> einbinden, oder Du nimmst als Flag den Wert 1 (=Überschreiben existierender Dateien - siehe Hilfe) !

    3.

    Func copydown()

    ...

    Local $jjjj = "20" & StringTrimRight(GUICtrlRead($idEditProjektDown), 4)

    Du besetzt zwar $jjjj , aber nicht $Projektdown , obwohl Du $Projektdown bei der Pfadangabe verwendest.

    ==> Folge : $Projektdown ist leer, und im Pfad steht ...\\,,,

    (bei $Projektup identisch)

    4.

    Deine GUI Schleife läuft permanent durch !

    Setze in der Func copydown() 

    hinter die Zeile

    Local $jjjj = "20" & StringTrimRight(GUICtrlRead($idEditProjektDown), 4)

    mal :

    ConsoleWrite ('< $Projektdown = ' & $Projektdown & @CRLF)

    ConsoleWrite ($source & $jjjj & "\" & $Projektdown & "\Berechnungen" & @CRLF)

    ConsoleWrite ($dest & $jjjj & "\" & $Projektdown & "\" & @CRLF)


    und achte auf die Console, dann siehst Du was ich meine !

    Die DirCopy-Befehle musst Du vorerst auskommentieren, da sie noch Fehler werfen :!:

    Ersetze :

    durch :

    Gruß Musashi

    86598-musashi-c64-png

    "Am Anfang wurde das Universum erschaffen. Das machte viele Leute sehr wütend und wurde allenthalben als Schritt in die falsche Richtung angesehen."

    Einmal editiert, zuletzt von Musashi (20. Dezember 2018 um 22:48) aus folgendem Grund: Tippfehler in GUI-Loop bereinigt

  • Hallo,

    das mit den FileConstants hatte ich schon herausgefunden.

    Jetzt stellt sich mir die Frage: Wie kann der Wert in die Variable geschrieben werden?

    Die Daten sollen auf jeden Fall überschrieben werden.

    Die Verzeichnisse auf dem Server sind nicht diesselben.

    So haben wir einen "Puffer" damit wir mit Aussendienst Daten nicht im Innendienst bearbeitete Daten überschreiben.

  • Statt DirCopy zu verwerfen, könntest du es auch wie gefordert anwenden. Musashi hat erklärt, dass es den Parameter $FC_CREATEPATH nicht gibt. Allerdings funktioniert es normalerweise auch so. Zu den weiteren Einwänden will ich hier keine Stellung beziehen.

    DirCopy($source & $jjjj & "\" & $Projektdown & "\Berechnungen", $dest & $jjjj & "\" & $Projektdown & "\", $FC_OVERWRITE)

    sollte funktionieren, wenn deine durch Variablen gebildeten Quell-Pfade existieren.

    Grüße autoiter