Daten aus txt-Files sammeln
Moin
Erstmal: Ich habe kein gescheites Unterforum dafür gefunden, falls ihr ein besseres findet bin ich froh darum..
Ich habe hier seeehr viele txt-Files, welche folgendes Format haben:
Dabei verändert sich die Anzahl der Werte bei Titel4 je nach txt-File.
Nun muss auch aus all diesen txt-Files den Wert von Titel2 und den jeweils letzten Wert von Titel4 herausfinden. Dabei ist egal ob der jeweilige Titel mitgeliefert wird oder auch nicht.
Wie könnte ich diese Daten aus den vielen Dateien sammeln, ohne dass ich dies von Hand machen muss?
LG MbGb
Erstmal: Ich habe kein gescheites Unterforum dafür gefunden, falls ihr ein besseres findet bin ich froh darum..
Ich habe hier seeehr viele txt-Files, welche folgendes Format haben:
Titel1: Wert
Titel2: Wert
Titel3: Wert
Titel4:
>> Wert Nr. 1
>> Wert Nr. 2
>> Wert Nr. 3
Dabei verändert sich die Anzahl der Werte bei Titel4 je nach txt-File.
Nun muss auch aus all diesen txt-Files den Wert von Titel2 und den jeweils letzten Wert von Titel4 herausfinden. Dabei ist egal ob der jeweilige Titel mitgeliefert wird oder auch nicht.
Wie könnte ich diese Daten aus den vielen Dateien sammeln, ohne dass ich dies von Hand machen muss?
LG MbGb
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 331671
Url: https://administrator.de/contentid/331671
Ausgedruckt am: 19.11.2024 um 02:11 Uhr
16 Kommentare
Neuester Kommentar
Servus,
da du hier leider kein OS nennst hier eine Skript-Variante mit Powershell. Es durchsucht einen Ordner mit seinen Unterordnern nach Textdateien *.txt und gibt nur die reinen Werte in eine Textdatei aus.
Viel Spaß
Grüße Uwe
da du hier leider kein OS nennst hier eine Skript-Variante mit Powershell. Es durchsucht einen Ordner mit seinen Unterordnern nach Textdateien *.txt und gibt nur die reinen Werte in eine Textdatei aus.
$quelle = 'D:\Ordner'
$zieldatei = 'D:\ergebnis.txt'
gci $quelle -Filter *.txt -recurse | ?{!$_.PSIsContainer} | %{
[regex]::Matches((gc $_.Fullname -Raw),'(?ism)^Titel2:\s*([^\r\n]*)|^Titel4:.*^>> ([^\r\n]*)').Captures | %{$_.Groups[1..2].Value |?{$_ -ne ""}}
} | set-content $zieldatei
Grüße Uwe
Das geht indem Fall dann nicht mehr da ich davon ausging das nur ein Bereich mit mehreren Items existiert, in dem Fall mach es so
Regular Expressions Tutorial
Lerne es und du kannst alles extrahieren was du dir vorstellen kannst . Kannst du in jeder Skript und Programmiersprache verwenden.
Sorry wenn ich dir jetzt hier den Regex nicht weiter erläutere, das würde Tage dauern .
$quelle = 'D:\Ordner'
$zieldatei = 'D:\ergebnis.txt'
[regex]::matches((gc "$quelle\*.txt" -raw | out-string),'(?ism)^Titel2: ([^\r\n]*)|^Titel[34]:.*?^>> ([^\r\n]+)\s*(?=^Titel|\Z)').Captures | %{$_.Groups[1..2].Value |?{$_ -ne ""}} | set-content $zieldatei
Verzeih mir, ich bin wirklich eine Vollniete was PS angeht..
Das was du hier brauchst ist RegexRegular Expressions Tutorial
Lerne es und du kannst alles extrahieren was du dir vorstellen kannst . Kannst du in jeder Skript und Programmiersprache verwenden.
Sorry wenn ich dir jetzt hier den Regex nicht weiter erläutere, das würde Tage dauern .
Na dann kannst du beim alten bleiben:
Du brauchst dann nur den Teil: ^Titel2:\s*([^\r\n]*) duplizieren und mit deinem String versehen, aber denke dran Sonderzeichen bei den Namen zu beachten.Denn der Punkt in .NET Framwork würde jedes belibige Zeichen matchen, also escapen mit \.
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren. Merci.
Grüße Uwe
$quelle = 'D:\Ordner'
$zieldatei = 'D:\ergebnis.txt'
gci $quelle -Filter *.txt -recurse | ?{!$_.PSIsContainer} | %{
[regex]::Matches((gc $_.Fullname -Raw),'(?ism)^Titel2:\s*([^\r\n]*)|^Titel3:\s*([^\r\n]*)|^Titel4:.*^>> ([^\r\n]*)').Captures | %{$_.Groups[1..3].Value |?{$_ -ne ""}}
} | set-content $zieldatei
Wenns das dann war, den Beitrag bitte noch auf gelöst setzen, und Lösungen markieren. Merci.
Grüße Uwe
Zitat von @ludaku:
Sorry konnte das nicht in einen Post packen:
Jetzt kommt ein ganz schwieriger Part (finde ich..) Der ging bei mir ganz unter..
Ich brauche jetzt auch noch aus dem Dateinamen, wo er die Daten rausholt einen String..
Die Dateinamen sind so aufgebaut: "CLIENT_INFOS-XXXX{hier kommen noch ein paar Zeichen, Länge ist dabei unbekannt}" und ich brauche nun das XXXX. Ich denke mal das ist mit Powershell lösbar oder?
Kein Problem, in der Schleife von oben kommst du so an die Info vom DateinamenSorry konnte das nicht in einen Post packen:
Jetzt kommt ein ganz schwieriger Part (finde ich..) Der ging bei mir ganz unter..
Ich brauche jetzt auch noch aus dem Dateinamen, wo er die Daten rausholt einen String..
Die Dateinamen sind so aufgebaut: "CLIENT_INFOS-XXXX{hier kommen noch ein paar Zeichen, Länge ist dabei unbekannt}" und ich brauche nun das XXXX. Ich denke mal das ist mit Powershell lösbar oder?
$_.Basename.split("-")[1]
$_.Basename.Substring(12)
$_.Basename -replace '^CLIENT_INFOS-(.*)','$1'
Hallo,
ich habe eine sehr sehr ähnliche Frage, bin aber auf biegen und brechen nicht in der Lage deine Lösungen so anzupassen, dass es auch für meine Zwecke geht, da ich mit der PowerShell überhaupt nicht zurecht komme. Hoffe mal, dass du mir vielleicht helfen kannst:
ich habe mir eine batch geschrieben, die mittels wget alle 10 minuten ein image von einer website lädt und als "nameTT.MM.JJJJ HH.MM.SS.html" speichert. dafür hat's gereicht
in jeder dieser dateien existiert ein nur einmal vorhandener block namens <span class="text-large" id="quote_size">SIZE</span>, wovon ich die SIZE in abhängigkeit von datum und uhrzeit in excel weiterverarbeiten / plotten muss.
ideal wäre, denke ich, eine csv datei mit dem format TT.MM.JJJJ; HH.MM.SS; SIZE pro input-datei und zeile, wobei da noch ein potentielles problem bei ein- und zweistelligen werten im datum und der zeit liegen könnte, aber das sollte ich hoffentlich excel-intern lösen können.
kann mir da jemand helfen? ^^
ich habe eine sehr sehr ähnliche Frage, bin aber auf biegen und brechen nicht in der Lage deine Lösungen so anzupassen, dass es auch für meine Zwecke geht, da ich mit der PowerShell überhaupt nicht zurecht komme. Hoffe mal, dass du mir vielleicht helfen kannst:
ich habe mir eine batch geschrieben, die mittels wget alle 10 minuten ein image von einer website lädt und als "nameTT.MM.JJJJ HH.MM.SS.html" speichert. dafür hat's gereicht
in jeder dieser dateien existiert ein nur einmal vorhandener block namens <span class="text-large" id="quote_size">SIZE</span>, wovon ich die SIZE in abhängigkeit von datum und uhrzeit in excel weiterverarbeiten / plotten muss.
ideal wäre, denke ich, eine csv datei mit dem format TT.MM.JJJJ; HH.MM.SS; SIZE pro input-datei und zeile, wobei da noch ein potentielles problem bei ein- und zweistelligen werten im datum und der zeit liegen könnte, aber das sollte ich hoffentlich excel-intern lösen können.
kann mir da jemand helfen? ^^
@skeppi Schau doch bitte erst mal in die Forenrichtlinien: Dort steht aus gutem Grund "Übernehme keine Beiträge von anderen" denn das führt für andere die hier vorbei kommen zur Verwirrung. DANKE!
Wenn du von mir persönlich Hilfe willst melde dich per PN oder mach einen neuen Thread mit der Frage auf. Merci.
Grüße Uwe
Wenn du von mir persönlich Hilfe willst melde dich per PN oder mach einen neuen Thread mit der Frage auf. Merci.
Grüße Uwe