Erneut Problem mit StrinRegExpReplace

  • Hallo Wir haben das schon mal gehabt aber ich habe erneut ein problem damit


    Spoiler anzeigen
    [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)\)\)',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 \((\d \d)\)\)','(money (' & $newEXP & '))') ;<= hier war zuviel :)
    EndIf
    If $nLfd <> $meinarray[0] Then $meinarray[$nLfd] &= @CRLF
    FileWrite($hFile,$meinarray[$nLfd])
    Next
    ; Datei schliessen
    FileClose($hFile)

    [/autoit]


    Bei diesem Script wird (money (200 300)) verändert genauer 200*10 und 300*10

    ich habe noch nicht ganz raus wie ich dem script sage was er genau machen soll
    wie stelle ich das hier an das er nur

    300*10 rechnet aber den rest in ruhe lässt ?

    • Offizieller Beitrag

    Machst Du dir überhaupt ein paar gedanken bevor Du eine Frage postest? Du brauchst doch nur die Zeile 30 anzupassen!

  • Bernd, fast, da WoW ein der Datei viele Zeilen mit (money (xxxx xxxx)) hat, passt die Suche nicht, also muss er die auch ändern :)

    Zeile 25:
    Von $arr = StringRegExp($meinarray[$nLfd],'\(money \((\d \d)\)\)',3)
    Nach $arr = StringRegExp($meinarray[$nLfd],'\(money \((200 300)\)\)',3)

    Zeile 30:
    Von $newEXP = String($alterWert[1] * $Multiplikator) & ' ' & String($alterWert[2] * $Multiplikator)
    Nach $newEXP = String($alterWert[1]) & ' ' & String($alterWert[2] * $Multiplikator)

    Zeile 31:
    Von $meinarray[$nLfd] = StringRegExpReplace($meinarray[$nLfd],'\(money \((\d \d)\)\)','(money (' & $newEXP & '))')
    Nach $meinarray[$nLfd] = StringRegExpReplace($meinarray[$nLfd],'\(money \((200 300)\)\)','(money (' & $newEXP & '))')

    So ungefähr, habs jetzt nicht getestet.

    Mfg
    Jens (McPoldy)

    Twitter: jkroeger

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

  • Gelöst nach 2 weiteren stunden des Testens kam diese lösung raus

    Spoiler anzeigen
    [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 $Multiplikator2 = 0 ; 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)\)\)',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] + $Multiplikator2) & ' ' & String($alterWert[2] * $Multiplikator)
    $meinarray[$nLfd] = StringRegExpReplace($meinarray[$nLfd],'\(money \((\d\d\d \d\d\d)\)\)','(money (' & $newEXP & '))') ;<= hier war zuviel :)
    EndIf
    If $nLfd <> $meinarray[0] Then $meinarray[$nLfd] &= @CRLF
    FileWrite($hFile,$meinarray[$nLfd])
    Next
    ; Datei schliessen
    FileClose($hFile)

    [/autoit]
    • Offizieller Beitrag

    @WoW-Unit, keine gedanken weil die vorhandene Lösung vor wenigen Tagen erst erarbeite wurde bestimmte stelle aus txt auslesen, da sollte es ja kein Problem sein das Programm entsprechend zu ändern!

    McPoldy, da das money (200 300) ja nur ein Beispiel war hätte die Änderung in Zeile 30 genügt!

    • Offizieller Beitrag

    Der ganze Thread behandelt genau dieses Problem, nur das dort 2 Werte geändert werden sollen und hier nur einer!