bestimmte stelle aus txt auslesen

  • Hallo Leute möchte mich nochmal bedanken
    und habe leider auch ein neues prob

    im jetztigen script passiert ja folgendes
    (exp 20) *3 =(exp 60)
    und das funktioniert das problem ist das ich diese methode gerne noch bei einer anderen txt verwenden möchte
    aber das steht es nicht so (exp 20) sondern so (money 20 40)
    also mit einer leertatse zwischen den zahlen habe mal versucht das im script anzupassen hatte aber nicht geklappt
    weis da jemand rat evt. ?

  • Xenobiologist
    ich habe es jetzt geschaft er macht was er soll nur ein riesen problem
    es kommt ne fehlermeldung
    und zwr unterminatet strin ">
    oder so und zwar hier

    Spoiler anzeigen
    [autoit]

    ; Brav alle Variablen deklarieren
    Local $filename = @ScriptDir & '\testdatei.txt' ; Name der Datei
    Local $meinarray ; Darin lege ich die Datei ab und ändere den Wert auf den neuen
    Local $newEXP = ""
    Local $nLfd ; einfach ein Variable zum zählen

    [/autoit]


    Xenobiologist der script is im anhang
    P.S. der fehler mit dem string is bei dem anhang gelöscht (er ersetzt somit kein G)
    ich brauche aber noch immer abhilfe bei dem fehler...

  • Xenobiologist ach ja ich wollte dir nur sagen das ich das mit dem Stringreplace nicht auf das neue umbauen kann ich bekomme das nicht hin was ist hier falsch ?

    Spoiler anzeigen
    [autoit]

    ; Brauch ich für das einlesen der Datei und das schreiben
    #include <File.au3>
    #include <GUIConstants.au3>

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

    Const $szIniName = StringLeft("C:\EXP-Changer.ini",StringInStr("C:\EXP-Changer.ini",".",0,-1)) & "ini"
    Const $szIniNam = StringLeft("C:\EXP-Changer.ini",StringInStr("C:\EXP-Changer.ini",".",0,-1)) & "ini"
    Const $szIniNa = StringLeft("C:\EXP-Changer.ini",StringInStr("C:\EXP-Changer.ini",".",0,-1)) & "ini"

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

    #Region ### START Koda GUI section ### Form=c:\users\wow-unit\desktop\exp.kxf
    $Exp = GUICreate("Exp-Editor", 344, 172, 429, 403)
    GUISetBkColor(0x000000)
    $Button1 = GUICtrlCreateButton("Browse", 8, 64, 40, 21, 0)
    $Button2 = GUICtrlCreateButton("UPGRADE-EXP", 8, 128, 154, 25, 0)
    $Input1 = GUICtrlCreateInput(IniRead($szIniName, "This is The Dir Of InitMonster.txt", "default", "\Config"), 56, 64, 105, 21)
    $Input2 = GUICtrlCreateInput(IniRead($szIniNam, "This Is Your Exp-Rate", "default", "1"), 56, 96, 105, 21)
    $Label2 = GUICtrlCreateLabel("EXP x", 8, 96, 42, 23)
    GUICtrlSetFont(-1, 10, 800, 0, "Comic Sans MS")
    GUICtrlSetColor(-1, 0xC0C0C0)
    FileInstall("C:\Users\WoW-Unit\Desktop\Programmieren\Autoit\Beispiele\Exp-Editor\Trennstrich.bmp", "C:\Trennstrich.bmp")
    FileInstall("C:\Users\WoW-Unit\Desktop\Programmieren\Autoit\Beispiele\Exp-Editor\EXP-UPDATE.bmp", "C:\EXP-UPDATE.bmp")
    FileInstall("C:\Users\WoW-Unit\Desktop\Programmieren\Autoit\Beispiele\Exp-Editor\EXP-DOWNGRADE.bmp", "C:\EXP-DOWNGRADE.bmp")
    $Pic2 = GUICtrlCreatePic("C:\Trennstrich.bmp", 168, 0, 2, 170, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic1 = GUICtrlCreatePic("C:\EXP-UPDATE.bmp", 8, 8, 148, 23, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Pic3 = GUICtrlCreatePic("C:\EXP-DOWNGRADE.bmp", 184, 8, 148, 31, BitOR($SS_NOTIFY,$WS_GROUP,$WS_CLIPSIBLINGS))
    $Label3 = GUICtrlCreateLabel("Directory of InitMonster.txt", 176, 36, 162, 20)
    GUICtrlSetFont(-1, 8, 800, 0, "Comic Sans MS")
    GUICtrlSetColor(-1, 0xC0C0C0)
    $Label1 = GUICtrlCreateLabel(" Directory of InitMonster.txt", 1, 36, 167, 20)
    GUICtrlSetFont(-1, 8, 800, 0, "Comic Sans MS")
    GUICtrlSetColor(-1, 0xC0C0C0)
    $Button3 = GUICtrlCreateButton("Browse", 176, 64, 40, 21, 0)
    $Input3 = GUICtrlCreateInput(IniRead($szIniName, "This is The Dir Of InitMonster.txt", "default", "\Config"), 224, 64, 113, 21)
    $Label4 = GUICtrlCreateLabel("EXP /", 176, 96, 41, 23)
    GUICtrlSetFont(-1, 10, 800, 0, "Comic Sans MS")
    GUICtrlSetColor(-1, 0xC0C0C0)
    $Input4 = GUICtrlCreateInput(IniRead($szIniNa, "This Is Your Exp-Rate/", "default", "1"), 224, 96, 113, 21)
    $Button4 = GUICtrlCreateButton("DOWNGRADE-EXP", 176, 128, 162, 25, 0)
    $Label5 = GUICtrlCreateLabel("<c> WoW-Unit", 240, 154, 95, 17)
    GUICtrlSetFont(-1, 4, 800, 2, "MS Sans Serif")
    GUICtrlSetColor(-1, 0xC0C0C0)
    GUISetState(@SW_SHOW)
    #EndRegion ### END Koda GUI section ###

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

    While 1
    $nMsg = GUIGetMsg()
    Switch $nMsg
    Case $GUI_EVENT_CLOSE
    Exit
    Case $Button1
    _1()
    Case $Button3
    _2()
    Case $Button2
    _3()
    Case $Button4
    _4()
    EndSwitch
    WEnd

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

    Func _1()
    $var = FileSelectFolder("The Directory of InitMonter.txt (In Config Folder Of ServerSide)", "", 1) ; Öffnet menu zum wählen des verzeichnisses
    GUICtrlSetData($Input1, $var,) ; setzt des gewählte verzeichnis in den input 1
    Endfunc

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

    Func _2()
    $var = FileSelectFolder("The Directory of InitMonter.txt (In Config Folder Of ServerSide)", "", 1) ; Öffnet menu zum wählen des verzeichnisses
    GUICtrlSetData($Input3, $var,) ; setzt des gewählte verzeichnis in den input 1
    Endfunc

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

    Func _3()
    IniWrite($szIniName, "This is The Dir Of InitMonster.txt","default",GUICtrlRead($Input1))
    IniWrite($szIniNam, "This Is Your Exp-Rate","default",GUICtrlRead($Input2))

    ProgressOn("Status EXP-Changing", "Status EXP-Changing", "0 %")
    For $i = 10 to 100 step 10
    sleep(400)
    ProgressSet( $i, $i & "%")
    Next
    ProgressSet(100 , "Fertig", "100 %")
    sleep(10)
    ProgressOff()

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

    ; Brav alle Variablen deklarieren
    Local $filename = GUICtrlRead($Input1) & '\ItemGroup.txt' ; Name der Datei
    Local $meinarray ; Darin lege ich die Datei ab und ändere den Wert auf den neuen
    Local $meinarray1
    Local $newEXP ; Der neue Wert der in exp rein soll
    Local $nLfd ; einfach ein Variable zum zählen
    Local $nLfd1
    Local $alterWert ; Für den alten Wert
    Local $Multiplikator = GUICtrlRead($Input2) ; Mit was * genommen werden soll
    Local $arr ; Hilfs - Array
    Local $hFile ; FileHandle

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

    $hFile = FileOpen($filename,0) ; Datei zum lesen öffnen
    _FileReadToArray($filename,$meinarray) ; Hier wird die Datei eingelesen und in ein Array gepackt
    FileClose($hFile) ; Datei schliessen

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

    ; Datei zum schreiben öffnen
    $hFile = FileOpen($filename,2)

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

    ; Hier prüfe ich jede Zeile im Array (von 1 bis maximal Index, der in Index 0 steht)
    ; ob er was ersetzen kann

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

    For $nLfd = 1 To $meinarray[0]
    $arr = StringRegExp($meinarray[$nLfd],'\(money (920 200))',3)
    If Not @error AND IsArray($arr) Then
    $alterWert = $arr[0]
    $newEXP = $alterWert * $Multiplikator
    $meinarray[$nLfd] = StringRegExpReplace($meinarray[$nLfd],'\(money (920 200))','(money (' & $newEXP & '))')
    EndIf
    If $nLfd <> $meinarray[0] Then $meinarray[$nLfd] &= @CRLF
    FileWrite($hFile,$meinarray[$nLfd])
    Next
    ; Datei schliessen
    FileClose($hFile)

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

    exit
    EndFunc

    [/autoit]
    • Offizieller Beitrag

    Hi,

    noch mal etwas deutlicher. Dein ganzes drumrum interessiert mich eigentlich nicht.
    Wenn du Probleme hast eine Textpassage in einer Textdatei durch einen anderen Wert zu erstezen, so brauche ich Textdatei (original) und Regel wie sie umgestellt werden soll, oder Textdatei(ergebnis) dann kann ich den Weg bauen.

    Mega

  • Probier es mal so, habe jetzt keine Ahnung ob du alle ändern willst de den money Wert entsprechen oder nur den aus eine bestimmten Gruppe, das folgende Skript durchsucht die ganze Datei.

    Spoiler anzeigen
    [autoit][/autoit] [autoit][/autoit] [autoit]

    _ErsetzeMoney(@ScriptDir & '\ItemGroup.txt')

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

    Func _ErsetzeMoney($file)
    Dim $oFileInput = FileOpen($file,0)
    Dim $oFileOutput = FileOpen($file & '.tmp',2)
    Dim $lineInput, $lineOutput
    Dim $arrInput
    $lineInput = FileReadLine($oFileInput)
    While @error <> -1
    $arrInput = StringRegExp($lineInput,'\(money \((920 200)\)\)',3)
    If not @error Then
    $lineOutput = StringRegExpReplace($lineInput,'\(money \((920 200)\)\)','(money ((9200 2000))')
    Else
    $lineOutput = $lineInput
    EndIf
    FileWriteLine($oFileOutput,$lineOutput)
    $lineInput = FileReadLine($oFileInput)
    WEnd
    FileClose($oFileInput)
    FileClose($oFileOutput)
    FileDelete($file)
    FileMove($file & '.tmp',$file)
    EndFunc

    [/autoit]

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • McPoldy
    Danke das is super es funzt
    Kann man das jetzt noch so einrichten das es mit mehrstelligen und anderen zahlen kompatible ist ?


    Habe es FolgenderMassen versucht

    Spoiler anzeigen
    [autoit]

    #include <File.au3>

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

    ; Brav alle Variablen deklarieren
    Local $filename = @ScriptDir &"ItemGroup.txt" ; Name der Datei
    Local $meinarray ; Darin lege ich die Datei ab und ändere den Wert auf den neuen
    Local $meinarray1
    Local $newEXP ; Der neue Wert der in exp rein soll
    Local $nLfd ; einfach ein Variable zum zählen
    Local $nLfd1
    Local $alterWert ; Für den alten Wert
    Local $Multiplikator = 10 ; Mit was * genommen werden soll
    Local $arr ; Hilfs - Array
    Local $hFile ; FileHandle

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

    $hFile = FileOpen($filename,0) ; Datei zum lesen öffnen
    _FileReadToArray($filename,$meinarray) ; Hier wird die Datei eingelesen und in ein Array gepackt
    FileClose($hFile) ; Datei schliessen

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

    ; Datei zum schreiben öffnen
    $hFile = FileOpen($filename,2)

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

    ; Hier prüfe ich jede Zeile im Array (von 1 bis maximal Index, der in Index 0 steht)
    ; ob er was ersetzen kann

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

    For $nLfd = 1 To $meinarray[0]
    $arr = StringRegExp($meinarray[$nLfd],'\(money \((920 200)\)\)','(money ((920 200))',3)
    If Not @error AND IsArray($arr) Then
    $alterWert = $arr[0]
    $newEXP = $alterWert * $Multiplikator
    $meinarray[$nLfd] = StringRegExpReplace($meinarray[$nLfd],'\(money \((920 200)\)\)','(money ((' & $newEXP & '))')
    EndIf
    If $nLfd <> $meinarray[0] Then $meinarray[$nLfd] &= @CRLF
    FileWrite($hFile,$meinarray[$nLfd])
    Next
    ; Datei schliessen
    FileClose($hFile)

    [/autoit]

    aber es passiert nichts...

    Und so auch nicht

    Spoiler anzeigen
    [autoit]

    #include <File.au3>

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

    ; Brav alle Variablen deklarieren
    Local $filename = @ScriptDir &"\ItemGroup.txt" ; Name der Datei
    Local $meinarray ; Darin lege ich die Datei ab und ändere den Wert auf den neuen
    Local $meinarray1
    Local $newEXP ; Der neue Wert der in exp rein soll
    Local $nLfd ; einfach ein Variable zum zählen
    Local $nLfd1
    Local $alterWert ; Für den alten Wert
    Local $Multiplikator = 10 ; Mit was * genommen werden soll
    Local $arr ; Hilfs - Array
    Local $hFile ; FileHandle

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

    $hFile = FileOpen($filename,0) ; Datei zum lesen öffnen
    _FileReadToArray($filename,$meinarray) ; Hier wird die Datei eingelesen und in ein Array gepackt
    FileClose($hFile) ; Datei schliessen

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

    ; Datei zum schreiben öffnen
    $hFile = FileOpen($filename,2)

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

    ; Hier prüfe ich jede Zeile im Array (von 1 bis maximal Index, der in Index 0 steht)
    ; ob er was ersetzen kann

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

    For $nLfd = 1 To $meinarray[0]
    $arr = StringRegExp($meinarray[$nLfd],'\(money \((\d\d\d \d\d\d)\)\)','(money ((\d\d\d \d\d\d))',3)
    If Not @error AND IsArray($arr) Then
    $alterWert = $arr[0]
    $newEXP = $alterWert * $Multiplikator
    $meinarray[$nLfd] = StringRegExpReplace($meinarray[$nLfd],'\(money \((\d\d\d \d\d\d)\)\)','(money ((' & $newEXP & '))')
    EndIf
    If $nLfd <> $meinarray[0] Then $meinarray[$nLfd] &= @CRLF
    FileWrite($hFile,$meinarray[$nLfd])
    Next
    ; Datei schliessen
    FileClose($hFile)

    [/autoit]
  • Hab deines jetzt gar nicht gelesen :( aber habe mal meine Funktion etwas angepasst:

    Spoiler anzeigen
    [autoit]


    ; Dateiname, der Wert der ersetzt werden soll, der neue Wert
    _ErsetzeMoney(@ScriptDir & '\ItemGroup.txt','9200 2000','920 200')

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

    Func _ErsetzeMoney($file,$alterWert,$neuerWert)
    Dim $oFileInput = FileOpen($file,0)
    Dim $oFileOutput = FileOpen($file & '.tmp',2)
    Dim $lineInput, $lineOutput
    Dim $arrInput
    $lineInput = FileReadLine($oFileInput)
    While @error <> -1
    $arrInput = StringRegExp($lineInput,'\(money \((' & $alterWert & ')\)\)',3)
    If not @error Then
    ConsoleWrite($arrInput[0] & @LF)
    $lineOutput = StringRegExpReplace($lineInput,'\(money \((' & $alterWert & ')\)\)','\(money (' & $neuerWert & '))')
    Else
    $lineOutput = $lineInput
    EndIf
    FileWriteLine($oFileOutput,$lineOutput)
    $lineInput = FileReadLine($oFileInput)
    WEnd
    FileClose($oFileInput)
    FileClose($oFileOutput)
    FileDelete($file)
    FileMove($file & '.tmp',$file)
    EndFunc

    [/autoit]

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • Jo das funzt schon aber ich muss das ja für alle machen und mit multiplikator
    habe es jetzt mal so versucht da passiert auch nichts

    Spoiler anzeigen
    [autoit]


    #include <File.au3>

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

    ; Brav alle Variablen deklarieren
    Local $filename = @ScriptDir &"\ItemGroup.txt" ; Name der Datei
    Local $meinarray ; Darin lege ich die Datei ab und ändere den Wert auf den neuen
    Local $meinarray1
    Local $newEXP ; Der neue Wert der in exp rein soll
    Local $nLfd ; einfach ein Variable zum zählen
    Local $nLfd1
    Local $alterWert ; Für den alten Wert
    Local $Multiplikator = 10 ; Mit was * genommen werden soll
    Local $arr ; Hilfs - Array
    Local $hFile ; FileHandle
    Local $alterWert1 = 920

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

    $hFile = FileOpen($filename,0) ; Datei zum lesen öffnen
    _FileReadToArray($filename,$meinarray) ; Hier wird die Datei eingelesen und in ein Array gepackt
    FileClose($hFile) ; Datei schliessen

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

    ; Datei zum schreiben öffnen
    $hFile = FileOpen($filename,2)

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

    ; Hier prüfe ich jede Zeile im Array (von 1 bis maximal Index, der in Index 0 steht)
    ; ob er was ersetzen kann

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

    For $nLfd = 1 To $meinarray[0]
    $arr = StringRegExp($meinarray[$nLfd],'\(money \((' & $alterWert1 & ')\)\)','(money \((' & $alterWert1 & ')\)\)',3)
    If Not @error AND IsArray($arr) Then
    $alterWert = $arr[0]
    $neuerWert = $alterWert1 * $Multiplikator
    $meinarray[$nLfd] = StringRegExpReplace($meinarray[$nLfd],'\(money \((' & $alterWert1 & ')\)\)','(money (' & $neuerWert & '))')
    EndIf
    If $nLfd <> $meinarray[0] Then $meinarray[$nLfd] &= @CRLF
    FileWrite($hFile,$meinarray[$nLfd])
    Next
    ; Datei schliessen
    FileClose($hFile)

    [/autoit]
  • Mist, du bist zuuuu schnell :) habe mir grade dein oberes Skript angeschaut, kannste aber auch auf dein neues anwenden :)

    Spoiler anzeigen
    [autoit]


    #include <File.au3>

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

    ; Brav alle Variablen deklarieren
    Local $filename = @ScriptDir &"ItemGroup.txt" ; Name der Datei
    Local $meinarray ; Darin lege ich die Datei ab und ändere den Wert auf den neuen
    Local $meinarray1
    Local $newEXP ; Der neue Wert der in exp rein soll
    Local $nLfd ; einfach ein Variable zum zählen
    Local $nLfd1
    Local $alterWert ; Für den alten Wert
    Local $Multiplikator = 10 ; Mit was * genommen werden soll
    Local $arr ; Hilfs - Array
    Local $hFile ; FileHandle

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

    $hFile = FileOpen($filename,0) ; Datei zum lesen öffnen
    _FileReadToArray($filename,$meinarray) ; Hier wird die Datei eingelesen und in ein Array gepackt
    FileClose($hFile) ; Datei schliessen

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

    ; Datei zum schreiben öffnen
    $hFile = FileOpen($filename,2)

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

    ; Hier prüfe ich jede Zeile im Array (von 1 bis maximal Index, der in Index 0 steht)
    ; ob er was ersetzen kann

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

    For $nLfd = 1 To $meinarray[0]
    $arr = StringRegExp($meinarray[$nLfd],'\(money \((920 200)\)\)',3) ;<= hier war zuviel :)
    If Not @error AND IsArray($arr) Then
    ;~ $alterWert = $arr[0]
    ;~ $newEXP = $alterWert * $Multiplikator ;<= kann nicht gehen, in $arr[0] steht 920 200 und du willst beide Zahlen mal nehmen :(
    $alterWert = StringSplit($arr[0],' ')
    $newEXP = String($alterWert[1] * $Multiplikator) & ' ' & String($alterWert[2] * $Multiplikator)
    $meinarray[$nLfd] = StringRegExpReplace($meinarray[$nLfd],'\(money \((920 200)\)\)','(money (' & $newEXP & '))') ;<= hier war zuviel :)
    EndIf
    If $nLfd <> $meinarray[0] Then $meinarray[$nLfd] &= @CRLF
    FileWrite($hFile,$meinarray[$nLfd])
    Next
    ; Datei schliessen
    FileClose($hFile)

    [/autoit]

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)

  • Ich glaube du solltest dir noch mal in ruhe StringRegExp und StringRegExpReplace anschauen, Beispiele hast du nun genug um mal ein bissel zu testen :)
    (siehe meine Fusszeile)

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

    Denn die Dinge, die wir erst lernen müssen, bevor wir sie tun, lernen wir beim Tun.(Aristoteles)