Eine TXT-Datei auslesen und gesuchten Inhalt mit Treffer in eine andere Textdatei schreiben
Hallo zusammen
Ich habe mehrere Textdateien, die unterschiedlich aufgebaut sind, teilweise weisen sie ein Muster auf wie ein csv, oder aber auch ursprünglich aus einem XML voller Code.
In allen Textfiles kommen aber immer Textteile vor, die mit AZQ_ beginnen und max 10 Digits haben. Ich möchte über ein Powershell alle diese Einträge wenn möglich ohne Duplikate in ein anderes Textfile schreiben, da ich die Daten weiter verarbeiten möchte.
Beispiel
Abgaskrümmer</Value>
</Values>
</ID>
<ID="AZQ_125875" >
<Name>258555600 - VW Golf</Name>
In neues Textfile
AZQ_125875
usw.
Wie krieg ich das am besten hin?
Besten Dank für Eure Hilfe
Ich habe mehrere Textdateien, die unterschiedlich aufgebaut sind, teilweise weisen sie ein Muster auf wie ein csv, oder aber auch ursprünglich aus einem XML voller Code.
In allen Textfiles kommen aber immer Textteile vor, die mit AZQ_ beginnen und max 10 Digits haben. Ich möchte über ein Powershell alle diese Einträge wenn möglich ohne Duplikate in ein anderes Textfile schreiben, da ich die Daten weiter verarbeiten möchte.
Beispiel
Abgaskrümmer</Value>
</Values>
</ID>
<ID="AZQ_125875" >
<Name>258555600 - VW Golf</Name>
In neues Textfile
AZQ_125875
usw.
Wie krieg ich das am besten hin?
Besten Dank für Eure Hilfe
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 73849983741
Url: https://administrator.de/forum/eine-txt-datei-auslesen-und-gesuchten-inhalt-mit-treffer-in-eine-andere-textdatei-schreiben-73849983741.html
Ausgedruckt am: 16.02.2025 um 18:02 Uhr
16 Kommentare
Neuester Kommentar
Hallo,
eigentlich recht einfach, durch die Dateien loopen und dann pro datei suchen
grüße supported by GoogleBard ;)
eigentlich recht einfach, durch die Dateien loopen und dann pro datei suchen
$currentDirectory = Get-Location
$files = Get-ChildItem -Path $currentDirectory -Filter *.txt
foreach ($file in $files) {
$content = Get-Content -Path $file
$matches = Select-String -Path $file -Pattern "<ID="(.*)">
$id = $matches.Matches[0].Groups[1]
Write-Host "Die ID in $file ist $id"
}
grüße supported by GoogleBard ;)
![7907292512](/images/members/profile_male_48x48.png)
In allen Textfiles kommen aber immer Textteile vor, die mit AZQ_ beginnen und max 10 Digits haben. Ich möchte über ein Powershell alle diese Einträge wenn möglich ohne Duplikate in ein anderes Textfile schreiben, da ich die Daten weiter verarbeiten möchte.
Biddeschön(Select-String "D:\path\*.txt" -Pattern "AZQ_\d{1,10}" -AllMatches).Matches.Value | select -Unique | set-content .\ergebnis.txt
Gruß sid
![7907292512](/images/members/profile_male_48x48.png)
Select-String "D:\path\*.txt" -Pattern "AZQ_\d{1,10}" -AllMatches | %{$_.Path + " : " + (($_.Matches.Value | select -Unique) -join ',')} | set-content .\ergebnis.txt
Moin,
Gruß Thomas
Zitat von @Silence:
Ich würde gerne im File vorangestellt pro Zeile einen text schreiben:
Herkunft File 1 AZQ_123
Herkunft File 1 AZQ_456
Herkunft File 1 AZQ_897
macht es dann nicht mehr Sinn, das Ganze direkt als Tabelle auszugeben?Ich würde gerne im File vorangestellt pro Zeile einen text schreiben:
Herkunft File 1 AZQ_123
Herkunft File 1 AZQ_456
Herkunft File 1 AZQ_897
Bestimmte Einträge können auch aus mehreren Files stammen.
Hier könnte man die Herkunft dann auch gleich gruppieren, sodass jede Nummer eindeutig ist...Select-String "AZQ_\d{1,10}" *.txt | group {$_.Matches.Value} | %{[PsCustomObject][Ordered]@{Herkunft=$_.Group.Filename -Join ', ' ; Nummer = $_.Name}} | Export-CSV -Path "Ausgabe.csv" -Delimiter ';' -NoTypeInfo -Encoding UTF8
Gruß Thomas
![7907292512](/images/members/profile_male_48x48.png)
$result = foreach($file in Select-String "D:\path\*.txt" -Pattern "AZQ_\d{1,10}" -AllMatches){
foreach($match in $file.matches.value | select -Unique){
[pscustomobject][ordered]@{
File = $file.Path
Number = $match
}
}
}
$result | export-csv .\ergebnis.csv -Delimiter ";" -NoTypeInformation -Encoding UTF8
![7907292512](/images/members/profile_male_48x48.png)
Den Regex im Pattern anpassen ...
-Pattern "AZQ_[a-z\d]{1,10}"