Top-Themen

Aktuelle Themen (A bis Z)

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

Mitglied: Sven289

Sven289 (Level 1) - Jetzt verbinden

23.06.2014, aktualisiert 24.06.2014, 2294 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 ..
Ähnliche Inhalte
Batch & Shell

Zahlen von Internetseite suchen und in txt-Datei speichern

gelöst Frage von Nick.BBatch & Shell7 Kommentare

Hallo, Ich wollte auf der Internetseite XY einen Wort z.B. Preis suchen und die dahinterstehende Zahl in eine txt-Datei ...

Batch & Shell

Txt auslesen zähler hinzufügen

gelöst Frage von NewNoobBatch & Shell9 Kommentare

Und zwar möchte ich eine batch schreiben in dem ich alle verknüpfungen suche und dann lösche ausser in bestimmten ...

Microsoft Office

Dateien mit dem aktuellen Datum Zählen

gelöst Frage von OlliMucMicrosoft Office3 Kommentare

Servus zusammen, ich hoffe sehr, dass mir mal wieder jemand helfen kann. Ich arbeite mit einem VBA-Makro bzw einer ...

Microsoft Office

Excel formel vereinfachen Mittelwert wenn

Frage von neueradmuserMicrosoft Office1 Kommentar

hi, ich habe aktuell diese formel: =MITTELWERT(WENN((A2:A10)=HEUTE();(B2:B10));(WENN((A2:A10)=HEUTE()-1;B2:B10));(WENN((A2:A10)=HEUTE()-2;B2:B10));(WENN((A2:A10)=HEUTE()-3;B2:B10));(WENN((A2:A10)=HEUTE()-4;B2:B10));(WENN((A2:A10)=HEUTE()-5;B2:B10));(WENN((A2:A10)=HEUTE()-6;B2:B10));(WENN((A2:A10)=HEUTE()-7;B2:B10))) zerlegt also: =MITTELWERT (WENN((A2:A10)=HEUTE();(B2:B10)); (WENN((A2:A10)=HEUTE()-1;B2:B10)); (WENN((A2:A10)=HEUTE()-2;B2:B10)); (WENN((A2:A10)=HEUTE()-3;B2:B10)); (WENN((A2:A10)=HEUTE()-4;B2:B10)); (WENN((A2:A10)=HEUTE()-5;B2:B10)); (WENN((A2:A10)=HEUTE()-6;B2:B10)); (WENN((A2:A10)=HEUTE()-7;B2:B10)) ) ...

Neue Wissensbeiträge
Windows 10
Zero-Day-Lücke in Microsoft Edge
Information von kgborn vor 19 StundenWindows 10

In Microsofts Edge-Browser klafft wohl eine nicht geschlossene (0-Day) Sicherheitslücke im Just In Time Compiler (JIT Compiler) für Javascript. ...

Sicherheit
Microsoft und Skype: Sicherheit
Information von kgborn vor 20 StundenSicherheit

Die Tage gab es ja einige Berichte zur Sicherheit des Skype-Updaters. Der Updater von Skype läuft unter dem Konto ...

Datenschutz

Behörden ignorieren Sicherheitsbedenken gegenüber Windows 10

Information von Penny.Cilin vor 1 TagDatenschutz8 Kommentare

Hallo, passend zum Thema Ablösung LIMUX in München ein Beitrag bei Heise (siehe Link folgend). Behörden ignorieren Sicherheitsbedenken gegenüber ...

Sicherheit
Information Security Hub Munich airport
Information von brammer vor 1 TagSicherheit

Hallo, Neues Center für Cyber Kriminalität am Münchener Flughafen brammer

Heiß diskutierte Inhalte
Exchange Server
Exchange Postfach Einbindung Betriebs-rat -Arzt, Bewerbung .
gelöst Frage von YellowcakeExchange Server23 Kommentare

Hey ich habe da mal eine Denksport Aufgabe bekommen Genutzt wird ein Exchange Server 2010. hier gibt es den ...

Windows Server
Delgegierte OU via RDP verwalten - Objektverwaltung zuweisen
gelöst Frage von TOAOICEWindows Server12 Kommentare

Hallo, ich habe folgendes Problem. Ich möchte in meiner Domäne (Server2016), einer Gruppe (OUAdmin) Berechtigungen auf die OU Test ...

LAN, WAN, Wireless
Gigabit-Lan mit zwei 4-adrigen Kabeln?
Frage von ArvedirmerLAN, WAN, Wireless11 Kommentare

Ich habe folgendes Problem: Ich betreue eine kleine Firma die sich im 1.Stock eines Gebäudes befindet. Es existiert ein ...

Router & Routing
Routing Probleme mit Firewall
gelöst Frage von mb1811Router & Routing9 Kommentare

Hallo Zusammen! Ich habe folgende Problematik, wo ich ein wenig Input benötige: Gem. angehängter Skizze habe ich folgenden Stand: ...