Problem mit der auswertung von daten aus einer txt-datei

  • huhu,

    mich hat mal wieder da autoit fieber gepackt :)

    ich hab ne textdatei mit daten gefüllt. ungefähr so -> Angreifer/Verteidiger NAME ( XXX EP ) Dorfzugehörigkeit.

    @EDIT soooo

    Das ist die Liste:

    Spoiler anzeigen


    Angreifer: Gnorgi (4668 EP) Glendalough
    Angreifer: limewood (8585 EP) Glendalough
    Angreifer: pedi (22185 EP) Glendalough
    Angreifer: gabriel_burns (22497 EP) Glendalough
    Angreifer: Dschowanni (9394 EP) Glendalough
    Verteidiger: Bikeflyer (12553 EP) Shangri - La
    Verteidiger: Cifer (7562 EP) Shangri - La
    Verteidiger: schwein (3492 EP) Shangri - La
    Verteidiger: Martexus (4550 EP) Shangri - La
    Verteidiger: Link (11765 EP) Shangri - La
    Verteidiger: kilian05 (12347 EP) Shangri - La


    Extrem gekürzt. sind aber im moment immer so ca. 100 leute in einem DK und da ist der taschenrechner blöd :P

    CODE:

    Spoiler anzeigen
    [autoit]

    Dim $file
    Dim $file2
    Dim $tmp = 1
    Dim $tmp_ang_o_ver ;Für den Unterschied zwischen Angreifer und Verteidiger
    Dim $anzahl_ang = 0 ;counter für die Anzahl der Angreifer
    Dim $anzahl_ver = 0 ;counter für die Anzahl der Verteidiger
    Dim $anzahl_krieger ;Anzahl der Kämpfer Gesamt
    Dim $listenende = 100
    Dim $ep_ang = 0 ;Zähler // Ep Gesamt des Angreifers
    Dim $ep_ver = 0 ;Zähler // Ep Gesamt des Angreifers
    Dim $s, $x, $y, $from, $to ;Für _StringBetween

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

    Func _StringBetween($s,$from,$to)
    $x=StringInStr($s,$from)+StringLen($from)
    $y=StringInStr(StringTrimLeft($s,$x),$to)
    Return StringMid($s,$x,$y)
    EndFunc

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

    Do
    $file = FileOpen("tmp.txt", 0)
    $line = FileReadLine($file, $tmp)
    ;Anzahl der Angreifer und Verteidiger / Auswertung - START
    $tmp_ang_o_ver = StringLeft($file, 3)
    If $tmp_ang_o_ver = "Ang" Then
    $anzahl_ang = $anzahl_ang + 1
    $tmp2 = _StringBetween($line, "(" , " EP)" )
    Int($tmp2)
    $ep_ang = $ep_ang + $tmp2
    $tmp2 = 0
    Else
    $anzahl_ver = $anzahl_ver + 1
    $tmp2 = _StringBetween($line, "(" , " EP)" )
    Int($tmp2)
    $ep_ang = $ep_ang + $tmp2
    $tmp2 = 0
    EndIf
    ;Anzahl der Angreifer und Verteidiger / Auswertung - ENDE
    FileClose($file)
    $tmp = $tmp + 1
    Until $tmp < $listenende

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

    ;Auswertung in TXT schreiben
    $file2 = FileOpen("auswertung.txt", 1)

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

    FileWrite($file2, "Anzahl der Angreifer: " & $anzahl_ang & @CRLF)
    FileWrite($file2, "Gesamt EP: " & $ep_ang & @CRLF & @CRLF)
    FileWrite($file2, "Anzahl der Verteidiger: " & $anzahl_ver & @CRLF)
    FileWrite($file2, "Gesamt EP: " & $ep_ver & @CRLF)
    FileWrite($file2, " " & @CRLF)
    FileWrite($file2, "Krieger die in die Schlacht ziehen:" & $anzahl_krieger & @CRLF)
    FileClose($file2)

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

    Exit

    [/autoit]


    Irgendwie bekomm ich als ergebnis immer nur:

    Spoiler anzeigen


    Anzahl der Angreifer: 0
    Gesamt EP: 4668

    Anzahl der Verteidiger: 1
    Gesamt EP: 0

    Krieger die in die Schlacht ziehen:

    wo liegt mein fehler? Er findet die zahlen immer zwischen den klammern, aber irgendwie immer nur die erste zeile ^^ :(:cursing:?(

    2 Mal editiert, zuletzt von permanenT (3. September 2008 um 23:16)

  • nope! kein bot!
    es ist ein browsergame mit dorfkämpfen und da ich kriegsminister bin brauch ich das um auszuwerten, ob noch söldner geholt werden müssen oder nicht ;)
    hab viel zu viel spaß an dem spiel um mir das mit einem bot versauen zu lassen :P

  • habs noch ein bischen verändert.
    nun schreibt er am anfang "-ENDE-" in die tmp.txt, damit das prog weiß wann ende ist.
    dennoch schluckt der kein anderes ergebniss aus :(

    Spoiler anzeigen
    [autoit]

    Dim $file
    Dim $file2
    Dim $zeile = 1
    Dim $tmp_schleife = 0
    Dim $tmp_ang_o_ver ;Für den Unterschied zwischen Angreifer und Verteidiger
    Dim $anzahl_ang = 0 ;counter für die Anzahl der Angreifer
    Dim $anzahl_ver = 0 ;counter für die Anzahl der Verteidiger
    Dim $anzahl_krieger ;Anzahl der Kämpfer Gesamt
    Dim $listenende = 100
    Dim $ep_ang = 0 ;Zähler // Ep Gesamt des Angreifers
    Dim $ep_ver = 0 ;Zähler // Ep Gesamt des Angreifers
    Dim $s, $x, $y, $from, $to ;Für _StringBetween

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

    Func _StringBetween($s,$from,$to)
    $x=StringInStr($s,$from)+StringLen($from)
    $y=StringInStr(StringTrimLeft($s,$x),$to)
    Return StringMid($s,$x,$y)
    EndFunc

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

    ;-ENDE- an das Ende der Datei -- START
    $file = FileOpen("tmp.txt", 1)
    FileWrite($file, "" & @CRLF & "-ENDE-")
    FileClose($file)
    ;-ENDE- an das Ende der Datei -- ENDE

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

    Do
    $file = FileOpen("tmp.txt", 0)
    $line = FileReadLine($file, $zeile)
    If $line = "-ENDE-" Then
    $tmp_schleife = "-ENDE-"
    Else
    ;Anzahl der Angreifer und Verteidiger / Auswertung - START
    $tmp_ang_o_ver = StringLeft($file, 3)
    If $tmp_ang_o_ver = "Ang" Then
    $anzahl_ang = $anzahl_ang + 1
    $tmp2 = _StringBetween($line, "(" , " EP)" )
    Int($tmp2)
    $ep_ang = $ep_ang + $tmp2
    $tmp2 = 0
    Else
    $anzahl_ver = $anzahl_ver + 1
    $tmp2 = _StringBetween($line, "(" , " EP)" )
    Int($tmp2)
    $ep_ang = $ep_ang + $tmp2
    $tmp2 = 0
    EndIf
    ;Anzahl der Angreifer und Verteidiger / Auswertung - ENDE
    EndIf
    FileClose($file)

    $zeile = $zeile + 1
    Until $tmp_schleife = "-ENDE-"

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

    ;Auswertung in TXT schreiben
    $file2 = FileOpen("auswertung.txt", 1)

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

    FileWrite($file2, "Anzahl der Angreifer: " & $anzahl_ang & @CRLF)
    FileWrite($file2, "Gesamt EP: " & $ep_ang & @CRLF & @CRLF)
    FileWrite($file2, "Anzahl der Verteidiger: " & $anzahl_ver & @CRLF)
    FileWrite($file2, "Gesamt EP: " & $ep_ver & @CRLF)
    FileWrite($file2, " " & @CRLF)
    FileWrite($file2, "Krieger die in die Schlacht ziehen:" & $anzahl_krieger & @CRLF)
    FileClose($file2)

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

    Exit

    [/autoit]
    • Offizieller Beitrag
    Spoiler anzeigen
    [autoit]

    ; Dorf.au3

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

    Global $dateiInhalt = FileRead(FileOpen(@ScriptDir & '\Dorf.txt', 0))
    Global $angreifer_A = StringRegExp($dateiInhalt, '(?U)Angreifer.*(\d+) EP', 3)
    Global $verteidiger_A = StringRegExp($dateiInhalt, '(?U)Verteidiger.*(\d+) EP', 3)
    ConsoleWrite("Anzahl Angreifer: " & UBound($angreifer_A) & @CRLF)
    ConsoleWrite("Anzahl Verteidiger: " & UBound($verteidiger_A) & @CRLF)
    ConsoleWrite("Anzahl Krieger: " & UBound($angreifer_A) + UBound($verteidiger_A) & @CRLF)
    ConsoleWrite("Summe EP Angreifer: " & _calcEP($angreifer_A) & @CRLF)
    ConsoleWrite("Summe EP Verteidiger: " & _calcEP($verteidiger_A) & @CRLF)
    ConsoleWrite("Summe EP Differenz: " & _calcEP($angreifer_A) - _calcEP($verteidiger_A) & @CRLF)

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

    Func _calcEP($ep_A)
    Local $count = 0
    For $i = 0 To UBound($ep_A) -1
    $count += $ep_A[$i]
    Next
    Return $count
    EndFunc

    [/autoit]

    Mega

  • Ach mann Xeno, du musst natürlich wieder den kürzesten Code abgeben, wir sind doch hier nicht beim Walle :P:D

    PS: Ich muss mir mal StringRegExp reinziehen. Die ganzen ?ß\" bla haben mich bisher davon abgeschreckt.