Text aus Datei mit aktueller Variable vergleichen

  • Hi Leute,
    ich hab in meinem Programm, eine Art "Texteditor" ein Menü, in dem es "Speichern", und "Speichern als" gibt. Die Speicher-Funktion an sich ist kein Problem, doch, wie in anderen Programmen, möchte ich, dass wenn der Texte aus dem Editor noch genau mit dem Text in der Datei , also einer Textdatei, übereinstimmt, der "Speichern"-punkt deaktiviert ist. Also mein eigentliches Problem ist das Vergleichen...

    Im Moment sieht der "Speichern"-Part so aus:

    [autoit]

    If $msg = $saveitem Then
    FileWrite($filesa, $Ausgabe)
    GUICtrlSetData($statuslabel, "Status: gespeichert!")
    Sleep(5000)
    GUICtrlSetData($statuslabel, "Status:"&$defaultstatus)
    EndIf

    [/autoit]

    Dabei handelt es sich bei der Variable $filesa um den Pfad, der ja mindestens einmal mit der "Speicher als"-Funktion angegeben sein muss, un bei $Ausgabe um das Editfelt.

    Ich denke mal das wird am Ende dann irgentwie so aussehen:

    [autoit]

    If $Ausgabe = $Datei Then $saveitem = GUICtrlSetState(-1, $GUI_DISABLE)

    [/autoit]

    (Oder so ähnlich... :P Das soll jz nur der Logig dienen! :D )

    Ich hoffe ihr ihr könnt mir helfen, wo ich mir eig. ziemlich sicher bin! ;)

    MFG Mr.Geheim

  • Entweder hab ich was falsch gemacht, oder es hat net gefunzt...

    Aber ich weiß garnet... ich hätte des anderster gemacht, also erst die $Ausgabe einlesen, dann den Text aus der Datei und dann miteinander vergleichen...

  • Zitat

    Aber ich weiß garnet... ich hätte des anderster gemacht, also erst die $Ausgabe einlesen, dann den Text aus der Datei und dann miteinander vergleichen...


    Genau das macht mein Beispiel auch... Nur ist bei mir $Edit die ID des EditControls und $Datei der Pfad zur Datei. ;)

  • Schon klar, aber die Frage ist, der == Operator die Zeichenketten miteinader überprüft... ^^

    Ich habe es auch so auprobiert:


    [autoit]

    If GUICtrlRead($Ausgabe) == FileRead($filesa) Then GUICtrlSetState(-1, $GUI_DISABLE)

    [/autoit]

    Es kommt immer ein Variablen-Fehler auf die $filesa bezogen... ?(

  • Zitat

    Es kommt immer ein Variablen-Fehler auf die $filesa bezogen... ?(


    Vielleicht verwendest du sie bevor du sie deklariert hast? Ich kann dir da nicht wirklich helfen ohne das Script zu sehen ;).

    Zitat

    Schon klar, aber die Frage ist, der == Operator die Zeichenketten miteinader überprüft...


    "==" ist ein Vergleichsoperator für Strings, der Groß-/Kleinschreibung berücksichtigt. Wenn du noch mehr über Operatoren wissen willst, dann gib mal in Scite "Operatoren" ein markiere den Text und drücke F1.

  • Spoiler anzeigen
    [autoit]

    While 1
    $msg = GUIGetMsg()
    If $msg = $newitem Then
    GUISetState(@SW_HIDE)
    _MAIN ()
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $msg = $openitem Then
    $fileo = FileOpenDialog("BZ-Writer-Datei öffnen...", @Tempdir, "BZ-Writer-Datei (*.BZWD)|Alle (*.*)", 1 + 8)
    $verschl = _StringEncrypt(0, FileRead($fileo), 10)
    FileDelete($fileo)
    FileWrite($fileo, $verschl)
    $fileread = FileRead($fileo)
    If FileRead($fileo) Then
    $Ausgabe = $fileread
    Endif
    GUICtrlSetData($editfield, $Ausgabe)
    If @error <> 1 Then GUICtrlCreateMenuItem($fileo, $recentfilesmenu)
    If @error <> 1 Then GUICtrlSetData($statuslabel, "Status: geöffnet!")
    Sleep(5000)
    GUICtrlSetData($statuslabel, "Status:"&$defaultstatus)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $msg = $saveitem Then
    GUICtrlSetData($statuslabel, "Status: gespeichert!")
    Sleep(5000)
    GUICtrlSetData($statuslabel, "Status:"&$defaultstatus)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $msg = $saveasitem Then
    $filesa = FileSaveDialog("Speichern...", @Tempdir, "BZ-Writer-Datei (*.BZWD)", 2 + 16)
    FileWrite($filesa, $Ausgabe)
    $verschl = _StringEncrypt(1, FileRead($filesa), 10)
    FileDelete($filesa)
    FileWrite($filesa, $verschl)
    If @error <> 1 Then GUICtrlSetData($statuslabel, "Status: gespeichert!")
    Sleep(5000)
    GUICtrlSetData($statuslabel, "Status:"&$defaultstatus)
    EndIf

    [/autoit] [autoit][/autoit] [autoit]

    If $msg = $saveandcloseitem Then
    $filesac = FileSaveDialog("Speichern...", @Tempdir, "BZ-Writer-Datei (*.BZWD)", 2 + 16)
    FileWrite($filesac, $Ausgabe)
    $verschl = _StringEncrypt(1, FileRead($filesa), 10)
    FileDelete($filesac)
    FileWrite($filesac, $verschl)
    If @error <> 1 Then GUICtrlSetData($statuslabel, "Status: gespeichert!")
    Sleep(2000)
    GUICtrlSetData($statuslabel, "Status: Tschüss!")
    Sleep(2000)
    Exit
    EndIf

    [/autoit]


    Hier ist der Code. Bin gerade am Schreiben der Verschlüsselung... Auch anderes ist noich nicht fertig :pinch: Falls du etwas anderes vom Code brauchst sag bescheid! Ich weiß ja net... ^^

    Edit: Dein Codefragment ist hier im Moment nicht drinne!

  • Wie soll ich dass machen wenn die Datei erst mit dem "Speichern als" erstellt wird.. wohl am besten mit einer fileexist-Abfrage und als Pfad @tempdir, da der User ja dort am Letzten gewesen sein müsste, uns dann in der fileexist-Abfrage dann der Vergleich... 8o

    Die Frage ist, welchen Namen ich für die fileexist-Abfrage benutzen soll? :D

  • Mach doch einfach eine Variable die den Wert True bekommt wenn der momentane Text von einer Datei stammt, oder in einer gespeichert ist, und den Wert False bkommt wenn der Text neu erstellt wurde und keine dazugehörige Datei hat.
    Wenn die Variable True ist, dann kannst du den Text mit der Inhalt der Datei vergleichen, wenn sie False ist, dann nicht ;).