bjk1903
Goto Top

Powershell - Logfiles (.txt) auslesen und und bestimmte Inhalte nach Excel übertragen

Hallo Zusammen,

ich habe schon sehr viel über Powershell gehört, ebenso wie viel damit möglich ist. Ich hätte da eine Angelegenheit, die mich interessiert.
Ich habe in einer Hauptverzeichnis verschiedene Logfiles in .txt Format. Darin sind mehrere Prozesse und die dazugehörigen Messungen für jeweilige Iterationen aufgelistet.

Mich würde interessieren, ob es möglich wäre bestimmte Stellen von der .txt Datei in einer Excel Tabelle anzuzeigen und aus diesen Werten dann automatisch ein Diagramm zu erstellen.
Ich habe absolut keine Vorstellung darüber, ob so etwas überhaupt mit Powershell möglich ist.

Das wäre z.B so ein Ausschnitt aus einer der .txt Dateien


x y
0.001 -0.030
-0.009 -0.000
0.001 0.003
-0.006 0.003
0.004 0.006

Wäre für jede Hilfe Danke.

Gruß Ioanna

Content-Key: 300465

Url: https://administrator.de/contentid/300465

Ausgedruckt am: 28.03.2024 um 08:03 Uhr

Mitglied: 114757
114757 31.03.2016 aktualisiert um 15:58:38 Uhr
Goto Top
Moin,
klar geht alles, wodurch sind die Stellen in der Textdatei denn überhaupt erkennbar, d.h. woran erkenne ich den Anfang an dem die Daten anfangen und wo sie aufhören in deinen Dateien ?

BITTE nutze Codetags für das Posten von Text oder Codebestandteilen!! Das ist essentiell um dir vernünftig helfen zu können.


Wie man grundsätzlich mit Excel und Powershell arbeitet steht hier im Forum schon in diversen Beiträgen:

VBA wäre aber, wenn du sowieso schon mit Excel arbeitest, empfehlenswerter da schneller (Powershell ist bei der COM-Verarbeitung ziemlich langsam), guckst du hier:
Bestimmte Daten aus mehreren Txt-Dateien auslesen und in excel sortiert in spalten einfügen

@colinardo hat hier auch mal ein Beispiel gepostet das die Charts mit Google-Charts und Powershell erstellt
Reports - Grafische Darstellung

Gruß jodel32
Mitglied: bjk1903
bjk1903 01.04.2016 um 11:19:39 Uhr
Goto Top
Also die Textdateien sind immer gleich aufgebaut hier ein Bsp:

Rot X	Rot Y	Rot Z
-0.195	-0.093	0.000	FA_1602181302Hquangca1265db5003_BML050_UFAL_Kpp_FPC1b 18.02.2016  13:07:14.635
0.011	-0.018	0.000	FA_1602181302Hquangca1265db5003_BML050_UFAL_Kpp_FPC1b 18.02.2016  13:07:19.310
0.354	0.041	0.000	FA_1602181302Hquangca1265db5003_BML050_UFAL_Kpp_FPC1b 18.02.2016  13:07:23.387
-0.093	-0.020	0.000	FA_1602181302Hquangca1265db5003_BML050_UFAL_Kpp_FPC1b 18.02.2016  13:07:27.523
-0.044	-0.037	0.000	FA_1602181302Hquangca1265db5003_BML050_UFAL_Kpp_FPC1b 18.02.2016  13:07:31.271
-0.019	-0.038	0.000	FA_1602181302Hquangca1265db5003_BML050_UFAL_Kpp_FPC1b 18.02.2016  13:07:34.575
-0.018	-0.039	0.000	FA_1602181302Hquangca1265db5003_BML050_UFAL_Kpp_FPC1b 18.02.2016  13:07:37.909

Das wären in diesem Fall 7 Iterationen also 7 Messungen sozusagen. Je nach dem welche .txt Datei ich offen habe, ändern sich die Werte Rot X, Y, Z. In diesem Fall wurden eben nur X und Y gemessen.

Also wäre es sehr hilfreich wenn ich einen Liniendiagramm über (in diesem Fall 7 Iterationen) mit dem Messwerten von Rot X und Y erstellen kann. auf der X Achse wäre dann die Anzahl der Iterationen und auf der Y Achse eben die Messwerte.

Mit VBA geht das sicherlich, bin aber kein Fan davon um ehrlich zu sein. Ich würde trotz in allem es versuchen mit PS zu lösen.

Gruß

Ioanna
Mitglied: colinardo
colinardo 01.04.2016 aktualisiert um 14:12:53 Uhr
Goto Top
Hallo Ioanna,

für dein Beispiel hier eine Powershell-Demo für ein Verzeichnis mit mehreren dieser Logdateien.
Das Verzeichnis in der sich die Logfiles befinden wird in der zweiten Zeile angegeben.
Ich gehe einfach mal von einer Dateiendung .log aus - falls diese anders lauten sollte kannst du den Dateifilter in Zeile 9 anpassen.
Das Skript importiert deine Log's in jeweils eine separate Excel-Datei die dann im selben Verzeichnis der Log-Datei mit der Endung *.xlsx abgelegt wird. In jeder Datei wird zu den Daten ein simples Liniendiagramm erstellt das deine 3 Reihen in dieser Art darstellt:

screenshot

Das Skript wurde hier mit deinen Daten erfolgreich getestet.
Alle Code-Zeilen sind für dein besseres Verständnis kommentiert.
# Verzeichnis der Log-Files
$folder_logfiles = 'C:\quelle\daten'  

# Excel Objekt
$objExcel = New-Object -Com Excel.Application
# Dialoge deaktivieren
$objExcel.DisplayAlerts = $false

gci $folder_logfiles -Filter '*.log' | %{  
    # Informationsmeldung ausgeben
    write-host "Erstelle Excel-Datei und Diagramm für Logfile: '$($_.Fullname)'" -F Green  
    
    # Daten aus Logfile als Object importieren (Punkte vorher in Kommas umwandeln)
    $data = (gc $_.Fullname).replace('.',',') | ConvertFrom-CSV -delimiter "`t"   
  
    # Daten in eine CSV exportieren
    $data | export-csv "$env:Temp\data.csv" -Delimiter ";" -NoType -Encoding UTF8 -Force  

    # CSV mit Excel öffnen
    $wb = $objExcel.Workbooks.Open("$env:Temp\data.csv")  
    # erstes Sheet referenzieren
    $ws = $wb.Sheets.Item(1)
    # Quelldatenbereich für das Diagramm
    $rngData = $ws.Range("A1").CurrentRegion  
    # LinienChart hinzufügen
    $chart = $ws.Shapes.AddChart(4)
    # Datenbereich für das Diagramm festlegen
    $chart.Chart.SetSourceData($rngData)

    # Sheet wird im Log-Verzeichnis mit dem selben Basenname der Logdatei erstellt.
    $wb.SaveAs("$folder_logfiles\$($_.Basename).xlsx",51)  
    # Sheet schließen
    $wb.Close()
}

# Dialoge wieder aktivieren
$objExcel.DisplayAlerts = $true
# Excel schließen
$objExcel.Quit()
# Ressourcen freigeben
[void][System.Runtime.InteropServices.Marshal]::ReleaseComObject($objExcel)
Benötigst du mehr Hilfe zur persönlichen grafischen Anpassung des Diagrammes kannst du mich gerne via PM kontaktieren. Dies ist dann aber nicht mehr kostenlos.

Nun viel Erfolg bei deiner Umsetzung!
Grüße Uwe

p.s. Und bitte nicht verzweifeln wenn deine ersten Gehversuche mit Excel und der Powershell ziemlich frustrierend sind, denn hier gibt es diverse Fallstricke wenn man VBA-Codegerüste heranzieht. Ebenso ist das Testen des Codes in der ISE nicht empfehlenswert, da es hier ebenfalls oft zu Problemen kommt. Also das Skript besser in einer separaten Konsole ausführen.

Falls der Beitrag gefällt, seid so nett und unterstützt mich durch eine kleine Spende / If you like my contribution please support me and donate

Tags: Powershell,Diagramm,Excel,CSV
Mitglied: 114757
114757 01.04.2016 aktualisiert um 12:56:46 Uhr
Goto Top
Boh ey... face-smile Danke @colinardo für deine perfekte Vertretung face-wink
Mitglied: colinardo
colinardo 01.04.2016 aktualisiert um 13:00:45 Uhr
Goto Top
Zitat von @114757:
Boh ey... face-smile Danke @colinardo für deine perfekte Vertretung face-wink
Bittö @114757, mach ich doch gerne wenn's die Zeit zulässt face-smile

Schönes Wochenende
Grüße Uwe
Mitglied: bjk1903
bjk1903 01.04.2016 um 13:01:08 Uhr
Goto Top
Das ist auf jeden Fall eine große Hilfe und etwas, womit ich was anfangen kann.

Danke für die schnelle und super kompetente Antwort!!

Gruß

Ioanna

PS: Ich mache mich an die Arbeit und wenn ich nebenher Fragen habe würde ich sie gern stellen. Soll ich diese Diskussion vorerst noch ungelöst lassen?
Mitglied: colinardo
colinardo 01.04.2016 aktualisiert um 13:05:47 Uhr
Goto Top
Zitat von @bjk1903:
PS: Ich mache mich an die Arbeit und wenn ich nebenher Fragen habe würde ich sie gern stellen.
Kannst du machen, ich beantworte sie Dir hier gerne solange sie im Rahmen der Frage bleiben, und für die Nachwelt nützlich sind.
Erwarte heute jedoch keine prompten Antworten, bin zeitlich momentan sehr unter Druck.
Soll ich diese Diskussion vorerst noch ungelöst lassen?
Wie du willst.
Mitglied: bjk1903
bjk1903 01.04.2016 um 13:45:22 Uhr
Goto Top
Hallo,

schon die erste Frage im Anflug : In welcher Zeile wird die Ausgabe der Logfiles in Excel definiert? Also dass zb nur bestimmte Stellen der Logfiles im Excel auftauchen.

Gruß

Ioanna
Mitglied: colinardo
colinardo 01.04.2016 aktualisiert um 14:14:03 Uhr
Goto Top
Zitat von @bjk1903:
schon die erste Frage im Anflug : In welcher Zeile wird die Ausgabe der Logfiles in Excel definiert? Also dass zb nur bestimmte Stellen der Logfiles im Excel auftauchen.
Das Logfile wird so übernommen wie du es oben gepostet hast, außer das die Punkte der Dezimalstellen in Kommas umgewandelt werden (Zeile 14), von mehr Inhalt war nirgendwo die Rede.

Dazu müsstest du genauer definieren wo in dem Logfile gesucht werden soll und was die Begrenzung der Daten ist, z.B. immer eine Leerzeile am Ende der Daten. Dann kann man das z.B. mit Regular-Expression ausfiltern.

Am einfachsten du postest oder schickst mit per PM ein komplettes File und definierst den möglichen Rahmen um die Daten, das ist für eine Extraktion per Regex essentiell.

Hier mal ein Beispiel wie man den Datenblock per RegEx extrahieren kann, wenn er definiert wird durch seine Überschriften am Anfang der Zeile und am unteren Ende begrenzt durch eine leere Zeile.
Aus der einzelnen Zeile 14 im obigen Code wird dann:
# .....
    # Daten aus Logfile extrahieren
    $raw_data = [regex]::match((gc $_.Fullname | out-string),'(?ism)(^Rot X\tRot Y.*?)^\s*$').Groups[1].Value  
    # Punkte durch Kommas ersetzen
    $raw_data = $raw_data.replace('.',',')  
    # CSV-Daten in ein Powershell-Objekt konvertieren (mit Tab als Delimiter-Definition)
    $data = $raw_data | ConvertFrom-CSV -delimiter "`t"   
# .....
Und falls du Regular Expressions nicht kennst, bitte hier nachlesen, denn das können wir dir hier nicht beibringen: Regular Expressions Tutorial
Mitglied: 114757
114757 05.04.2016 aktualisiert um 15:06:44 Uhr
Goto Top
[OT]
FA_1602181302Hquangca1265db5003_BML050_UFAL_Kpp_FPC1b
Mhhhhh, das kommt mir jetzt aber doch irgendwie bekannt vor, scheint so als hätten wir hier einen Doppelgänger mit zweitem Account, einmal als Männchen und hier als Weibchen face-big-smile face-big-smile
Nicht war @Weezyt face-wink. War die Geschlechtsumwandlung schmerzhaft face-smile ?
[/OT]
Mitglied: Biber
Biber 05.04.2016 um 15:07:42 Uhr
Goto Top
[OT]
...nun ärgert doch die Mädelz nicht immer so...

Nicht auch noch an den Zöpfen ziehen...
[/OT]
Mitglied: 114757
114757 05.04.2016 aktualisiert um 15:15:20 Uhr
Goto Top
Zitat von @Biber:

[OT]
...nun ärgert doch die Mädelz nicht immer so...

Nicht auch noch an den Zöpfen ziehen...
[/OT]

wohl eher nicht an der Nase ziehen face-smile
Mitglied: colinardo
colinardo 06.04.2016 aktualisiert um 13:39:47 Uhr
Goto Top
Zitat von @114757:
[OT]
FA_1602181302Hquangca1265db5003_BML050_UFAL_Kpp_FPC1b
Mhhhhh, das kommt mir jetzt aber doch irgendwie bekannt vor, scheint so als hätten wir hier einen Doppelgänger mit zweitem Account, einmal als Männchen und hier als Weibchen face-big-smile face-big-smile
[/OT]
Aha, Danke für die Info. Dann ist das wohl mal wieder einer/eine der/die hier nur Code abgreifen wollen ...

@Biber kannst den Thread dicht machen. Der TO ist ja noch nicht mal bereit für eine individuell angepasste Lösung(PM) zu löhnen.
Mitglied: Biber
Biber 06.04.2016 um 13:55:34 Uhr
Goto Top
Moin colinardo,


Zitat von @colinardo:

Aha, Danke für die Info. Dann ist das wohl mal wieder einer/eine der/die hier nur Code abgreifen wollen ...

@Biber kannst den Thread dicht machen. Der TO ist ja noch nicht mal bereit für eine individuell angepasste Lösung(PM) zu löhnen.
Na ja, egal ob es nun eine Geschlechtsumwandlung war oder eine multiple Persönlichkeit ist...
-> beides kostet Geld und fehlt dann im Budget für PowerShell-Fremdleistungen.

Als Moderator weiss ich auch nicht genau, wie ich mit diesem Transgender-Vogel umgehen möchte, aber diesen Beitrag auf "Erledigt" zu setzen, das kann ich vertreten.

back-to-top### Closed ###