Textdatei anhand xy-Koordinaten auslesen
Hallo Gemeinde,
gibt es in Powershell eine Möglichkeit ein Text/Zahl aus einer Textdatei auszulesen anhand xy-Koordinaten?
Als Beispiel habe ich eine Textdatei, aus der ich immer den Inhalt aus der 6. Zeile ab Zeichen 35 haben will. Und zwar bis zum nächsten "|" Symbol. Leerzeichen sollen entfernt werden.
Wir haben im Unternehmen bereits so ein Tool das mit xy-Koordinaten Textdateien ausliest. In dem Fall muss ich dann einfach 35(x) und 6(y) eingeben damit das funktioniert. Leider kann dieses Tool aber keine Dateiaktionen ausführen die ich zwingend machen muss. Deswegen benötige ich ein eigenes Script.
gibt es in Powershell eine Möglichkeit ein Text/Zahl aus einer Textdatei auszulesen anhand xy-Koordinaten?
Als Beispiel habe ich eine Textdatei, aus der ich immer den Inhalt aus der 6. Zeile ab Zeichen 35 haben will. Und zwar bis zum nächsten "|" Symbol. Leerzeichen sollen entfernt werden.
Wir haben im Unternehmen bereits so ein Tool das mit xy-Koordinaten Textdateien ausliest. In dem Fall muss ich dann einfach 35(x) und 6(y) eingeben damit das funktioniert. Leider kann dieses Tool aber keine Dateiaktionen ausführen die ich zwingend machen muss. Deswegen benötige ich ein eigenes Script.
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 1114017914
Url: https://administrator.de/forum/textdatei-anhand-xy-koordinaten-auslesen-1114017914.html
Ausgedruckt am: 16.04.2025 um 02:04 Uhr
11 Kommentare
Neuester Kommentar
Moin,
mit einem bisschen Regex kein Problem
Regex Tutorial
Regex Legende
Gruß Thomas
mit einem bisschen Regex kein Problem
# Dateipfad
$File = 'C:\Test\Datei.txt'
# Zeile 6 lesen
$Line = ( Get-Content -Path $File -Totalcount 6 )[-1]
# Wert ab Zeichen 35 bis zur nächsten Pipe ohne Leerzeichen
$Value = $Line.Substring(34) -Replace '\|.*| +'
Regex Legende
Gruß Thomas
Zuerst mal, müsstest du das alles in einer Foreach-Schleife laufen lassen - sonst würde immer nur die erste TXT-Datei verabeitet.
Wenn in der Zeile ein Pfad steht ist der Regex oben falsch, da er auch Leerzeichen innerhalb dieses Pfades löschen würde. Ich gehe mal davon aus, du möchtest nur Leerzeichen, die nach dem Pfad folgen löschen -> ist unten korrigiert.
Darüber hinaus ist $Value eine Zeichenkette und kein Objekt, hat dementsprechend auch keine Path-Eigenschaft.
Wenn Join-Path und md funktionieren, gehe ich mal davon aus, in $Value steht ein Ordnername?!
Sofern dieser Ordner im Quellpfad liegt, sähe das ganze so aus:
Wenn in der Zeile ein Pfad steht ist der Regex oben falsch, da er auch Leerzeichen innerhalb dieses Pfades löschen würde. Ich gehe mal davon aus, du möchtest nur Leerzeichen, die nach dem Pfad folgen löschen -> ist unten korrigiert.
Darüber hinaus ist $Value eine Zeichenkette und kein Objekt, hat dementsprechend auch keine Path-Eigenschaft.
Wenn Join-Path und md funktionieren, gehe ich mal davon aus, in $Value steht ein Ordnername?!
Sofern dieser Ordner im Quellpfad liegt, sähe das ganze so aus:
# Dateipfade
$archivpfad = 'C:\Test'
$quellpfad = 'C:\Quelle'
Foreach ($File in Get-ChildItem -Path "$quellpfad\*.txt" -File) {
# Zeile 6 lesen
$Line = ( Get-Content -Path $File -Totalcount 6 )[-1]
# Wert ab Zeichen 35 bis zur nächsten "|" ohne Leerzeichen
$Value = $Line.Substring(34) -Replace ' *\|.*'
# neuen Ordnernamen aus dem regex extrahieren und mit dem Quell-Ordner zu einem Pfad zusammensetzen
$subordner = join-path $archivpfad $Value
# neuen Ordner erstellen
md $subordner -Force | out-null
# und Datei rein kopieren
move-item -Path "$quellpfad\$Value" -Destination $subordner
} # Ende Foreach
Zitat von @LeaX55:
Musste aus der 34 eine 35 machen weil er nachdem Du das geändert hast, 1 Zeichen vorher angefangen hat zu lesen.
In dem Fall willst du die Zeile dann aber auch erst ab dem 36 Zeichen haben Musste aus der 34 eine 35 machen weil er nachdem Du das geändert hast, 1 Zeichen vorher angefangen hat zu lesen.
Mit dem move-item kommt er jedoch immer noch nicht klar.
move-item : Der Pfad "C:\Quelle\1234567890" kann nicht gefunden werden, da er nicht vorhanden ist.
Er denkt das ist ein Pfad und keine Datei.
move-item ist es grundsätzlich egal, ob das ein Ordner- oder Dateipfad ist. Funktioniert in beiden Fällen. das Problem ist hier, dass die Datei keine Erweiterung hat und der Pfad daher nicht existiert.move-item : Der Pfad "C:\Quelle\1234567890" kann nicht gefunden werden, da er nicht vorhanden ist.
Er denkt das ist ein Pfad und keine Datei.
Ich Anfänger habe noch versucht dem $Value ein .txt anzufügen mit $Value=$Value + ".txt"
Hat er natürlich nicht gefressen :D
Sollte aber so funktionieren. Welche Fehlermeldung bringt er denn da?Hat er natürlich nicht gefressen :D
Ansonsten kannst du die Erweiterung natürlich auch erst beim Move-Item-Befehl anhängen, wenn $Value der Dateiname ist.
move-item -Path "$quellpfad\$Value.txt" -Destination $subordner
Zitat von @LeaX55:
Es kommt die gleiche Fehlermeldung, nur eben mit .txt am Ende
move-item : Der Pfad "C:\Quelle\1234567890.txt" kann nicht gefunden werden, da er nicht vorhanden ist.
Die Fehlermeldung ist doch eindeutig - die Datei existert unter dem Pfad nicht.Es kommt die gleiche Fehlermeldung, nur eben mit .txt am Ende
move-item : Der Pfad "C:\Quelle\1234567890.txt" kann nicht gefunden werden, da er nicht vorhanden ist.