Editfeld updaten

  • Oh moment, wurde vorhin aufgehalten, check ich gleich aus;)

    2min later...

    so jetzt gibbet zumindest nen Lebenszeichen, Datei konnte nicht gespeichert werden...Is doch wie verhext

    Einmal editiert, zuletzt von casi4712 (27. Juni 2022 um 11:52)

  • Moin,

    in diesem Fall wird die Datei ja immer komplett gelesen bzw. geschrieben. Es macht für mich deshalb nicht viel Sinn, per FileOpen() ein Dateihandle zu erzeugen, das dann doch gleich wieder geschlossen werden muss.

    FileRead() und FileWrite() akzeptieren auch den Dateinamen. Das scheint mir hier die bessere Option.

  • Velted Ist Fileread das nicht das gleiche wie Fileopen und Fileclose?

    Zitat von Hilfe

    If a filename is given rather than a file handle - the file will be opened and closed during the function call -

    Bzgl.: Filewrite: Musste man dazu die Datei nicht auch vorher mit Fileopen (mit schreibrechten) offen haben? Kenne das nur so, da aus der Hilfe so übernommen.

  • Moin Moombas,

    das Zitat aus Deinem lBeitrag #25 gilt meiner Meinung nach auch für FileWrite().

    FileOpen() ist für mich nur da wichtig, wo wiederholt auf Teile der Datei zugegriffen werden soll oder die Codierung vom Standard abweicht.

  • Moin Moombas,

    das Zitat aus Deinem lBeitrag #25 gilt meiner Meinung nach auch für FileWrite().

    Das Könnte sein und würde Sinn machen. Da es dort jedoch nicht erwähnt wird, habe ich das bisher immer mit Fileopen gemacht.

    Edit: Ich denke ich weiß warum ich es konsequent mal immer mit Fileopen gemacht habe. Um es immer gleich zu handhaben, denn:

    Zitat von Hilfe

    To write in another mode the file must be opened with FileOpen() and the relevant flags.

  • BTT:

    Mögliche Lösung :

    2 Mal editiert, zuletzt von Moombas (27. Juni 2022 um 14:20)

  • Zitat von FileWrite() -> Remarks

    If a filename is given rather than a file handle, the file will be opened and closed during the function call.

    Zitat von FileOpen()

    $FO_OVERWRITE (2) = Write mode (erase previous contents)

    Moombas, wenn Du die Datei mit $FO_OVERWRITE öffnest, wird der anschließende Aufruf von FileRead() nicht viel finden. ;)

  • Warum? Das bedeutet doch nur das die Datei komplett überschrieben wird. Warum sollte Fileopen das dann nicht finden?

    Er will ja nichts anfügen, sondern komplett ersetzen, sofern ich das richtig verstanden habe.

    ... Aber du hast teilweise Recht. Aber ansonsten würde per Standard hinten angehängt und das ist nicht das was gewünscht ist.

    Meine "Lösung" hatte jedoch einen Fehler, ist oben nun korrigiert und bestätigt meine Meinung in "Lieber mit Fileopen() und FileClose() arbeiten".

    3 Mal editiert, zuletzt von Moombas (27. Juni 2022 um 14:22)

  • Hey cool MOombas dass Du noch dran gedacht hast, irgend wie hatte ich ja schon son Berrechtigungsding befürchtet, aber jetzt funktioniert es.


    Recht herzlichen Dank, tut mir echt leid dass ich immer mit so Hammerdingern komme, dachte erst ist bestimmt eher ne simplere Geschichte, wünsche allen Helfern noch eine


    angenehme Woche

  • Naja so ein "Hammerding" war es eigentlich nicht.

    Man muss sich halt mal kurz damit beschäftigen und was die Funktionen eigentlich machen/erwarten.

    Blöd ist halt manchmal wenn man sein 0815 Vorbau hat und den 1:1 in den meisten Fällen nehmen kann, dann macht man sich über solche Kleinigkeiten keinen Kopf mehr, weshalb das bei mir nun auch länger gedauert hat als nötig gewesen wäre^^

  • Moombas

    Ich habe nicht gesagt, FileOpen() würde dann nichts finden. Ich habe gesagt FileRead().

    Und noch was:

    AutoIt
    Func _Form3()
        local Const $Filename = @ScriptDir & "\test.txt"
        local $file = FileOpen($Filename)
        ...
        global $iEdit = GUICtrlCreateEdit(FileRead($file), 0, 0, 500, 400, $ES_WANTRETURN + $WS_VSCROLL + $ES_AUTOVSCROLL + $ES_MULTILINE + $WS_TABSTOP)
        ...
        FileClose($file)

    ist identisch mit

    AutoIt
    Func _Form3()
        local Const $Filename = @ScriptDir & "\test.txt"
        ...
        global $iEdit = GUICtrlCreateEdit(FileRead($Filename), 0, 0, 500, 400, $ES_WANTRETURN + $WS_VSCROLL + $ES_AUTOVSCROLL + $ES_MULTILINE + $WS_TABSTOP)
        ...

    FileOpen() mit Standardwerten bringt hier keinen Vorteil, erfordert aber ein FileClose().

    AutoIt
    Case $hButton
        $file = FileOpen($Filename, $FO_OVERWRITE)
        If FileWrite($Filename, GuiCtrlRead($IEdit)) Then
            ...
        Endif
    FileClose($file)

    sollte in der Funktion FileWrite() $file benutzen oder (wie oben) die Funktionen FileOpen() und FileClose() weglassen.

  • Velted: Ja, man kann das hier im ersten Teil auch mit dem "nur" Fileread lösen. Wie gesagt ich bevorzuge das überall gleich zu handhaben und casi4712 kann natürlich selber entscheiden was/wie er es nutzt. Da es im Endeffekt so oder so ausgeführt wird macht es effektiv keinen Unterschied (in der aktuellen Konstellation, wo es nur 1 mal verwendet wird).

    Zudem ist das Fileclose durchaus vorhanden.

    AutoIt
    Case $hButton
        $file = FileOpen($Filename, $FO_OVERWRITE)
        If FileWrite($Filename, GuiCtrlRead($IEdit)) Then
            ...
        Endif
    FileClose($file)

    sollte in der Funktion FileWrite() $file benutzen oder (wie oben) die Funktionen FileOpen() und FileClose() weglassen.

    Genau der Fall funktioniert jedoch nicht. Teste es aus!

    Edit: Im Einzelnen:

    1. Wird das filehandle ($file) mitgeschleift und erst am Ende geschlossen, sind die Daten nicht aktuell bzw. können nicht gespeichert werden, womit diese Funktion nicht mehr gegeben ist.

    2. Wird nur Filewrite genutzt, wird an das Ende der Datei der Text angehängt anstatt ihn mit dem neuen Inhalt zu ersetzen.

    2 Mal editiert, zuletzt von Moombas (27. Juni 2022 um 15:43)

  • 2. Wird nur Filewrite genutzt, wird an das Ende der Datei der Text angehängt anstatt ihn mit dem neuen Inhalt zu ersetzen.

    Das hatte ich nicht mehr im Hinterkopf. FileWrite() ersetzt also das gute alte FileAppend (wie es in AutoHotkey noch immer existiert). ;)

    Es wäre nicht falsch, wenn die Hilfe-Datei darauf hinweisen würde. :rtfm:

  • Ok dann bedank ich mich noch mal abschliessend, und wo findet man nun solche essentiellen Erkenntnisse wie, das FileOpen nur Readonly liest?

    schönen Abend noch

    lf

    Chris

  • irgendwie wird außeracht gelassen das er meine Funktionen einfach benutzen kann.

    Es funktioniert.

    Grad mal aus POST #18 deinen Code kopiert meine funktionen reingesetzt und das script leicht verändert.

    sieh :

    Edit habs nochmal auf dich angepasst.

    die unnötigen stellen weggemacht und die Änderung kommentiert.

    Du solltest mit copie pase direkt loslegen können.

    2 Mal editiert, zuletzt von MojoeB (27. Juni 2022 um 21:42)

  • ... und wo findet man nun solche essentiellen Erkenntnisse wie, dass FileOpen nur Readonly liest?

    FileOpen ließt nicht nur Read-Only. Das ist lediglich der Standardmodus, falls kein anderer [optionaler Parameter] Mode nach dem Dateinamen angegeben wird.

    siehe Hilfe : FileOpen

    Spoiler anzeigen

    Öffnet eine Datei zum Lesen oder Schreiben.

    FileOpen ( "filename" [, mode = 0] )

    Parameter

    filename Dateiname der zu öffnenden Datei.
    mode [optional] Modus in dem die Datei geöffnet werden soll.
    Kann auch eine Kombination aus folgenden sein:
        $FO_READ (0) = Lesemodus (Standard)
    $FO_APPEND (1) = Schreibmodus (anhängend an das Dateiende)
    $FO_OVERWRITE (2) = Schreibmodus (löschen des vorherigen Inhaltes)
    $FO_CREATEPATH (8) = Anlegen der Verzeichnisstruktur, wenn sie nicht existiert (siehe Bemerkungen).
    $FO_BINARY (16) = Erzwingt den Binärmodus (Siehe Bemerkungen)
    $FO_UNICODE or $FO_UTF16_LE (32) = Verwendet Unicode-UTF16 mit Little-Endian-Kodierung im Lese- und Schreibmodus
    $FO_UTF16_BE (64) = Verwendet Unicode-UTF16 mit Big-Endian-Kodierung im Lese- und Schreibmodus.
    $FO_UTF8 (128) = Verwendet Unicode-UTF8 Kodierung im Lese- und Schreibmodus.
    $FO_UTF8_NOBOM (256) = Verwendet Unicode-UTF8 (ohne BOM) im Lese- und Schreibmodus.
    $FO_ANSI (512) = Verwendet ANSI im Lese- und Schreibmodus.
    $FO_UTF16_LE_NOBOM (1024) = Verwendet Unicode UTF16 Little Endian (ohne BOM) im Lese- und Schreibmodus.
    $FO_UTF16_BE_NOBOM (2048) = Verwendet Unicode UTF16 Big Endian (ohne BOM) im Lese- und Schreibmodus.
    $FO_UTF8_FULL (16384) = Wenn zum Lesen geöffnet wird und kein BOM verfügbar ist, so wird auf die komplette Datei UTF8 oder UTF16 Erkennung angewendet. Falls dies nicht verwendet wird, so wird aus Performancegründen nur der Anfang der Datei (bis zu 64KB) untersucht.
    Der Verzeichnispfad muss bereits vorhanden sein (außer mode $FO_CREATEPATH wird verwendet - siehe Bemerkungen).

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