Versuchen Sie folgendes:
Get-Content test.txt | Foreach {($_ -split '\s+',4)[0..2]}
Und wenn Sie die Daten in diesen Spalten wollen auf der gleichen Zeile gedruckt:
Get-Content test.txt | Foreach {"$(($_ -split '\s+',4)[0..2])"}
Beachten Sie, dass dies erfordert Powershell 2.0 für den -split
Operator. Außerdem teilt der ,4
dem Split-Operator die maximale Anzahl von Split-Strings mit, die Sie möchten, aber denken Sie daran, dass der letzte String immer alle Concat'd enthält.
Für feste Breite Spalten, hier ist ein Ansatz für die Spaltenbreite gleich 7 ($ w = 7):
$res = Get-Content test.txt | Foreach {
$i=0;$w=7;$c=0; `
while($i+$w -lt $_.length -and $c++ -lt 2) {
$_.Substring($i,$w);$i=$i+$w-1}}
$ res wird jede Spalte für alle Zeilen enthalten. Um die maximalen Spalten zu setzen, ändern Sie $c++ -lt 2
von 2 zu etwas anderem. Es gibt wahrscheinlich eine elegantere Lösung, aber momentan habe ich keine Zeit, darüber nachzudenken. :-)
Danke, aber das scheint nicht zu funktionieren. Ich führe PowerShell 2 aus und versuche, die ersten beiden Spalten aus meiner .dat-Datei mit fester Breite (Textdatei) zu extrahieren. – atricapilla
Das Schnittbeispiel, zu dem Sie eine Verknüpfung herstellen, verwendet ein Leerzeichentrennzeichen und packt die Spalten 1 bis 3. Wenn dies nicht zutrifft Fall, kannst du angeben, was deine Anforderungen sind? Klingt wie feste Spaltenbreite statt abgegrenzt. Wenn ja, wie groß ist die Spaltenbreite? –
Meine Daten befinden sich in einer Textdatei mit fester Breite (Leerzeichen dazwischen). Ich habe deinen Code geändert und habe folgendes bekommen: Get-Content text.txt | Foreach {"$ ($ _. Split() [0..2])"}. Das bringt mich ziemlich nah, aber das erzeugt zusätzliche Reihenbrüche zwischen den Reihen. – atricapilla