Beiträge von Musashi

    Wichtige allgemeine Frage: Wie handhaben wir Fehler, die schon in der EN Hilfe bestehen? Wenn ich hier Bescheid sage, passiert dann etwas, oder kann ich mir die Mühe sparen?

    Falls Du damit wissen möchtest, ob hier gemeldete Fehler an das engl. Forum weitergegeben und dort beseitigt werden, vermute ich eher Nein.


    Sofern der Fehler aber auch in der deutschen Hilfe vorhanden ist, kennst Du das Prozedere ja ;).


    Gruß Musashi

    Erst einmal 'Willkommen im Forum' ;)

    Ich möchte einfach nur später auf z.B. "zwei" zugreifen können.

    Dumme Frage :

    Geht es Dir bei der Übung möglicherweise um sog. 'assoziative Arrays', also um Arrays, auf die man z.B. mit einem String als Index auf die Elemente zugreifen kann ?


    eine Sache noch :

    Code
    1. Func Test()
    2. Local $_array[5][2]
    3. For $i = 0 To 4
    4. Local $_subarray = otherFunction() ; gibt ein Array mit 4 Elementen zurück

    Die Deklaration Local $_subarray... gehört nicht in die Schleife ==> nach oben verlagern.


    Gruß Musashi

    Wenn du also wie Musashi schreibt Passworte speicherst oder auch denkst, ich muss das nicht serverseitig absichern, niemand sieht die Datenbankzugriffe, hast du verloren.

    Yep ;) !

    Zitat von Joschy41 :

    "Hallo, genau, es geht um absichtliche Manipulation. Es gibt halt Kollegen die erlauben sich dann einen Spaß und ändern da irgendwas..."


    Ich meine - diese "Scherze" verstehe ich eh nicht. Aber wenn es um hohe Sicherheit geht, dürfen die User einfach keine direkte Kontrolle haben/erlangen können.

    Das sehe ich auch so !

    Joschy41 : Was ist das denn bitte für ein Laden (sorry), wo Mitarbeiter sich einen Spaß daraus machen Produktivprozesse zu manipulieren :cursing:. Da sollte dein(e) Chef(in) vielleicht mal die große Keule 'rausholen.


    Eine Verschlüsselung der Datei würde übrigens nichts bringen ! Deinen "Kollegen" geht es ja nicht um den Inhalt (der wäre an sich nicht extrem schutzbedürftig). Mittels (Hex-)Editor etc. lässt sich auch eine verschlüsselte Datei leicht 'kaputtmachen'.


    Gruß Musashi

    SQLite ist aber IMHO nicht geeignet für Mehrbenutzer im Netzwerk

    Grundsätzlich wurde SQLite nicht als Client-Server DB konzeptioniert, da hast Du recht.


    Da ich mit SQLite bisher nur trivial und nicht im Netzwerk gearbeitet habe, möchte ich hier kein gefährliches Halbwissen verbreiten.

    Aus dem o.a. Link und z.B. :

    https://www.autoitscript.com/f…h-cooperative-semaphores/

    entnehme ich aber, dass das möglich ist (solange man kein Hochlastsystem betreiben möchte) .

    Wie funktioniert das mit einer Datenbank ?
    Gibt Simples Beispiel. Vielleicht anhand meines Beispiels oben ?

    Simpel ist ein dehnbarer Begriff ;).

    SQLite hätte einige Vorteile wie :

    • Leicht zu installieren und zu betreiben
    • breite Unterstützung seitens AutoIt
    • haufenweise Informationen
    • lizenzrechtlich unproblematisch

    Andere Systeme wie MariaDB, MySQL, PostgreSQL und Microsoft SQL Server Express (alle kostenlos) wären nach Deiner Definition sicher nicht simpel.

    Das ist nur ein Beispiel.
    Ich habe n kleines Internes Bestellprogramm geschrieben.

    Zurzeit wird alles in der Textdatei gespeichert. Da kommt dann rein:
    Name;Bestellung;Shop;Artikel;Artikelnummer;Kunde;Auftragsnummer;Priorität,BestätigtigVon

    Wo/wie werden denn z.Zt. die Artikel- und Kundendaten etc. gespeichert ?


    Gruß Musashi

    Wie funktioniert das mit einer Datenbank?
    Gibt es ein simples Beispiel. Vielleicht anhand meines Beispiels oben ?

    Du könntest mit Textdateien und FileLocks arbeiten, aber das wird (auch abhängig von der Datenmenge) irgendwann an Grenzen stoßen.


    Der Vorschlag von Moombas eine Datenbank zu nutzen ist besser !

    Datenbanken wie MySQL (besser MariaDB), MSSQL (Lizenzkosten) oder PostgreSQL erfordern aber einiges an Hintergrundwissen.

    Einen leichteren (nicht leichten ;)) Einstieg hättest Du mit SQLIte (wird von AutoIt gut unterstützt !).


    Ich weiß nicht wie gut Dein englisch ist, aber dies wäre z.B. eine hilfreiche und aktuelle Quelle :

    https://www.autoitscript.com/f…-from-multiple-computers/


    Gruß Musashi

    Ok, Du verwendest die Scrollbar-UDF GUIScrollbars_Ex.au3 von Melba23 :

    https://www.autoitscript.com/f…sy-new-version-13-may-18/


    Breite und Höhe der GUI kannst Du doch bei Global $hGui = GUICreate("Test Gui", 300, 300) festlegen, oder verstehe ich Dich falsch ?


    -> _GUIScrollbars_Generate($hGui, Breite, Höhe)

    Sind die Werte für Breite und/oder Höhe größer als die GUI wird die jeweilige Scrollbar erstellt.


    Oder möchtest Du die Breite der Scrollbar selbst vergrößern ?



    Gruß Musashi

    Ich möchte die Aufgabe daher in kleinere Happen aufteilen:

    [...]

    Die Anzahl der Parameter je Funktion wird sich auf die hauptsächlich verwendeten veschränken. Weitere Properties können jederzeit mit _TS_TaskPropertiesSet definiert werden.

    Was haltet Ihr davon?

    Ich halte das für die richtige Vorgehensweise !

    • Pflege und Debugging kleinerer Funktionen ist überschaubarer
    • die einzelnen Schritte können von anderen leichter nachvollzogen werden
    • bei Erweiterungen wird nicht ein Riesenkonstrukt destabilisiert -> einfacher zu testen

    Dass man zum Anlegen einer Task jetzt mehrere Funktionen aufrufen muss (statt eines Monsters) ist definitiv kein Nachteil :)!


    Gruß Musashi

    P.S. :

    Die Menge an Properties usw. ist wirklich erschlagend. Ich habe mir bereits einige der MSDN-Seiten angeschaut, aber da tiefer einzusteigen übersteigt momentan meinen Zeitrahmen (leider).

    Insbesondere das von Dir im engl. Forum angesprochene Errorhandling ist von Microsoft z.T. schlecht dokumentiert bzw. nicht erkennbar vorhanden :rolleyes:.

    Hi BigRox !


    Hier verschiedene Reguläre Ausdrücke um Dateinamensteile zu ermitteln :

    Quelle (Melba23) : https://www.autoitscript.com/f…indComment&comment=809767


    Gruß Musashi

    Nachtrag 2 :

    Ich wollte mal wissen, wie groß die Performance-Unterschiede wirklich sind ;)


    Testsituation :

    - ein Testskript - 5200 Zeilen; 280 KB

    - 300 Replaceläufe (1. Wert001 zu Wert002; 2. Wert002 zu Wert003 ... 300. Wert300 zu Wert301)

    - der Wert selbst kommt 1141 mal im Skript vor


    Dafür habe ich folgende Daten verwendet :

    Testtext-Long.txt (das ist die GDIPlus-UDF als Text)

    ReplaceArr-Long.txt (Ersetzungsarray als Text)


    -> Mit _ReplaceStringInFile() :

    00:00:13.458 (Std:Min:Sek.Millisek.)

    -> Mit StringReplace() :

    00:00:10.274 (Std:Min:Sek.Millisek.) - kein großer Unterschied zu _ReplaceStringInFile()

    -> Richtig ab geht es aber mit StringRegExpReplace() :

    00:00:00.628 (Std:Min:Sek.Millisek.) !!!


    Die Ergebnisdateien waren in allen Fällen identisch (sogar der MD5-Hash).


    Hier die neue Version des Skriptes :

    Das ReplaceArray ist jetzt 3-spaltig , Delimiter ist #|#.

    ; Array mit den 'Suchen & Ersetzen'-Werten :

    ; Spalte 0 = gesuchte Textkette

    ; Spalte 1 = neue Textkette

    ; Spalte 2 = falls Semikolon (;) -> Element nicht ersetzen (quasi auskommentiert)


    Das Ersetzen funktioniert grundsätzlich.

    Probleme gibt es in der akt. Variante noch, wenn z.B. Werte alleinstehend am Anfang der Zeile stehen und mit TAB statt Leerzeichen eingerückt wurden. Diese müssen noch berücksichtigt werden !


    Gruß Musashi

    Nachtrag :

    autoiter hat mich freundlicherweise darauf hingewiesen, dass die Funktion _ReplaceStringInFile performancetechnisch hier nicht ideal ist und besser mit StringReplace gearbeitet werden sollte (was mir auch bereits bekannt war).


    _ReplaceStringInFile öffnet und schließt die Datei bei jedem Ersetzungsdurchlauf, was nicht zwingend erforderlich ist (üblicherweise öffnet man die Datei einmalig, arbeitet die Ersetzungen ab und speichert sie dann).


    Da ich _ReplaceStringInFile bisher aber noch nicht so auf dem Schirm hatte, wollte ich sie einfach mal verwenden. Wie Andy häufig anmerkt, sollen unsere Hochleistungsrechner auch etwas arbeiten dürfen, und nicht nur im Idle vor sich hin vegetieren ^^.


    Banana_2_Day :

    Solltest Du das Brockhaus-Lexikon replacen wollen bzw. die Ersetzungen Deiner Texte spürbar zu lange dauern, können wir auch das Standardverfahren nehmen ;).


    Gruß Musashi

    Hallo Banana_2_Day !

    Alle Ideen sind letztendlich Übersetzungen von A nach B, ob Sprache, Programmiersprache, Zahlen (1 = A, 3 = C ...).


    In allen Varianten möchte ich Zeichenketten übersetzen, sei es ein veralteter Befehl in einen neuen Befehl (AutoIt), ein englisches Wort in ein deutsches Wort (oder umgekehrt).

    Hier ein Beispielskript, wie Du das umsetzen kannst :


    -> Testtext01.txt (da Du keine Testdatei beigefügt hast, habe ich eine erzeugt)

    ---> Ausgangstext - wird nicht verändert, sondern unter *_New* gespeichert.

    -> ReplaceArr01.txt -> Textdatei mit den Ersetzungen für das Array

    ---> alleinstehende Zeichenketten müssen ein Leerzeichen vor und/oder danach erhalten.


    Einen allgemeinen Punkt solltest Du bei Deiner 'Sortierung' berücksichtigen :

    Falls Du z.B. einen alleinstehenden Wert A mit B ersetzt und B mit C , dann muss B -> C vorher ausgeführt werden ;).


    EDIT : Code und Anhänge entfernt -> siehe aktuelle Version in Beitrag #14


    Gruß Musashi

    Nachtrag :

    Mir schweben drei Anwendungsfälle vor, dabei sind es ca. 12, rund 40 und dem dritten Fall über 300.

    In allen Varianten möchte ich Zeichenketten übersetzen, sei es ein veralteter Befehl in einen neuen Befehl, ein englisches Wort in ein deutsches Wort.

    Warum dann der Aufwand mit der Sortierung und der Festlegung auf 12, 40 und >300.


    Du bräuchtest ein Array mit den Ersetzungen, also 'ALT 1..n' -> 'NEU 1..n'.

    Den Text n-mal durchlaufen und jeweils ein StringReplace durchführen.


    Sobald man genau weiß was Du möchtest, geht es ggf. auch noch eleganter ;).


    Gruß Musashi

    Wäre die von Euch genannte Variante mit einem Array im auf die beste Lösung bei einer Größenordnung von 300 Elementen?

    Falls Du in einem Text diverse Elemente ersetzen möchtest, gibt es ggf. andere Herangehensweisen.

    Als Datenbasis scheint (nach derzeitigem Kenntnisstand) ein Array aber sinnvoll.


    Poste mal einen Beispieltext und Sachen, die Du ersetzen möchtest.


    Gruß Musashi

    Nur so eine Idee :

    Du könntest Dir ein kleines Hilfsprogramm erstellen.

    Die Daten legst Du in einem 2-D Array direkt an, oder liest sie aus einer Textdatei ein z.B. :

    $iValue = |7|$iTest = |B|$iTest2 = |y

    $iValue = |2|$iTest = |A|$iTest2 = |x

    $iValue = |9|$iTest = |C|$iTest2 = |z

    usw. (Delimiter hier | )

    bei Switch kann das erste Feld auch weggelassen werden


    -> das Array auf/absteigend sortieren

    -> daraus den Befehlsblock als Text generieren und in Dein eigentliches Programm einfügen.


    Edit : ich sehe gerade, AspirinJunkie hat auch etwas in der Art vorgeschlagen ^^


    Gruß Musashi

    Funktion StringSplit :

    Falls das Trennzeichen mehrere Zeicben enthält ist das Verhalten der Funktion abhängig von den Flag-Eionstellungen.


    Naja, in den Satz haben sich wohl ein Paar falsche Zeichen reingemogelt :D .

    Nicht nur dort :


    1.

    Falls der flag parameter auf $STR_NOCOUNT (2) gesetzt, wird die Anzahl nicht in dem ersten Element enthalten sein.

    Falls der flag parameter auf $STR_NOCOUNT (2) gesetzt ist, wird die Anzahl nicht in dem ersten Element enthalten sein.

    (-> ist oder wurde)

    2.

    Falls das Flag ungleich $STR_NOCOUNT ist, so wird $aArray[0] auf 1 gesetzt und der komplette Strijng wird in $aArray[1] zurückgegeben.

    3.

    Wird als Tennzeichen ein Leerstring "" angegeben, so wird jedes Zeichen des Strings im Array als Element zurückgegeben.

    4. (von BigRox bereits genannt) :

    Falls das Trennzeichen mehrere Zeicben enthält ist das Verhalten der Funktion abhängig von den Flag-Eionstellungen.

    5.

    Falls $STR_CHRSPLIT eingestellt st, so wird der String bei jedem einzelnen Zeichen des Trennzeichen-Strings getrennt.

    6.

    Falls $STR_ENTIRESPLIT eingestellt st, so wird der String nur getrennt wenn der komplette Trennzeichen-String vorkommt.


    Natürlich ist eine gute Rechtschreibung wichtig ! Wir sind aber alle keine Super-Germanisten, d.h. jeder macht Fehler (der eine mehr - der andere weniger).

    Würde jeder Tippfehler einzeln gepostet werden, dann führt das ggf. zu hunderten von Beiträgen ! Daher noch mal mein Vorschlag :

    -> inhaltliche Fehler und Ergänzungsvorschläge als Einzelbeitrag melden

    -> Tippfehler sammeln und als Paketbeitrag melden


    Tweaky : Wie siehst Du das ?


    Gruß Musashi