Wie in powershell eine Datei laden und Dinge ersetzen und addieren und löschen?
Moin!
Ich habe seid gestern erst powershell und weiss nicht so gut wie man starten soll.
Gibt es eine gute Einleitung für Textberarbeitung?
Also konkret suche ich für den Start 3 Dinge und wäre froh wenn der Ablauf dazu erklärt wird, dann lern ich es direkt!😁
Laden geht mit get-content und speichern mit set-content oder?
1. Zb in jeder Zeile, Zeichen 4-10, Zeichen 20-26 und Zeichen 50-56 löschen.
2. Zb in jeder Zeile, Zeichen 4-10, Zeichen 20-26 und Zeichen 50-56 addieren und die Summe an den Anfang der Zeile schreiben + tabulator
3. Zb in jeder Zeile, [55] mit [12,0] ersetzen, [66] mit [0,42] ersetzen, [77] mit [1,33] ersetzen.
Wenn ich diese 3 Sachen habe, dann verstehe ich schon einiges mehr und kann von da aus, selber Dinge kombinieren, hoff ich 😅
Danke und LG!
1 Antwort
Wäre schön gewesen, wenn Du hier ein paar Beispielzeilen geliefert hättest, mit denen sich arbeiten lässt.
Ich vermute mal, dass Du mit Deinem Ansatz der Verarbeitung von Strings völlig auf dem Holzweg bist und versuchst den tabellarischen Output eines Programms umzubauen.
Das Löschen einer festgelegten Anzahl von Zeichen ab einer bestimmten Position im String (Achtung positionsangaben sind 0-basiert ! das erste Zeichen hat die Position 0 ...usw.)
$MyString='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
#entferne die Zeichen 4 bis 10 (7Stück)
$MyString.remove(3,7)
...schwieriger wird es schon, wenn Du mehrere Zeichengruppen entfernen möchtest, da sich mit dem entfernen von Zeichen die Position der übrigen Zeichen verschiebt. In Deinem Fall braucht man einfach nur von "Hinten" mit dem entfernen beginnen.
$MyString='0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'
$MyString.remove(49,7).remove(19,7).remove(3,7)
Das mit der Addiererei ist schon Grenzwertig (ich habe keine Ahnnung was für Zahlen da addiert werden soll und und auch welche Länge der Outbegrenzt sein soll um wieder in eine Art tabellarische Formatierung zu passen.)
egal ich machs wie Du willst (auch wenns Schwachsinn ist):
$Zeilen=' 22 iwas 33.7 blah blubb muh miff 785.025',' 33.7 iwas 65.782 blah blubb muh miff 301.033'
$Zeilen|
ForEach-Object{
#wandle Substring an Position zu Kommazahl (ich verkneife mir das Abfangen von Fehlern, weil die ganze herangehensweise ohnhin Müll ist!)
$Number1=$_.SubString(3,7) -as [double]
$Number2=$_.SubString(19,7) -as [double]
$Number3=$_.SubString(49,7) -as [double]
'{0}{1}{2}' -f $($Number1+$Number2+$Number3),[char]9,$_ #[char]9 ist der tabulator
}
das ersetzen von vorgegebenen Strings ist wieder billig:
$Zeilen='[55] schnetereteng [66] blubb [77]','blah [55] miff [66] maf [77]'
$Zeilen|
ForEach-Object{
#Achtung Powershell verwendet für die Angabe des zu ersetzenden Strings RegEx-schreibweise! jedoch nicht für den Ersastzstring
$_ -replace '\[55\]','[12,0]' -replace '\[66\]','[0,42]' -replace '\[77\]','[1,33]'
}
pause
Wie gesagt ist habe ich keine Ahnung was Du vorhast. Ich kenne nicht die Datenquelle. Wahrscheinlich ist Dein ganzes Konzept völliger Murks.
Auf blauen Dunst herumorakeln mach keinen Spaß
wahrscheinlich wäre es leichter eine Zeile einfach in ein Array zu splitten oder/und in ein DatenObjekt zu wandeln