_FileWritetoLine und Fileinstall

  • Hallo zusammen,

    ich bräuchte noch mal eure Hilfe :)

    Hier der Code bzw ein Auszug


    Nun zu meinem Problem. Wenn ich auf den Button_Window_neu_anlegen_OK klicke öffnet sich, so wie es sein soll, der SaveDialog und ich kann den Pfad meiner Datei auwählen. Aber leider wird die Datei nicht erzeugt.
    Merkwürdig ist, wenn ich _FileWritetoLine durch FileWriteLine ersetze, wird die Datei angelegt und alles wird nacheinander reingeschrieben. Ich würde halt gerne steuern können in welche Zeile ich was schreibe.
    Und ja ich habe die File.au3 eingebunden.

    Wisst Ihr worand das liegen könnte?

    Mit freundlichen Grüßen
    Mikki

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.

  • Hallo @Mikki,
    dein Problem ist, dass du mit _FileWriteToLine in eine Datei schreiben willst, die nicht schon existiert. Eine @error Prüfung müsste dir das auch mitteilen.

    AutoIt
    FileInstall($sFileSaveDialog_Auftrag, @ScriptDir & "\Auftrag.ini")

    Das hier ist ein Fehler. FileInstall ist zum Inkludieren von Dateien in kompilierte Skripte und kann keine Variablen enthalten. Zumal du keine zum Zeitpunkt der Kompilierung vorhandene Datei inkludieren willst (?) sondern das Ergebnis des Dialogs während der Ausführung (?). Erstelle z.B. nach Buttondruck die Datei mit FileOpen und schreibe dann hinein.

    Grüße autoiter

  • Hallo @autoiter,

    verstehe also sollte ich FileInstall durch FileOpen ersetzen? Habe ich das Richtig verstanden?

    Das habe ich jetzt mal gemacht. Die Datei wird zwar jetzt erzeugt, aber leider kein Inhalt eingetragen.

    Grüße Mikki

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.

    • Offizieller Beitrag

    Du musst beim speichern das Handle (Rückgabe von FileOpen) benutzen:

    AutoIt
    $hFile = FileOpen($sFileSaveDialog_Auftrag, 2)
    If $hFile <> -1 Then
    	FileWriteLine($hFile, "[Allgemeine Auftragsdaten]")
    	FileWriteLine($hFile, $READ_Input_Window_neu_anlegen_Bauvorhaben)
    	FileWriteLine($hFile, $READ_Input_Window_neu_anlegen_Adresse)
    	FileWriteLine($hFile, $READ_Input_Window_neu_anlegen_PLZ)
    	FileWriteLine($hFile, $READ_Input_Window_neu_anlegen_Bemerkung)
    	FileClose($hFile)
    EndIf
  • Hallo @Oscar,

    habe es gerade getestet. Leider bleibt die Datei noch immer leer.

    FileWriteLine kann ich leider nicht gebrauche, da ich ja genau bestimmen möchte, wo welche Variable gespeichert werden soll.

    MfG Mikki

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.

  • Hast du den FileSaveDialog mit OK bestätigt?
    Welchen Inhalt hat $sFileSaveDialog_Auftrag nach dem Dialog?
    Mindestens [Allgemeine Auftragsdaten] sollte nämlich in der Datei stehen..

    Grüße autoiter

  • Hallo,

    ja habe immer einen kurzen Dateinamen gegeben und bestätigt.

    Nein die Datei ist leer. Da steht nicht mal [Allgemeine Auftragsdaten] drin was mich schwer wundert.

    MfG Mikki

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.

  • Der Code, den Oscar gepostet hat, erstellt eine Datei, in der mindestens der genannte Text steht. Ansonsten kannst du alles mit @error prüfen.
    Ich gehe fest davon aus, dass es einen Fehler bei der Implemntierung in deinen Code gibt. Du musst da nochmal was zeigen.

    Grüße autoiter

  • Hallo,

    ich zeige euch mal den kompletten Code.

    Code
    Global $Input_Window_neu_anlegen_Bauvorhaben, $Input_Window_neu_anlegen_Adresse, $Input_Window_neu_anlegen_PLZ, $Input_Window_neu_anlegen_Bemerkung
    
    
    Global $Button_Window_Main_Neu_anlegen, $Button_Window_neu_anlegen_OK, $Button_Window_Main_Auftrag_bearbeiten
    
    
    Global $Window_Main, $Window_neu_anlegen
    Code
    Global $READ_Input_Window_neu_anlegen_Bauvorhaben, $READ_Input_Window_neu_anlegen_Adresse, $READ_Input_Window_neu_anlegen_PLZ, $READ_Input_Window_neu_anlegen_Bemerkung
    
    
    Global $sMessage, $sFileSaveDialog_Auftrag, $hFileOpen

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.

  • Du bist bei _FileWriteToLine geblieben, während Oscar FileWriteLine verwendet hat.

    Die Hilfe zu _FileWriteToLine sagt:

    Zitat von _FileWriteToLine

    Return Value

    Success: 1.
    Failure: 0 and sets the @error flag to non-zero.
    @error: 1 - File has fewer lines than $iLine2 - File does not exist3 - Error when opening file4 - $iLine is invalid
    5 - $iOverWrite is invalid
    6 - $sText is invalid

    Ergänze mal ein ConsoleWrite und schaue dir den Fehler in der Konsole an.

    AutoIt
    _FileWriteToLine($hFileOpen, 1, "[Allgemeine Auftragsdaten]")
    	If @error Then ConsoleWrite(@error & @CRLF)

    Da kommt der Fehlerwert 2 heraus. Aha, hat nicht geklappt, weil es die Zeile nicht gab.
    Nimm mal FileWriteLine und nutze die Rückgaben der Funktionen, um zu prüfen, ob sie erfolgreich waren oder nicht und warum nicht.

    Grüße autoiter

  • Hallo,

    habe es mal mit FileWriteLine versucht und die Rückgaben waren erfolgreich. Das was ich eingegeben habe, wurde auch in die Datei geschrieben.

    Würde es aber gerne vermeiden, alles direkt untereinander zu schreiben, wie es FileWriteLine nunmal macht.

    MfG Mikki

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.

    • Offizieller Beitrag

    "_FileWriteToLine" macht nur Sinn, wenn Du einzelne Zeilen in einer bestehenden Datei ändern/hinzufügen willst.
    Beim neu erstellen sollte man stets FileOpen verwenden und FileWrite bzw. FileWriteLine.

    Du schreibst, dass Du nicht alles direkt untereinander haben willst, wie soll es denn sonst aussehen?

  • Okay habe ich verstanden.
    Gut dann nutze ich diese Lösung.

    Ja ich hatte mir gedacht dass ich dann in einem bestimmten Bereich (z.B. Zeile 40-65 ein bestimmter Teil von Informationen drin steht und von 70-90 wieder ein anderer Teil von Informationen)
    Also dass man leichter erkennen kann was wo ist.

    Aber ich denke ich komme damit auch zurecht.

    Danke euch beiden :)

    MfG Mikki

    Probleme kann man niemals mit derselben Denkweise lösen, durch die sie entstanden sind.