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

Beiträge von Banana_2_Day

  • Textdatei Datenbank Zeilenumbruch

    • Banana_2_Day
    • 2. August 2021 um 21:45
    Zitat von Musashi

    Die von Dir gemachten Vorgaben sind zu 'unscharf' um konkrete Aussagen zu treffen.

    Konnte mein Beitrag in Post 10 mehr Klarheit bringen?

    Mein Datenmengen-Beispiel in Post 10 zeigt ein gutes Abbild von 4 Datensätzen.

    Habe sie mit in meine Datenbank eingefügt.

    Fragt bitte konkret, wenn die Beschreibung noch nicht ausreichend ist.

  • Textdatei Datenbank Zeilenumbruch

    • Banana_2_Day
    • 2. August 2021 um 21:23
    Zitat von AspirinJunkie

    Die Frage ob eine Datenbank wie SQLite hier sinnvoll wäre oder nicht können wir anhand des gezeigten gar nicht beurteilen.

    Die Frage ist doch aber gibt es dort irgendeine inhaltliche Struktur?

    Gibt es dort eventuell bestimmte Attribute die jeden Datensatz beschreiben?

    Ich versuche es zu konkretisieren.

    Trennzeichen ist eine oder mehrere Leerzeilen.

    Es ist eine immense Textsammlung. Damit vergleichbar, als ob jemand aus dem AutoIt Forum diverse Textpassagen zu unterschiedlichen Themen ohne Leerzeilen in eine Textdatei kopiert hat.

    Es sind aus News, Foren, Ideen zusammenkopierte Texte, ohne weitere Struktur. Beispiel unten. Wird Zeit für Ordnung :)

    Immer, wenn neuer Datensatz eingefügt wurde, wurde zuvor eine Leerzeile als Trenner hinzugefügt.

    Das ist die echte Datenmenge, die mir hier so vorliegt.

    Daher sieht die Struktur der Datenbank wirkich so aus, wie in Post 1 dargestellt. Die Header sind nur zur Verdeutlichung, die gibt es nicht.

    Textblock unterschiedlich lang

    eine oder mehrere Leerzeilen

    Textblock unterschiedlich lang

    eine oder mehrere Leerzeilen

    ...

    Da ich keine Möglichkeit kenne, bei einer Suche jeden Absatz als 1 Datensatz zu betrachten, wollte ich das in ein durchsuchbares Datenbankformat umwandeln.

    Ich hätte neben AutoIt auch z.B. die Möglichkeit auf Access zuzugreifen, aber keine Erfahrungen. Früher gab es noch Asksam, vielleicht kennt das jemand, eine Freitextdatenbank.

    In Schritt 1 möchte ich eine praktikable Möglichkeit, was ich mit der Datenmenge tun kann, um sie absatzweise durchsuchbar zu machen.

    Ich suche dabei 1 bis 12 Suchbegriffe, die in jedem Absatz = Datensatz vorkommen müssen.

    Diese Absätze sollen ausgegeben und im Original gelöscht werden.

    So wird aus dem Chaos eine neue Datenbank, die unter Stichworten verschlagwortet ist.

    Würde ich im untenstehenden Beispiel nach

    SQLite, Möglichkeit

    suchen, würde Datensatz = Absatz (4) zurückgegeben, im Original gelöscht und in eine neue Datenbank eingefügt werden.

    Code
    Beispiel für die Datenmenge mit 4 Datensätzen - hier exemplarisch durchnummeriert, so sieht das Original mit anderen Textinhalten und ohne Nummeriung aus:
    
    (1) Daher sieht die Struktur der Datenbank wirkich so aus, wie in Post 1 dargestellt. 
    
    (2) Die Frage ob eine Datenbank wie SQLite hier sinnvoll wäre oder nicht können wir anhand des gezeigten gar nicht beurteilen.
    Für eine Datenbank müssen die Datensätze eine in sich wohnende feste Struktur haben.
    Das gezeigte Beispiel ist jedoch mal wieder herrlich unkonkret was komplett verhindert ableiten zu können wie man mit diesen Daten am besten umgeht.
    ####################
    Da stehen nur durchnummerierte Datensatz-Header mit darauf folgenden variablen Anzahl an Textzeilen.
    Die Frage ist doch aber gibt es dort irgendeine inhaltliche Struktur? Gibt es dort eventuell bestimmte Attribute die jeden Datensatz beschreiben?
    Mit solchen nonsens-Beispielen kann man schlicht nicht adäquat Hinweise geben wie man damit umgeht.
    
    
    
    (3) "Wäre es bei dieser Datenmenge nicht ggf. sinnvoll, eine Umsetzung mit SQLite zu überlegen ?"
    #### eine Überlegung wert
    _______________________________________
    
    
    (4) Ich vermute, SQLite ist eine Möglichkeit mit AutoIt, die ich nicht kenne?!
    Da muss ich mich einlesen.
    ~ welche Quellen gibt es?
    Ich habe auch schon überlegt, ob es ein alternatives Programm gibt.
    Die Datenmenge besteht aus vielen Zeilen und einer Leerzeile als Trenner.
    Ich kenne keine Programme, die das sinnvoll verarbeiten.
    Alles anzeigen
  • SQLite - Möglichkeit Abfrage beschleunigen?

    • Banana_2_Day
    • 2. August 2021 um 20:50

    BugFix

    Kannst Du die Datei bitte erneut hochladen?

    http://www.filedropper.com/germandict

    Vielleicht hat diese auch jemand von Euch zur Hand?

  • Textdatei Datenbank Zeilenumbruch

    • Banana_2_Day
    • 2. August 2021 um 20:46
    Zitat von Musashi

    Nachtrag - Frage :

    Wäre es bei dieser Datenmenge nicht ggf. sinnvoll, eine Umsetzung mit SQLite zu überlegen ?

    Klares Ja :)

    Hast Du ein Beispiel, wie ich obige Datenmenge in eine SQL-Datenbank überführe?

    Ich lese mir parallel in SQL ein.

    Wenn ich im Forum nach SQLite im Titel suche, sind die letzten Artikel aus 2018 und dann noch 1 - 2 ...

    Scheint ein seltenes Thema in aktueller Zeit zu sein.

    Das klingt schon mal hoffnungsvoll

    Thema

    SQLite - Möglichkeit Abfrage beschleunigen?

    Hi,

    ich habe mir Free German Dictionary heruntergeladen und daraus eine SQLite Datenbank erstellt germandict.db (Tabelle: dictionary, Feld: word).

    Die Datenbank möchte ich zum Überprüfen von Texten bzw. bei Teileingaben für Wortvorschläge nutzen. Dazu habe ich 3 Funktionen erstellt die per SELECT Statement auf Übereinstimmung am Wortanfang oder Wortende prüfen oder auf im Wort enthalten. Die Datenbank enthält ~1,9 Millionen Einträge und auf meinem Rechner dauert eine Abfrage dann ca. 3,5 s.

    Lässt…
    [ gelöst ]
    BugFix
    23. April 2018 um 11:41
  • Textdatei Datenbank Zeilenumbruch

    • Banana_2_Day
    • 2. August 2021 um 20:34

    Danke Musashi, ich scheitere an folgenden Punkten:

    "Wäre es bei dieser Datenmenge nicht ggf. sinnvoll, eine Umsetzung mit SQLite zu überlegen ?"

    Ich vermute, SQLite ist eine Möglichkeit mit AutoIt, die ich nicht kenne?!

    Da muss ich mich einlesen.

    Ich habe auch schon überlegt, ob es ein alternatives Programm gibt.

    Die Datenmenge besteht aus vielen Zeilen und einer Leerzeile als Trenner.

    Ich kenne keine Programme, die das sinnvoll verarbeiten.


    Testdatei 300 MB mit 10116866 Zeilen, wird in Notepad plus in null komma nichts geöffnet.

    Habe auch UltraEdit und andere probiert.

    In keinem Programm kann ich die Suche auf Absätze eingrenzen. Daher die Idee, etwas mit AutoIt umzusetzen.

    Scheinbar klappt auch das Einlesen in ein Array in AutoIt gut.

    Das rekursive Löschen von Leerzeilen in einem großen Array dauert ewig mit:

    Oder gibt es eine schnelle Möglichkeit, x untereinander stehende Leerzeilen als 1 Leerzeile = 1 Trenner zu nehmen? Siehe Beispiel Post 1, die Anzahl der Leerzeilen ist unterschiedlich.

    For $i = UBound ( $aText ) - 1 To 0 Step -1

    If $aText[$i] = "" Then

    _ArrayDelete ( $aText , $i )

    EndIf

    Next

    Gibt es dafür eine schnellere Variante?


    kurze Zwischenmeldung - teste weiter -

  • Textdatei Datenbank Zeilenumbruch

    • Banana_2_Day
    • 2. August 2021 um 19:35
    Zitat von BugFix

    Was ist eine Leerzeile?

    @CRLF@CRLF

    Beachte die Parameter bei Stringsplit, dann kannst du daran splitten.

    Badly formated variable or macro.:

    $trenn = @CRLF@CRLF

    $trenn = @CRLF & @CRLF

    das funktioniert

    Problem 1

    Testdatei ist ca. 300 MB groß

    ... teste ... melde mich in Kürze und formuliere dann die weiteren Fragen ...

  • Textdatei Datenbank Zeilenumbruch

    • Banana_2_Day
    • 2. August 2021 um 19:00

    (edit) dank Hinweis von Musashi ist es wohl besser, die Datenmenge mit SQLite zu bearbeiten.


    Hallo,

    ich habe eine Textdatei mit rund 2 Millionen Zeilen, die weiter unstrukturierten Text unterschiedlicher Länge erhalten wird.

    Diese Textdatei möchte ich nach mehreren Stichworten absatzweise mit AutoIt durchsuchen.

    1 Absatz mit einer x-beliebigen Anzahl von Zeilen, getrennt durch eine Leerzeile = 1 Datensatz

    Struktur

    Code
    Datensatz 1
    Text
    Text
    Text
    
    Datensatz 2
    Text
    Text
    Text
    Text
    Text
    Text
    
    Datensatz 3
    Text
    Text
    Text
    
    Datensatz 4
    Text
    Text
    Text
    Text
    
    Datensatz 5
    Text
    Text
    Text
    
    Datensatz 6
    Text
    Text
    Text
    Text
    Text
    Text
    
    Datensatz 7
    Text
    Text
    Text
    
    ....
    
    Datensatz 999999
    Text
    Text
    Text
    Text
    Alles anzeigen

    Die Datensätze sind durch eine Leerzeile getrennt.

    Ich wollte die Daten mit StringSplit in ein Array umwandeln.

    Was nehme ich als Trennzeichen, um eine Leerzeile zu erkennen?

    Folgendes geht nicht mit StringSplit, klar, hat jede Zeile.

    @CRLF

    @CR

    @LF

    Mit StringInString wollte ich dann jeden Datensatz nach mehreren Stichworten durchsuchen, ob diese vorhanden sind und die Fundstellen (kompletter Absatz) ausgeben.

    Wie würdet Ihr das lösen?

    Schritt 1 - wie bekomme ich die Textdatei in ein Array, wenn eine Leerzeile das Trennzeichen ist?

  • Wortanfang Schreibweise

    • Banana_2_Day
    • 24. April 2021 um 14:58
    Zitat von Musashi

    Hier eine rustikale Variante (RegEx wäre eleganter ;) ) :

    Danke. Kannst Du eine RegEx Variante mit reinstellen.

    Zitat von Musashi

    Die Kernfrage müsste eigentlich lauten : "Welchen Zweck hat das Ganze ?"

    Viele Markennamen und Firmennamen werden in Großbuchstaben geschrieben.

    Beim Speichern von Texten möchte ich lieber eine normale Schreibweise.

    Also aus KAUFLAND soll Kaufland werden.

    Es wäre verschmerzlich, wenn Autoit mit kleinem i geschrieben wird :)

    Auch bei anderen Worten ist es häufiger so, dass sie nur in Großbuchstaben geschrieben werden.

    Es geht um bessere Lesbarkeit.

    FÜR MICH IST DIESER SATZ SCHWERER LESBAR UND ERINNERT AN SCHREIEN ;)

  • Wortanfang Schreibweise

    • Banana_2_Day
    • 24. April 2021 um 11:10

    Vielleicht geht es einfacher.

    Gibt es eine Möglichkeit mit AutoIt zu erkenne, ob ein Buchstabe ein Großbuchstabe oder Kleinbuchstabe ist?

    Ich möchte nur umwandeln:

    DIESE = Diese ... weil erste Wort der Zeile

    ZEILE = Zeile ... weil erster Buchstabe groß

    wURDE = wurde ... weil erster Buchstabe klein

    mIT = mit ... weil erster Buchstabe klein

    AUTOIT = Autoit ... weil erster Buchstabe groß

    pROGRAMMIERT = programmiert. ... weil erster Buchstabe klein

    Schritt 1 - Trennzeichen Leerzeichen = die Einzelworte

    Schritt 2 - Erkennung 1. Buchstabe ob groß oder klein (ich weiß nicht, wie das geht)

    ... (edit: eventuell 1. Zeichen nehmen und prüfen mit StringIsLower / StringIsUpper )

    Schritt 3 - alle Buchstaben ab dem 2. Buchstaben klein schreiben (ich weiß nicht, wie das geht)
    ... (edit: eventuell mit _StringProper / Wandelt den ersten Buchstaben aller Wörter in einem String in Großbuchstaben um. Wandelt alle anderen Buchstaben in Kleinbuchstaben um.)

    Gibt es zu 2 und 3 einen Lösungsansatz?

    Ist das ganze zu einfach oder kompliziert geacht?

    Wie ist Eure Meinung?

  • Wortanfang Schreibweise

    • Banana_2_Day
    • 24. April 2021 um 09:51

    Hallo,

    ich möchte folgenden Satz mit AutoIt in die normale Schreibweise umwandeln.

    Quelle

    DIESE ZEILE wURDE mIT AUTOIT pROGRAMMIERT.

    Ziel

    Diese Zeile wurde mit Autoit programmiert.

    Wortanfang (1. Buchstabe) groß = Rest klein

    Wortanfang (1. Buchstabe) klein = Rest klein

    Was ist der einfachste Weg mit AutoIt?

    Ich kenne so eine Funktion von einigen Texteditoren.

    Danke

  • bugfix - alle control Inhalte in einer ini speichern

    • Banana_2_Day
    • 21. September 2020 um 22:43
    Zitat von BugFix

    Federn schmücken

    Hier der passende Federschmuck :)

    Inputboxen speichern Array

    PS: Habe lange nach einer Variante gesucht und viel getestet, um alle Controls einer Form einzulesen und den Inhalt in einer ini-Datei zu speichern. Was dem Ziel am nächsten kam, ist Dein Script.

    PS 2: Kennst oder benutzt Du ISN AutoIt Studio aus dem Forum? Wenn ja, erhöht das die Chancen, Dein Script zu implementieren.

  • bugfix - alle control Inhalte in einer ini speichern

    • Banana_2_Day
    • 21. September 2020 um 21:07

    Hallo,

    Bugfix hat vor einigen Jahren ein interessantes Script geschrieben, mit dem man den Inhalt einiger Controls in einer ini-Datei speichern und wiederherstellen kann.

    Dieses Script befindet sich mit im Dateianhang als "org.au3", ist nach minimalen Änderungen jetzt lauffhäig.

    Kennt Ihr Euch mit ISN so gut aus, dass Ihr das Script so anpassen könnt, dass es auch mit einer (jeder) Oberfläche lauffähig ist, die in ISN erstellt wurde?

    Die hochgeladene Datei ist eine als zip umbenannte rar Datei, weil die Forumssoftware rar nicht erlaubt - weiß jemand, warum nicht?

    Falls es Probleme gibt, kann ich die Dateien auch einzeln hochladen.

    Zum Thema:

    Die in Analogie zum Script von Bugfix aufgebaute Oberfläche liegt in der "test.isf".

    C
    ; -- Created with ISN Form Studio 2 for ISN AutoIt Studio -- ;
    #include <StaticConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>
    #Include <GuiButton.au3>
    #include <EditConstants.au3>
    
    $Form_01 = GUICreate("Titel",548,259,-1,-1,-1,-1)
    GUISetBkColor(0xFFFFFF,$Form_01)
    $CB1 = GUICtrlCreateCheckbox("Check 1",20,20,82,20,-1,-1)
    GUICtrlSetBkColor(-1,"0xFFFFFF")
    $CB2 = GUICtrlCreateCheckbox("Check 2",20,52,82,20,-1,-1)
    GUICtrlSetBkColor(-1,"0xFFFFFF")
    $IN1 = GUICtrlCreateInput("Input 1",100,20,150,20,-1,$WS_EX_CLIENTEDGE)
    $IN2 = GUICtrlCreateInput("Input 2",100,52,150,20,-1,$WS_EX_CLIENTEDGE)
    $RB1 = GUICtrlCreateRadio("Radio 1",280,20,150,20,-1,-1)
    GUICtrlSetBkColor(-1,"0xFFFFFF")
    $RB2 = GUICtrlCreateRadio("Radio 2",280,52,150,20,-1,-1)
    GUICtrlSetBkColor(-1,"0xFFFFFF")
    
    
    
    #cs
    [gui]
    Handle_deklaration=default
    Handle_deklaration_const=false
    title=Titel
    breite=548
    hoehe=259
    style=-1
    exstyle=-1
    bgcolour=0xFFFFFF
    bgimage=none
    handle=$Form_01
    parent=
    code=
    codebeforegui=
    xpos=-1
    ypos=-1
    center_gui=true
    title_textmode=normal
    isf_include_once=false
    only_controls_in_isf=false
    const_modus=default
    gui_code_in_function=false
    gui_code_in_function_name=
    gui_event_close=
    gui_event_minimize=
    gui_event_restore=
    gui_event_maximize=
    gui_event_mousemove=
    gui_event_primarydown=
    gui_event_primaryup=
    gui_event_secoundarydown=
    gui_event_secoundaryup=
    gui_event_resized=
    gui_event_dropped=
    defaultfont=MS Sans Serif
    defaultfontsize=8
    [0x000F2CD0]
    type=checkbox
    handle=418
    locked=0
    resize=
    x=20
    y=20
    width=82
    height=20
    func=
    font=MS Sans Serif
    fontsize=8
    fontstyle=400
    fontattribute=0
    tooltip=
    bgimage=
    textcolour=0x000000
    id=$CB1
    text=Check 1
    state=$GUI_SHOW+$GUI_ENABLE
    style=
    exstyle=
    bgcolour=0xFFFFFF
    code=
    order=0
    tabpage=-1
    iconindex=
    iconlarge=0
    textmode=text
    [0x00112CCE]
    type=checkbox
    handle=419
    locked=0
    resize=
    x=20
    y=52
    width=82
    height=20
    func=
    font=MS Sans Serif
    fontsize=8
    fontstyle=400
    fontattribute=0
    tooltip=
    bgimage=
    textcolour=0x000000
    id=$CB2
    text=Check 2
    state=$GUI_SHOW+$GUI_ENABLE
    style=
    exstyle=
    bgcolour=0xFFFFFF
    code=
    tabpage=-1
    iconindex=
    iconlarge=0
    textmode=text
    order=2
    [0x00202CDA]
    type=input
    handle=420
    locked=0
    resize=
    x=100
    y=20
    width=150
    height=20
    func=
    font=MS Sans Serif
    fontsize=8
    fontstyle=400
    fontattribute=0
    tooltip=
    bgimage=
    textcolour=0x000000
    id=$IN1
    text=Input 1
    state=$GUI_SHOW+$GUI_ENABLE
    style=
    exstyle=$WS_EX_CLIENTEDGE
    bgcolour=
    code=
    order=3
    tabpage=-1
    iconindex=
    iconlarge=0
    textmode=text
    [0x00142CCC]
    type=input
    handle=421
    locked=0
    resize=
    x=100
    y=52
    width=150
    height=20
    func=
    font=MS Sans Serif
    fontsize=8
    fontstyle=400
    fontattribute=0
    tooltip=
    bgimage=
    textcolour=0x000000
    id=$IN2
    text=Input 2
    state=$GUI_SHOW+$GUI_ENABLE
    style=
    exstyle=$WS_EX_CLIENTEDGE
    bgcolour=
    code=
    tabpage=-1
    iconindex=
    iconlarge=0
    textmode=text
    order=4
    [0x00242C0E]
    type=radio
    handle=430
    locked=0
    resize=
    x=280
    y=20
    width=150
    height=20
    func=
    font=MS Sans Serif
    fontsize=8
    fontstyle=400
    fontattribute=0
    tooltip=
    bgimage=
    textcolour=0x000000
    id=$RB1
    text=Radio 1
    state=$GUI_SHOW+$GUI_ENABLE
    style=
    exstyle=
    bgcolour=0xFFFFFF
    code=
    order=5
    tabpage=-1
    iconindex=
    iconlarge=0
    textmode=text
    [0x00182CC8]
    type=radio
    handle=422
    locked=0
    resize=
    x=280
    y=52
    width=150
    height=20
    func=
    font=MS Sans Serif
    fontsize=8
    fontstyle=400
    fontattribute=0
    tooltip=
    bgimage=
    textcolour=0x000000
    id=$RB2
    text=Radio 2
    state=$GUI_SHOW+$GUI_ENABLE
    style=
    exstyle=
    bgcolour=0xFFFFFF
    code=
    tabpage=-1
    iconindex=
    iconlarge=0
    textmode=text
    order=6
    #ce
    Alles anzeigen

    Das darauf basierende Script ist in der "test.au3" und endet mit Fehlermeldungen wie:

    Cannot assign values to constants.:

    $CB1 = GUICtrlCreateCheckbox("Check 1",20,20,82,20,-1,-1)

    ^ ERROR

    Wer ISN verwendet, kann die test.isn als Projekt öffnen.


    (2) Wenn Beispiel 1 läuft, komme ich zu Frage 2.

    Wie kann man das Script von Bugfix so anpassen, dass es für jede Oberfläche verwendet werden kann, die mit ISN erstellt wird?

    Dazu ist vielleicht nur 1 Zwischenschritt notwendig.

    Der untenstehende Quellcode müsste ausgetauscht werden gegen ein Script, welches aus der GUI $Form_01 alle Controls auslesen und wie unten stehend speichern kann. Kennt Ihr eine Umsetzung?

    Code
    ; Indizes festlegen für die zu erstellenden Ctrl (RB=Radio, IN=Input, etc.)
    Local Enum $CB1, $CB2, $IN1, $IN2, $RB1, $RB2, $iAnzahl
    ; Array für die CTRL erstellen
    Local $aCtrl[$iAnzahl]

    Dateien

    Test - Forum.zip 5,14 kB – 427 Downloads
  • _Singleton Fensterhandle

    • Banana_2_Day
    • 11. September 2020 um 03:46

    Falls es den Rahmen nicht sprengt - sonst später als eigenständiges Thema:

    Wie funktioniert die Berechnung der ASIN bei Amazon?

    Beispiel:

    B009GK1NDI

    Gibt man diese Nummer bei Amazon ein, hat man das Produkt aus Millionen anderer Produkte eindeutig identifiziert.

    ASIN bei Amazon sind eindeutige Gruppen von 10 Buchstaben und/oder Ziffern, anhand derer Artikel identifiziert werden.

    Nur 10 Zeichen lang - sowas würde ich gerne für meine Scripte verwenden.

    Dagegen ist ein md5 Hash enorm lang - Beispiel - 0x5B961A0BD72FA9A21E66DEAE4806B7E0

    B009GK1NDI

    statt

    0x5B961A0BD72FA9A21E66DEAE4806B7E0

    wäre top.

    Wie kann ich sowas eindeutiges und kurzes mit AutoIt aus der Datei c:\test\test.au3 generieren?

    (Also eine "eindeutige Gruppen von 10 Buchstaben und/oder Ziffern", die stellvertretend für die Datei c:\test\test.au3 steht?)

    Ich kenne mich mit Kombinatorik / Permutationen nicht aus und kann aus dem ff nicht sagen, wie viele Varianten es bei 10 Buchstaben und/oder Ziffern gibt.

    Weiß das jemand von Euch?


    Zitat von Bitnugger

    Ändert sich der Dateiinhalt (und somit auch der Hash), kann eine zuvor gestartete Version aber nicht mehr erkannt werden

    Das verstehe ich – allerdings bin ich gar nicht auf den Gedanken gekommen, dass jemand ein Skript laufen lässt, es erst dann ändert und dann eine zweite Instanz davon startet und eventuell erwartet, dass der Hash identisch bleibt.

    Wenn ich ein Skript geändert habe, dann beende ich zuvor die laufende Instanz des gleichen Scripts, bevor ich es das erste Mal starte.

    Ab dem zweiten Start würde der Hash in der Titelzeile mit der ersten Instanz übereinstimmen, wie das Beispiel unten zeigt.

    So erkenne ich, dass es das gleiche Script ist und das ist mein Ziel. Ein Hash ist mir im Vergleich zur obg. ASIN nur zu lang.

    Danke für die Anregung und für Deine hilfreichen Zeilen.


    Zitat von Professor Bernd

    aus der Nase ziehen

    Professor Bernd - hier etwas lauffähiges.

    Code
    #include <Crypt.au3> 
    $titel = _Crypt_HashFile(@ScriptFullPath,$CALG_MD5)
    MsgBox ( 0 , " aus der Nase ziehen - " & $titel , "So sieht die Titelzeile eines Fensters aus - hier am Beispiel eines lauffähigen Messagebox-Fensters." )

    In meinem Post vor Deiner Aufforderung schrieb ich:

    "Wird das unveränderte Skript erneut aufgerufen, wäre der neu berechnete Hash identisch mit der vorher gestarteten Instanz ..."

    Startest Du das Script aus diesem Post 2x als au3 Datei (oder 2x als exe), erhälst Du 2x Messageboxen mit dem gleichen Hash im Titel des Fensters.

  • _Singleton Fensterhandle

    • Banana_2_Day
    • 9. September 2020 um 22:33
    Zitat von Professor Bernd

    Klingt interessant. Poste mal Code dazu.

    Der steht in Post 5/8 - hier nochmal.

    Laut bisherigem Feedback soll das keine so gute Idee von mir sein. Ich werde das mal über längere Zeit testen, ob das für mich ein praktikabler Weg wäre.

    Code
    #include <Crypt.au3> 
    $titel = _Crypt_HashFile(@ScriptFullPath,$CALG_MD5)
    winsettitle ...$titel
  • _Singleton Fensterhandle

    • Banana_2_Day
    • 9. September 2020 um 11:12
    Zitat von Bitnugger

    Keine gute Idee... denn dann darf das Script nicht mehr bearbeitet werden, da sich sonst ja auch der Hash ändert und somit nicht mehr gefunden wird.

    Das Skript darf bearbeitet werden, da der/die/das Hash bei jedem Aufruf von dem Skript erneut berechnet wird und erst dann Bestandteil der Fenster-Titelzeile wird.

    Wird das unveränderte Skript erneut aufgerufen, wäre der neu berechnete Hash identisch mit der vorher gestarteten Instanz - richtig?

    Code
    #include <Crypt.au3> 
    $titel = _Crypt_HashFile(@ScriptFullPath,$CALG_MD5)
    winsettitle ...$titel
    Zitat von Bitnugger

    Ich kenne viele Programme, bei denen sich der Titel ständig ändert... alle haben eines gemeinsam... ein Teil des Titels bleibt immer gleich

    Dafür wollte ich einen Hashwert nehmen, da dieser eindeutig wäre.

    Um 99 Kiwis auseinanderzuhalten, ist ein automatisch berechnetes "Kiwis Hashwert" im Titel für mich einfacher als Kiwi 3, 4 ... ups ... wieviele Kiwis hatte ich bereits programmiert?

    Die von Dir zitierten Programme wie TC und Co sind per se unterschiedlich (Funktion, Name ...).

    Bei mir gibt es x Fenster "Kiwi" (kleine und annähernd fast identische Tools), die einen erkennbaren, automatischen Zusatz im Titel brauchen.

    Daher die Idee mit dem Hash des Scripts im hinteren Titelteil.

    Danke für die interessanten Anregungen.

    Zitat von AspirinJunkie

    Staffelstab: Nur derjenige der ihn gerade besitzt darf rennen, alle anderen müssen warten bis der Läufer ihn wieder freigibt.

    verstanden :)

  • _Singleton Fensterhandle

    • Banana_2_Day
    • 9. September 2020 um 01:16
    Zitat von Bitnugger

    Mutex Objekt.

    Wie kann man Mutex Objekt am einfachsten erklären? Bei Wiki und Co nachgelesen, aber so richtig einleuchtend ist mir nicht, was ein Mutex Objekt ist.

    Zitat von Bitnugger

    Doch mit einem versteckten Label ist das kein Problem - so würde ich es machen:

    Danke für den Lösungsansatz - eine gute Idee.


    Was haltet Ihr von folgendem Ansatz und wie kann man den verbessern?

    Code
    #include <Crypt.au3> 
    $titel = _Crypt_HashFile(@ScriptFullPath,$CALG_MD5)

    Erhält man so den Hash für die Datei, den man in den Fenstertitel ans Ende als unveränderlichen und eindeutigen Wert setzen könnte?

    Dann könnte wieder winactivate verwendet werden.

    Problem bei dieser Variante wird sein, dass eine kompilierte exe-Datei einen anderen Hash hat als die ausgeführte .au3-Datei hat – richtig?

    Gibt es eine bessere Möglichkeit, einen eindeutigen Schlüssel für eine au3 und die zugehörige kompillierte exeDatei automatisiert zu erstellen, der im Fenstertitel am Ende eingebunden wird? Der Schlüssel muss für die au3 und die zugehörige kompillierte exeDatei identisch sein.

    Ein anderes AutoIt-Skript (egal ob kompiliert oder nicht) soll in der Ausführung nicht den gleichen Schlüssel erhalten können.

  • _Singleton Fensterhandle

    • Banana_2_Day
    • 8. September 2020 um 00:23
    Zitat von alpines

    Wenn ein Teil des Fenstertitels identisch bleibt.

    Leider nein, daher suche ich das Handle. Wenn mit der Funktion _Singleton der zuerst gestartete Prozess erkannt wird, dann müsste er über AutoIt auch greifbar sein. Die Frage ist nur wie?

  • _Singleton Fensterhandle

    • Banana_2_Day
    • 7. September 2020 um 23:13

    Hallo,

    wenn eine Instanz bereits von dem Skript läuft – auch wenn sie minimiert ist – möchte ich sie aktivieren.

    Über den Fenstertitel kann ich die vorherige Instanz nicht identifizieren, der dieser mehrfach während der Laufzeit geändert wird.

    C
    #include <Misc.au3>
    #include <MsgBoxConstants.au3>
    
    If _Singleton("Skript", 1) = 0 Then
        MsgBox($MB_SYSTEMMODAL, "Warnung", "Eine Instanz des Skripts wird bereits ausgeführt!")
        $handle = ... bereits laufenende Instanz ... ???
        WinActivate($handle)
        Exit
    EndIf
    MsgBox($MB_SYSTEMMODAL, "Alles i.O.", "Die erste Instanz des Skripts läuft.")

    Wie erhalte ich das Handle von jenem Prozess, den _Singleton als bereits zuvor gestarteten Prozess erkannt hat?

  • Globale Variable ändern

    • Banana_2_Day
    • 28. August 2020 um 14:51

    Danke Bitnugger, ein guter Leersatz.

  • Globale Variable ändern

    • Banana_2_Day
    • 28. August 2020 um 12:52

    Danke alpines. Ein interessanter Fakt.

    Zitat von alpines

    Globale Variablen werden maskiert wenn du Funktionsparameter

    Theoretische Überlegung - wenn das nicht gemacht würde, wo und wie könnte das kollidieren?


    Übrigens - ist folgendes richtig? Vereinfacht gesagt:

    geht

    Code
    Global $test
    _test_c_($test)
    Func _test_c_($ich_muss_anders_heissen)

    geht nicht

    Code
    Global $test
    _test_c_($test)
    Func _test_c_($test)

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™