Top-Themen

AppleEntwicklungHardwareInternetLinuxMicrosoftMultimediaNetzwerkeOff TopicSicherheitSonstige SystemeVirtualisierungWeiterbildungZusammenarbeit

Aktuelle Themen

Administrator.de FeedbackApache ServerAppleAssemblerAudioAusbildungAuslandBackupBasicBatch & ShellBenchmarksBibliotheken & ToolkitsBlogsCloud-DiensteClusterCMSCPU, RAM, MainboardsCSSC und C++DatenbankenDatenschutzDebianDigitiales FernsehenDNSDrucker und ScannerDSL, VDSLE-BooksE-BusinessE-MailEntwicklungErkennung und -AbwehrExchange ServerFestplatten, SSD, RaidFirewallFlatratesGoogle AndroidGrafikGrafikkarten & MonitoreGroupwareHardwareHosting & HousingHTMLHumor (lol)Hyper-VIconsIDE & EditorenInformationsdiensteInstallationInstant MessagingInternetInternet DomäneniOSISDN & AnaloganschlüsseiTunesJavaJavaScriptKiXtartKVMLAN, WAN, WirelessLinuxLinux DesktopLinux NetzwerkLinux ToolsLinux UserverwaltungLizenzierungMac OS XMicrosoftMicrosoft OfficeMikroTik RouterOSMonitoringMultimediaMultimedia & ZubehörNetzwerkeNetzwerkgrundlagenNetzwerkmanagementNetzwerkprotokolleNotebook & ZubehörNovell NetwareOff TopicOpenOffice, LibreOfficeOutlook & MailPapierkorbPascal und DelphiPeripheriegerätePerlPHPPythonRechtliche FragenRedHat, CentOS, FedoraRouter & RoutingSambaSAN, NAS, DASSchriftartenSchulung & TrainingSEOServerServer-HardwareSicherheitSicherheits-ToolsSicherheitsgrundlagenSolarisSonstige SystemeSoziale NetzwerkeSpeicherkartenStudentenjobs & PraktikumSuche ProjektpartnerSuseSwitche und HubsTipps & TricksTK-Netze & GeräteUbuntuUMTS, EDGE & GPRSUtilitiesVB for ApplicationsVerschlüsselung & ZertifikateVideo & StreamingViren und TrojanerVirtualisierungVisual StudioVmwareVoice over IPWebbrowserWebentwicklungWeiterbildungWindows 7Windows 8Windows 10Windows InstallationWindows MobileWindows NetzwerkWindows ServerWindows SystemdateienWindows ToolsWindows UpdateWindows UserverwaltungWindows VistaWindows XPXenserverXMLZusammenarbeit
GELÖST

Bildung von Mittelwert diverser Zahlen aus einer txt-Datei

Frage Entwicklung Batch & Shell

Mitglied: Sven289

Sven289 (Level 1) - Jetzt verbinden

23.06.2014, aktualisiert 24.06.2014, 2054 Aufrufe, 7 Kommentare

Hallo,

ich habe folgendes Problem, bei dem ich nicht so recht weiß, wie man es anpacken soll. Ich weiß leider nicht, ob Batch das Richtige dafür ist, ich versuche es aber mal trotzdem.
Folgender Sachverhalt:
Eine Wetterstation speichert jeden Tag die Temperatur und diverse andere Messwerte mit einem Datum- und Zeitstempel in einer .txt-Datei ab.
Ich habe somit jeden Tag eine neue .txt-Datei mit insgesamt 1440 Messreihen. Die Datei sieht wie folgt aus:
Dateiname: wetter21_06_14.txt
21.06.14;00:00:00;146;0.111;12.2
21.06.14;00:01:00;134;0.098;12.3
21.06.14;00:02:00;131;0.095;12.2
21.06.14;00:03:00;123;0.087;12.2
21.06.14;00:04:00;138;0.103;12.3
21.06.14;00:05:00;131;0.095;12.3
21.06.14;00:06:00;139;0.104;12.2
21.06.14;00:07:00;150;0.115;12.1
usw.

Die einzelnen Werte sind jeweils mit einem Semikolon voneinander getrennt.
Da man diese 1440 Werte schlecht weiterverarbeiten kann, sollen die einzelnen Textpassagen (Zeilen) in Gruppen zu 30 eingeteilt werden mit einer anschließenden Mittelwertbildung.
Das heißt: Man nimmt immer die 30 ersten Zeilen, dann die nächsten 30 Zeilen usw..
Dabei muss dann von den letzten drei Werten einer Zeile (146, 0.111 und 12.2 (siehe Beispiel erste Zeile)) ein Mittelwert gebildet werden. Als neuer Datums- und Zeitwert für diesen Mittelwert soll dann der Wert der jeweils ersten Zeile angenommen werden.
Anschließend sollen die neuen Datensätze in eine neue .txt-Datei geschrieben werden.
Zur Verdeutlichung ein Beispiel der neuen .txt-Datei mit Mittenwerten:
21.06.14;00:00:00;130;0.110;12.2
21.06.14;00:30:00;134;0.112;12.2
21.06.14;01:00:00;131;0.099;12.2
21.06.14;01:30:00;130;0.098;12.3

Für Hilfe oder Vorschläge zur Erstellung so einer Lösung wäre ich sehr dankbar!!!

Mitglied: colinardo
24.06.2014, aktualisiert um 11:44 Uhr
Hallo Sven,
wenn dir Powershell nichts ausmacht:
(In Zeile 2 und 4 die Pfade für die Dateien angeben)
01.
# Eingabedatei 
02.
$inputfile = "C:\wetterdaten.txt" 
03.
# Ausgabedatei 
04.
$outputfile = "C:\wetterdaten_mittelwerte.txt" 
05.
# Importiere CSV-Datei als Object 
06.
$csv = import-csv $inputfile -Delimiter ";" -Header "Datum","Zeit","Wert1","Wert2","Wert3" 
07.
# Array das später die Mittelwerte enthält 
08.
$mittelwerte = @() 
09.
# gehe die Zeilen in 30er Schritten durch und berechne die Mittelwerte 
10.
for($i=0;$i -le 1410;$i+=30){ 
11.
    $mw1 = [Math]::Round((($csv[$i..($i+29)].Wert1 | measure -Sum).Sum / 30),2)  # Auf 2 Nachkommastellen runden 
12.
    $mw2 = [Math]::Round((($csv[$i..($i+29)].Wert2 | measure -Sum).Sum / 30),4)  # Auf 4 Nachkommastellen runden 
13.
    $mw3 = [Math]::Round((($csv[$i..($i+29)].Wert3 | measure -Sum).Sum / 30),2)  # Auf 2 Nachkommastellen runden 
14.
    $mittelwerte += New-Object PSObject -Property @{"Datum"=$csv[$i].Datum;"Zeit"=$csv[$i].Zeit;"Wert1"=$mw1;"Wert2"=$mw2;"Wert3"=$mw3} 
15.
16.
# Mittelwerte in gewünschtem Format wieder ausgeben (Komma's durch Punkte ersetzen, Anführungszeichen und Header entfernen) 
17.
($mittelwerte | select Datum,Zeit,Wert1,Wert2,Wert3 | convertto-csv -Delimiter ";" -NoTypeInformation | out-string).Replace(",",".").Replace("""","") | select -Skip 1 | set-content $outputfile
Die Rundung der Nachkommastellen (Zeilen 11-13) kannst du an deine Bedürfnisse anpassen.

Grüße Uwe
Bitte warten ..
Mitglied: Sven289
24.06.2014 um 11:42 Uhr
Vielen Dank erstmal,
Leider kann ich das Script nicht ausführen. Ich erhalte folgenden Fehler:
Fehler beim Aufrufen der Methode, da [System.Object[]] keine Methode mit dem Namen "Replace" enthält.
Bei C:\Users\Benutzer\Desktop\test.ps1:17 Zeichen:111
+ ($mittelwerte | select Datum,Zeit,Wert1,Wert2,Wert3 | convertto-csv -Delimiter ";" -NoTypeInformation).Replace <<<< (",",".").Replace("""","") | > select -Skip 1 | set-con
tent $outputfile
+ CategoryInfo : InvalidOperation: (Replace:String) [], RuntimeException
+ FullyQualifiedErrorId : MethodNotFound

Auch würde ich ungerne den Dateipfad/Namen jeden Tag neu ändern wollen. Wenn möglich sollen alle Daten aus einem Ordner geholt und verarbeitet werden.

Danke!
Bitte warten ..
Mitglied: colinardo
24.06.2014, aktualisiert 26.06.2014
Zitat von Sven289:

Vielen Dank erstmal,
Leider kann ich das Script nicht ausführen. Ich erhalte folgenden Fehler:
mach mal ein Update deiner Powershell ... mit 2.0 gehen so manche Dinge nicht, ansonsten schreibe ich es gleich noch um ... -edit- das unten geht jetzt auch mit PS2.0
Auch würde ich ungerne den Dateipfad/Namen jeden Tag neu ändern wollen. Wenn möglich sollen alle Daten aus einem Ordner geholt und verarbeitet werden.
warum nicht gleich ...
01.
$files = dir "C:\Wetterdaten\*.txt" 
02.
foreach($file in $files){ 
03.
    # Importiere CSV-Datei als Object 
04.
    $csv = import-csv $file.FullName -Delimiter ";" -Header "Datum","Zeit","Wert1","Wert2","Wert3" 
05.
    # Array das später die Mittelwerte enthält 
06.
    $mittelwerte = @() 
07.
    # gehe die Zeilen in 30er Schritten durch und berechne die Mittelwerte 
08.
    for($i=0;$i -le 1410;$i+=30){ 
09.
        $mw1 = [Math]::Round((($csv[$i..($i+29)].Wert1 | measure -Sum).Sum / 30),2)  # Auf 2 Nachkommastellen runden 
10.
        $mw2 = [Math]::Round((($csv[$i..($i+29)].Wert2 | measure -Sum).Sum / 30),4)  # Auf 4 Nachkommastellen runden 
11.
        $mw3 = [Math]::Round((($csv[$i..($i+29)].Wert3 | measure -Sum).Sum / 30),2)  # Auf 2 Nachkommastellen runden 
12.
        $mittelwerte += New-Object PSObject -Property @{"Datum"=$csv[$i].Datum;"Zeit"=$csv[$i].Zeit;"Wert1"=$mw1;"Wert2"=$mw2;"Wert3"=$mw3} 
13.
14.
    # Mittelwerte in gewünschtem Format wieder ausgeben (Komma's durch Punkte ersetzen, Anführungszeichen und Header entfernen) 
15.
   ($mittelwerte | select Datum,Zeit,Wert1,Wert2,Wert3 | convertto-csv -Delimiter ";" -NoTypeInformation) | %{$_.Replace(",",".").Replace("""","")} | select -Skip 1 | set-content "$($file.Directory)\$($file.BaseName)_Mittelwerte.txt" 
16.
}
Hängt an den Originalnamen für das neue File noch den String _Mittelwert an.

Grüße Uwe
Bitte warten ..
Mitglied: Sven289
24.06.2014 um 13:35 Uhr
Das funtioniert schon einmal perfekt.
Nun gibt es nur noch ein kleines Problem: Wenn eine Datei nicht alle 1440 Messwerte hat, da z.B. der Tag noch nicht rum ist oder die Station eine Stunde außer Betrieb war, wird trotzdem die Schleife bis zum Ende durchlaufen und es werden
;;0;0;0
im neuen Textdokument angezeigt.
Ist es möglich die for-Schleife so zu ändern, dass diese abhängig von dem Zeilen in der Ausgangsdatei ist?

Sonst sehr gute Arbeit! Danke
Bitte warten ..
Mitglied: colinardo
24.06.2014, aktualisiert 26.06.2014
Zitat von Sven289:
im neuen Textdokument angezeigt.
Ist es möglich die for-Schleife so zu ändern, dass diese abhängig von dem Zeilen in der Ausgangsdatei ist?
lässt sich machen, aber dann werden eventuell nicht alle Werte in die Mittelwerte miteinbezogen wenn z.B. die Anzahl der Zeilen nicht durch 30 teilbar ist, was willst du für diesen Fall haben ? Da sind ja noch jede Menge Variablen die ich hier nicht vorhersehen kann

p.s. Excel kann deine CSV-Dateien schön auswerten und filtern !
Bitte warten ..
Mitglied: Sven289
24.06.2014 um 14:10 Uhr
Am Einfachsten wäre es wohl, wenn die übrig bebliebenen Messwerte ignoriert werden.

Vielleicht noch etwas zur Vorgeschichte und zur Entstehung der Wetterdaten:
Ich habe bereits vor etwas längerer Zeit mal Hilfe benötigt, um die Wetterdaten, die eigenlich jede Stunde auf einen Server geladen werden zu einer Datei zusammenzuführen und in eine Ordnerstruktur zu überführen, sodass ich eine Datei für jeden Tag habe.
Siehe dazu: Link zu Batchscript, was Daten zusammenführt (unten)

Vielleicht ist es möglich, dass die Funktion des Datenzusammenführens in das Powershell-Script eingebunden wird. Dann können z. B. die Daten die schon verwendet wurden (zum Zusammenführen und anschließende Mittelwertbildung) umbenannt werden.

Was ist deine Meinung dazu?
Bitte warten ..
Mitglied: Sven289
24.06.2014 um 14:32 Uhr
Zitat von colinardo:
p.s. Excel kann deine CSV-Dateien schön auswerten und filtern !

Meine Daten lasse ich mir auch mit Excel anzeigen und erstelle mir dazu Diagramme. Schön ist es aber, wenn die Daten schon in einer Form bereitstehen, die eine weitere Verarbeitung zulässt. Auch brauche ich ja eine txt- oder csv-Datei mit aufbereiteten Werten, da die Daten noch weitergereicht werden. Excel kann dies leider nicht liefern.
Bitte warten ..
Neuester Wissensbeitrag
Humor (lol)

Linkliste für Adventskalender

(3)

Information von nikoatit zum Thema Humor (lol) ...

Ähnliche Inhalte
Webentwicklung
HTML Output in eine txt Datei mit VisualBasicScript (2)

Frage von coca22COCA zum Thema Webentwicklung ...

Batch & Shell
Merkwürdige Zeilenformatierung in txt Datei (3)

Frage von miczar zum Thema Batch & Shell ...

Batch & Shell
gelöst In Batchdatei Variablen befüllen - mit Werten aus einer TXT-Datei (6)

Frage von donnyS73lb zum Thema Batch & Shell ...

Batch & Shell
gelöst Einzelne Zeilen in txt Datei speichern und auslesen (7)

Frage von noah1400 zum Thema Batch & Shell ...

Heiß diskutierte Inhalte
Router & Routing
gelöst Ipv4 mieten (22)

Frage von homermg zum Thema Router & Routing ...

Windows Server
DHCP Server switchen (20)

Frage von M.Marz zum Thema Windows Server ...

Exchange Server
gelöst Exchange 2010 Berechtigungen wiederherstellen (20)

Frage von semperf1delis zum Thema Exchange Server ...

Hardware
gelöst Negative Erfahrungen LAN-Karten (19)

Frage von MegaGiga zum Thema Hardware ...