Zufällige Daten aus ini wiedergeben.

  • Aber dennoch schreibt er in die txt datei eine 3 zwischen den Tags.

    So sieht mein Code aus.

    [autoit]

    #include <File.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Global $Datenbank = "data.txt"

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

    If FileExists($Datenbank) Then
    MsgBox(4096, "Überprüfen", "Datenbank ist Vorhanden")
    Else
    MsgBox(4096,"Überprüfen" , "Datenbank existiert nicht. Sie wird nun erstellt.")
    _FileCreate($Datenbank)
    FileWrite($Datenbank, "<normal>")
    FileWrite($Datenbank, "</normal>")
    FileWrite($Datenbank, @CRLF & @CRLF)
    FileWrite($Datenbank, "<hardcore>")
    FileWrite($Datenbank, "</hardcore>")
    EndIf

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 538, 239, 355, 216)
    $Edit1 = GUICtrlCreateEdit("", 16, 8, 505, 193)
    $BtnNormal = GUICtrlCreateButton("Speichern Normal", 80, 208, 137, 25)
    $BtnHardcore = GUICtrlCreateButton("Speichern Hardcore", 320, 208, 137, 25)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $BtnNormal
    If $BtnNormal Then
    _WriteBetweenTag($Datenbank, 'normal', $Edit1)
    EndIf
    Case $BtnHardcore
    If $BtnHardcore then
    _WriteBetweenTag($Datenbank, 'hardcore', $Edit1)
    EndIf
    EndSwitch
    WEnd

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

    Func _WriteBetweenTag($sFilePath, $sTag, $sText)
    Local $iLines = _FileCountLines($sFilePath)
    For $i = $iLines To 1 Step -1
    If FileReadLine($sFilePath, $i) = "</" & $sTag & ">" Then ExitLoop
    Next
    If $i = 1 Then Return SetError(1,0,0)
    Return _FileWriteToLine($sFilePath, $i, $sText)
    EndFunc

    [/autoit]
  • Ok danke funktioniert.
    Jetzt brauch ich nur noch die funktion zum ausgeben.

    So sieht mein Code aus. Ich weis nicht wie ich das in die edit box bekomme also die jeweiligen daten.

    [autoit]

    #include <String.au3>
    #include <Array.au3>
    #include <File.au3>
    #include <ButtonConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("Form1", 538, 239, 355, 216)
    $Edit1 = GUICtrlCreateEdit("", 16, 8, 505, 193)
    $BtnNormal = GUICtrlCreateButton("Lesen Normal", 80, 208, 137, 25)
    $BtnHardcore = GUICtrlCreateButton("Lesen Hardcore", 320, 208, 137, 25)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    $sFileRead = FileRead('data.txt')

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $nMsg = $BtnNormal
    If $BtnNormal Then
    $aRet = _StringBetween($sFileRead, '<normal>' & @CRLF, @CRLF & '</normal>')
    $aNormal = StringSplit($aRet[0], @CRLF, 3)
    ConsoleWrite($aNormal[Random(0,UBound($aNormal)-1,1)] & @CRLF)
    EndIf

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

    Case $nMsg = $BtnHardcore
    If $BtnHardcore Then
    $aRet = _StringBetween($sFileRead, '<hard>' & @CRLF, @CRLF & '</hard>')
    $aHard = StringSplit($aRet[0], @CRLF, 3)
    ConsoleWrite($aHard[Random(0,UBound($aHard)-1,1)] & @CRLF)
    EndIf

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

    EndSwitch
    WEnd

    [/autoit]
  • Was genau willste den in dem Feld anzeigen lassen?

    Meine Projekte :

    Taschenrechner [X]
    JamLegend Auto-Player [Canceld]
    Launcher [X]
    Multi-Game-Quest-Viewer [Canceld]


    [autoit]

    If $goffy or not $brain Then $DeleteInetCable

    [/autoit]
  • Klickt man auf den Button Lesen normal so zeigt er eine zufallszeile aus dem normal tag an klickt man auf Lesen Hardcore zeigt er eine zufalls zeile aus dem tag Hardcore.... aber es sollte halt in der Editbox angezeigt werden

  • Also wenn ich das so mache:

    [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $nMsg = $BtnNormal
    If $BtnNormal Then
    $aRet = _StringBetween($sFileRead, '<normal>' & @CRLF, @CRLF & '</normal>')
    $aNormal = StringSplit($aRet[0], @CRLF, 3)
    GUICtrlSetData($Edit1, $aNormal[Random(0,UBound($aNormal)-1,1)])
    EndIf

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

    Case $nMsg = $BtnHardcore
    If $BtnHardcore Then
    $aRet = _StringBetween($sFileRead, '<hard>' & @CRLF, @CRLF & '</hard>')
    $aHard = StringSplit($aRet[0], @CRLF, 3)
    GUICtrlSetData($Edit1, $aHard[Random(0,UBound($aHard)-1,1)])
    EndIf

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

    EndSwitch
    WEnd

    [/autoit]

    Dann flackert es in der edit box und ich kann auch keine neuen daten auslesen. klicke ich auf hardcore so schliest das programm.

  • Spoiler anzeigen
    [autoit]

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $BtnNormal
    $aRet = _StringBetween($sFileRead, '<normal>' & @CRLF, @CRLF & '</normal>')
    $aNormal = StringSplit($aRet[0], @CRLF, 3)
    GUICtrlSetData($Edit1, $aNormal[Random(0, UBound($aNormal) - 1, 1)] & @CRLF)
    EndIf

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

    Case $BtnHardcore
    $aRet = _StringBetween($sFileRead, '<hard>' & @CRLF, @CRLF & '</hard>')
    $aHard = StringSplit($aRet[0], @CRLF, 3)
    GUICtrlSetData($Edit1, $aHard[Random(0, UBound($aHard) - 1, 1)] & @CRLF)
    EndIf
    EndSw

    [/autoit]
  • Habe doch noch was gefunden.

    Also ich möchte das man die daten editieren und löschen kann.
    Den Code habe ich schon aber ka wie ich die funktionen machen soll.

    Hier mein code:

    [autoit]

    #include <File.au3>
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Global $Datenbank = @ScriptDir & "\data\data.txt"

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

    If FileExists($Datenbank) Then
    MsgBox(4096, "Überprüfen", "Datenbank ist Vorhanden")
    Else
    MsgBox(4096,"Überprüfen" , "Datenbank existiert nicht. Sie wird nun erstellt.")
    _FileCreate($Datenbank)
    FileWrite($Datenbank, "<normal>" & @CRLF)
    FileWrite($Datenbank, "</normal>")
    FileWrite($Datenbank, @CRLF & @CRLF)
    FileWrite($Datenbank, "<hardcore>" & @CRLF)
    FileWrite($Datenbank, "</hardcore>")
    EndIf

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("ExoPlay", 554, 330, -1, -1)
    $Edit1 = GUICtrlCreateEdit("", 16, 24, 521, 153)
    $BtnNormal = GUICtrlCreateButton("Speichern Normal", 16, 184, 257, 33)
    $BtnHardcore = GUICtrlCreateButton("Speichern Hardcore", 280, 184, 257, 33)
    $Combo1 = GUICtrlCreateCombo("Wähle eine Aufgabe die gelöscht werden soll!", 16, 256, 521, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
    $Group1 = GUICtrlCreateGroup("Aufgaben erstellen", 8, 8, 537, 217)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup("Aufgaben Editieren", 8, 232, 537, 89)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $BtnEdit = GUICtrlCreateButton("Aufgabe Editieren", 16, 280, 257, 33)
    $BtnDelete = GUICtrlCreateButton("Aufgabe Löschen", 280, 280, 257, 33)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $BtnNormal
    If $BtnNormal Then
    _WriteBetweenTag($Datenbank, 'normal', GUICtrlRead($Edit1))
    EndIf
    MsgBox(4096,"Eingetragen", "Daten wurden in die Datenbank gespeichert")
    Case $BtnHardcore
    If $BtnHardcore then
    _WriteBetweenTag($Datenbank, 'hardcore', GUICtrlRead($Edit1))
    EndIf
    MsgBox(4096,"Eingetragen", "Daten wurden in die Datenbank gespeichert")
    EndSwitch
    WEnd

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

    Func _WriteBetweenTag($sFilePath, $sTag, $sText)
    Local $iLines = _FileCountLines($sFilePath)
    For $i = $iLines To 1 Step -1
    If FileReadLine($sFilePath, $i) = "</" & $sTag & ">" Then ExitLoop
    Next
    If $i = 1 Then Return SetError(1,0,0)
    Return _FileWriteToLine($sFilePath, $i, $sText)
    EndFunc

    [/autoit]
  • Also soweit bin ich gekommen:

    Spoiler anzeigen
    [autoit]

    #include <File.au3>
    #include <ButtonConstants.au3>
    #include <ComboConstants.au3>
    #include <EditConstants.au3>
    #include <GUIConstantsEx.au3>
    #include <WindowsConstants.au3>

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

    Global $Datenbank = @ScriptDir & "\data\data.txt"

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

    If FileExists($Datenbank) Then
    MsgBox(4096, "Überprüfen", "Datenbank ist Vorhanden")
    Else
    MsgBox(4096,"Überprüfen" , "Datenbank existiert nicht. Sie wird nun erstellt.")
    _FileCreate($Datenbank)
    FileWrite($Datenbank, "<normal>" & @CRLF)
    FileWrite($Datenbank, "</normal>")
    FileWrite($Datenbank, @CRLF & @CRLF)
    FileWrite($Datenbank, "<hardcore>" & @CRLF)
    FileWrite($Datenbank, "</hardcore>")
    EndIf

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

    $Read = FileReadLine ($Datenbank)

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

    #Region ### START Koda GUI section ### Form=
    $Form1 = GUICreate("ExoPlay", 554, 330, -1, -1)
    $Edit1 = GUICtrlCreateEdit("", 16, 24, 521, 153)
    $BtnNormal = GUICtrlCreateButton("Speichern Normal", 16, 184, 257, 33)
    $BtnHardcore = GUICtrlCreateButton("Speichern Hardcore", 280, 184, 257, 33)
    $Combo1 = GUICtrlCreateCombo("Wähle eine Aufgabe die gelöscht werden soll!", 16, 256, 521, 25, BitOR($CBS_DROPDOWN,$CBS_AUTOHSCROLL))
    GUICtrlSetData(-1, $Read)
    $Group1 = GUICtrlCreateGroup("Aufgaben erstellen", 8, 8, 537, 217)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $Group2 = GUICtrlCreateGroup("Aufgaben Editieren", 8, 232, 537, 89)
    GUICtrlCreateGroup("", -99, -99, 1, 1)
    $BtnEdit = GUICtrlCreateButton("Aufgabe Editieren", 16, 280, 257, 33)
    $BtnDelete = GUICtrlCreateButton("Aufgabe Löschen", 280, 280, 257, 33)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $BtnNormal
    _WriteBetweenTag($Datenbank, 'normal', GUICtrlRead($Edit1))
    MsgBox(4096,"Eingetragen", "Daten wurden in die Datenbank gespeichert")

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

    Case $BtnHardcore
    _WriteBetweenTag($Datenbank, 'hardcore', GUICtrlRead($Edit1))
    MsgBox(4096,"Eingetragen", "Daten wurden in die Datenbank gespeichert")
    EndSwitch
    WEnd

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

    Func _WriteBetweenTag($sFilePath, $sTag, $sText)
    Local $iLines = _FileCountLines($sFilePath)
    For $i = $iLines To 1 Step -1
    If FileReadLine($sFilePath, $i) = "</" & $sTag & ">" Then ExitLoop
    Next
    If $i = 1 Then Return SetError(1,0,0)
    Return _FileWriteToLine($sFilePath, $i, $sText)
    EndFunc

    [/autoit]

    Nur bekomm ich das nicht hin das er mir zeile für zeile die einträge zeigt und wie man die editiert oder löscht weis ich sowieso net^^ hab ansich noch nicht viel mit dateien gearbeitet^^ und mit tags noch garnicht

    • Offizieller Beitrag

    Nur bekomm ich das nicht hin das er mir zeile für zeile die einträge zeigt und wie man die editiert oder löscht weis ich sowieso net^^ hab ansich noch nicht viel mit dateien gearbeitet^^ und mit tags noch garnicht


    Wie man aus der Datei einliest habe ich doch oben bereits gezeigt. Die Daten sind dann in einem Array. Und dieses kannst du dann Element für Element abarbeiten:
    - For-Schleife ( Element 0 bis Ubound(Array)-1 )
    für jedes Element (wenn es bearbeitet werden soll):
    - Element auslesen, in Variable $oldValue zwischenspeichern
    - z.B. in ein Inputfeld einfügen
    - bearbeiten
    - Inputfeld auslesen
    - in Datei die Zeile mit $oldValue suchen ( ähnlich, wie in der Funktion _WriteBetweenTag )
    - Zeile überschreiben mit gelesenem Wert aus Input ( _FileWriteToLine($sFile, $iLine, $sText, 1) )

    Folgendes ist nicht zu empfehlen:

    [autoit]

    _WriteBetweenTag($Datenbank, 'hardcore', GUICtrlRead($Edit1))

    [/autoit]


    Besser:
    - $value = GUICtrlRead($Edit1)
    - prüfen ob überhaupt Inhalt, wenn nicht keine Weiterverarbeitung
    - evtl. Leerzeilen entfernen
    - evtl. abschließende Zeilenumbrüche entfernen
    - erst dann in die Datei schreiben

    Übrigens: Tags sind doch nur markante Platzhalter, die es ermöglichen in einer Textdatei Inhalte schnell aufzufinden.

    • Offizieller Beitrag

    Sry ich versteh nur bahngof =(
    Wenn ich das als Codebeispiel seh, kann ich es mir besser einprägen.


    Wenn ich dir den fertigen Code liefer lernst du nichts dabei. Ich habe nun schon jeden Schritt einzeln dargelegt, die Vorgehensweise im Detail beschrieben. Du mußt nur noch die Anweisungen in Code umsetzen.
    Die enthaltenen Verweise auf zu benutzende Funktionen/Controls sollten es dir unter Nutzung der AutoIt-Hilfe ermöglichen selbst aktiv zu werden. Wenn es dann nicht richtig paßt, kannst du gerne wieder fragen.

    Aber ich denke, es ist angemessen, dass wir von den Usern auch Eigeninitiative erwarten. Wir werden hierfür nicht bezahlt sondern opfern unsere freie Zeit. Und falls sich herausstellt, dass du nicht Willens bist, dich selbst zu bemühen, werde ich auch keinen weiteren Support leisten.