Hallo zusammen,
ich habe eine Textdatei mit über 5000 Zeilen.
In jeder Zeile steht ein Betrag.
10,99
324,97
45,20
2306,01 usw.
Ich möchte diese Textdatei öffnen und alle Beträge zusammen addieren.
Könnt Ihr bitte helfen?
MfG
HGF
Hallo zusammen,
ich habe eine Textdatei mit über 5000 Zeilen.
In jeder Zeile steht ein Betrag.
10,99
324,97
45,20
2306,01 usw.
Ich möchte diese Textdatei öffnen und alle Beträge zusammen addieren.
Könnt Ihr bitte helfen?
MfG
HGF
- Datei in ein Array lesen (FileReadToArray)
- in Schleife durch das Array gehen
- jeden Eintrag zuerst "," mit Punkt ersetzen (StringReplace)
- diesen Wert zu einer Summenvariable aufaddieren
Hallo BugFix,
vielen Dank für deine Antwort, aber benötige leider ein bisschen mehr hilfe bei diesen beiden Punkten.
- in Schleife durch das Array gehen
- diesen Wert zu einer Summenvariable aufaddieren
#include <MsgBoxConstants.au3>
Example()
Func Example()
; Liest die aktuelle Skriptdatei in eine Array ein. Dabei wird der Dateipfad verwendet.
Local $aArray = FileReadToArray(@ScriptDir & "\Betrag.txt")
Local $iLineCount = @extended
If @error Then
MsgBox($MB_SYSTEMMODAL, "", "Beim lesen der Datei ist ein Fehler aufgetreten. @error: " & @error) ; Beim lesen der Datei ist ein Fehler aufgetreten.
Else
For $i = 0 To $iLineCount - 1 ; Durchläuft das Array. UBound($aArray) kann auch verwendet werden
;~ MsgBox($MB_SYSTEMMODAL, "", $aArray[$i]) ; Zeigt den Inhalt des Arrays.
$Summe = StringReplace ($aArray[$i], ",", ".")
MsgBox($MB_SYSTEMMODAL, "", $Summe) ; Zeigt den Inhalt des Arrays.
Next
EndIf
EndFunc ;==>Example
Alles anzeigen
Edit: HGF BItte Spoiler und oder Quelltextbutton nutzen. Danke.
Neben dem Vorschlag von BugFix könntest Du alternativ auch wie folgt vorgehen :
Global $fSumme = _Summen_in_Datei(@ScriptDir & "\SumNumbers.txt")
ConsoleWrite("Gesamtsumme = " & $fSumme & " Errorcode = " & @error &@CRLF)
Func _Summen_in_Datei($sFile)
Local $sRead, $aWerte, $fGesamt = 0
$sRead = $sFile
If FileExists($sRead) Then
$sRead = FileRead($sFile)
Else
Return SetError(1, 0, 0)
EndIf
$aWerte = StringRegExp($sRead, "\d+,\d+", 3)
If @error Then Return SetError(2, 0, 0)
For $i = 0 To UBound($aWerte) - 1
$fGesamt += Number(StringReplace($aWerte[$i],',','.'))
Next
Return $fGesamt
EndFunc
Alles anzeigen
Musashi : Vielen Dank, genau das was ich gesucht habe!
For $i = 0 To $iLineCount - 1 ; Durchläuft das Array. UBound($aArray) kann auch verwendet werden
;~ MsgBox($MB_SYSTEMMODAL, "", $aArray[$i]) ; Zeigt den Inhalt des Arrays.
$Summe = StringReplace ($aArray[$i], ",", ".")
MsgBox($MB_SYSTEMMODAL, "", $Summe) ; Zeigt den Inhalt des Arrays.
Next
Was du falsch gemacht hast:
Du hast $Summe in jedem Durchlauf überschrieben mit dem Inhalt des Arrayelements.
Also statt:
$Summe = StringReplace ($aArray[$i], ",", ".")
muss:
$Summe += StringReplace ($aArray[$i], ",", ".")
Dazu musst du aber vor der Schleife eine leere Variable $Summe deklarieren!