Mit Powershell 5 min-Files auslesen und Inhalt Monatsfile schreiben
Hallo zusammen
Ich mache gerade meine ersten Gehversuche mit Powershell. Gegeben sind txt-Files mit den Daten einer Wetterstation, welche alle 5 Minuten anfallen und so aussehen:
Ziel: Jeden Monat möchte ich diese Einzelfiles auswerten und Monatsfiles erstellen. Die sähen dann so aus:
Folgendes Powershell-Script soll mir diese Arbeit abnehmen:
Leider hagelt es Fehlermeldungen...
...ich wäre froh um etwas Hilfe bei der Strukturierung der Probleme und danke euch im Voraus für jeden Hinweis!
Gruss, Humpe
Ich mache gerade meine ersten Gehversuche mit Powershell. Gegeben sind txt-Files mit den Daten einer Wetterstation, welche alle 5 Minuten anfallen und so aussehen:
-0.7
817.4
0.0
17:50
16.11.2018
Ziel: Jeden Monat möchte ich diese Einzelfiles auswerten und Monatsfiles erstellen. Die sähen dann so aus:
...
16.11.2018 17:50;-0.7;0.0;817.4
16.11.2018 17:55;-0.8;0.0;817.5
...
Folgendes Powershell-Script soll mir diese Arbeit abnehmen:
#Station bzw. Loggerbezeichnung
$Station = "meineWetterstation"
$Jahr = "2018"
$Monat = "11"
$Pfad = "E:\data\raw\input\" + $Jahr + "_" + $Monat + "\"
$Ausgabefile ="E:\data\raw\output\" + $Station + "_" + $Jahr + "_" + $Monat + ".csv"
#Für jedes File im Pfad:
foreach($File in $Pfad)
{
$Inhalt = Get-Content $File
#Für jede Zeile im File
foreach($temp in $Inhalt)
{
$Trenner = $temp.Split("`r`n")
$leer = $Trenner
$Temperatur = $Trenner[1]
$leer = $Trenner[2]
$Luftdruck[3]
$leer = $Trenner[4]
$leer = $Trenner[5]
$leer = $Trenner[6]
$Zeit = $Trenner[7]
$Datum = $Trenner[8]
$Ausgabe = "$($Datum);$($Zeit);$($Temperatur);$($Niederschlag);$($Luftdruck)" | Out-File -Encoding "UTF8" -FilePath $Ausgabefile -Append
}
}
#jetzt UTF-8 ohne BOM
$path_utf8_ohne_BOM = Get-Content $Ausgabefile
[System.IO.File]::WriteAllLines($Ausgabefile, $path_utf8_ohne_BOM);
Leider hagelt es Fehlermeldungen...
Get-Content : Ein Teil des Pfades "E:\data\raw\input\2018_11\" konnte nicht gefunden werden.
In E:\data\raw\scripts\wetterdaten.ps1:13 Zeichen:12
+ $Inhalt = Get-Content $File
+ ~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (E:\data\raw\input\2018_11\:String) [Get-Content], DirectoryNotFoundExcepti
on
+ FullyQualifiedErrorId : GetContentReaderDirectoryNotFoundError,Microsoft.PowerShell.Commands.GetContentCommand
Get-Content : Der Pfad "E:\data\raw\output\meineWetterstation_2018_11.csv" kann nicht gefunden werden, da er nicht vorhanden ist.
In E:\data\raw\scripts\wetterdaten.ps1:34 Zeichen:23
+ $path_utf8_ohne_BOM = Get-Content $Ausgabefile
+ ~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : ObjectNotFound: (E:\data\raw\mei...ion_2018_11.csv:String) [Get-Content], ItemNotFoundExceptio
n
+ FullyQualifiedErrorId : PathNotFound,Microsoft.PowerShell.Commands.GetContentCommand
Ausnahme beim Aufrufen von "WriteAllLines" mit 2 Argument(en): "Der Wert darf nicht NULL sein.
Parametername: contents"
In E:\data\raw\scripts\wetterdaten.ps1:35 Zeichen:1
+ [System.IO.File]::WriteAllLines($Ausgabefile, $path_utf8_ohne_BOM);
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (:) , MethodInvocationException
+ FullyQualifiedErrorId : ArgumentNullException
...ich wäre froh um etwas Hilfe bei der Strukturierung der Probleme und danke euch im Voraus für jeden Hinweis!
Gruss, Humpe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 394479
Url: https://administrator.de/contentid/394479
Ausgedruckt am: 26.11.2024 um 09:11 Uhr
3 Kommentare
Neuester Kommentar
Hallo,
Und auch mal hier geschaut warum dort nach E:\data\raw\input\2018_11\:String gesucht wird?
Das ist ja auch kein Pfad sondern eine Datei. Warum?
https://www.google.com/search?q=powershell+for+dummies
https://www.google.com/search?q=powershell+tutorial
https://www.google.com/search?q=powershell+debugging
Gruß,
Peter
Zitat von @humpe99:
Was genau steht dort?
Get-Content : Ein Teil des Pfades "E:\data\raw\input\2018_11\" konnte nicht gefunden werden.
> In E:\data\raw\scripts\wetterdaten.ps1:13 Zeichen:12
+ CategoryInfo : ObjectNotFound: (E:\data\raw\input\2018_11\:String) [Get-Content], DirectoryNotFoundException
Get-Content : Der Pfad "E:\data\raw\output\meineWetterstation_2018_11.csv" kann nicht gefunden werden, da er nicht vorhanden ist.
ich wäre froh um etwas Hilfe bei der Strukturierung der Probleme
Deine Probleme sind durch der Ausgaben deiner Fehler schon sauber strukturiert und sollten in der reihenfolge des auftretens abgeabeitet werden. Wir sagen eher Dubggen dazu. Zu Powershell ist auch dein Internet mit Hilfen, Tutorials (PDF sowie YT und Beispielen) voll und warten nur auf dein finden und durcharbeiten.https://www.google.com/search?q=powershell+for+dummies
https://www.google.com/search?q=powershell+tutorial
https://www.google.com/search?q=powershell+debugging
Gruß,
Peter
Moin,
1. ist $Pfad kein Array, sondern ein String, 2. steht da auch kein Dateipfad drin. Deshalb wird das so nichts. Lösung:
Wie Du ja schon im Kommentar schreibst, steht in $temp die Zeile des ausgelesenen Files. Wie willst Du eine Zeile am Zeilenumbruch splitten? Deshalb sind auch Deine Variablen alle leer außer ironischerweise $leer, in der die Zeile steht. Die Zeilen stehen in $temp bis $temp[8].
hth
Erik
Zitat von @humpe99:
$Pfad = "E:\data\raw\input\" + $Jahr + "_" + $Monat + "\"
> $Ausgabefile ="E:\data\raw\output\" + $Station + "_" + $Jahr + "_" + $Monat + ".csv"
>
> #Für jedes File im Pfad:
> foreach($File in $Pfad)
1. ist $Pfad kein Array, sondern ein String, 2. steht da auch kein Dateipfad drin. Deshalb wird das so nichts. Lösung:
$files = get-childitem $Pfad
foreach($file in $files)
$Inhalt = Get-Content $File
> #Für jede Zeile im File
> foreach($temp in $Inhalt)
> {
> $Trenner = $temp.Split("`r`n")
Wie Du ja schon im Kommentar schreibst, steht in $temp die Zeile des ausgelesenen Files. Wie willst Du eine Zeile am Zeilenumbruch splitten? Deshalb sind auch Deine Variablen alle leer außer ironischerweise $leer, in der die Zeile steht. Die Zeilen stehen in $temp bis $temp[8].
hth
Erik
$folderInput = 'D:\JaLeckMichAmArschThorstenDörnbachNaImmerNochDerAlteFicker'
gci $folder -Filter *.txt -File | %{
$c = gc $_.FullName
[pscustomobject]@{
Datum = (get-date "$($c[8]) $($c[7])")
Wert1 = $c[1]
Wert2 = $c[3]
Wert3 = $c[4]
}
} | group {$_.Datum.toString("yyyy_MM")} | %{
$_.Group | export-csv "$folder\Wetterstation_$($_.Name).csv" -Delimiter ";" -NoType -Encoding UTF8
}