Benutzer mit den meisten Antworten
Alle zwei Zeilen, die Texte zusammenführen

Frage
-
Hallo,
ich habe vor kurzem mit Windows PowerShell begonnen und habe nun ein kleines Problem bzw. komme nicht weiter. Ich habe ein Textdokument welches in etwa folgendermaßen aufgebaut ist:
Datum1
Text1
Datum2
Text2
Das Datum gehört also zum Text der darunter steht (aa bb cc ..). Nun möchte ich zwecks weiterer Bearbeitungen den jeweiligen Text dem jeweiligen Datum hinzufügen. Also:
Datum1 Text1
Datum2 Text2
Ich denke das man das möglicherweise mit join() bearbeiten kann, in diesem Fall bekomme ich das aber nicht hin und finde auch weder im Internet noch in meinem Buch dazu etwas.
Deshalb bitte ich um etwas Hilfe, bei dieser Angelegenheit.
Grüße,
Jannes
- Bearbeitet FakeWiener Mittwoch, 12. Juni 2013 18:38
Antworten
-
Hallo TheGullimonster,
geht ganz simpel:
$a = GC "C:\file.txt" $join = @() for($i = 0; $i -lt $a.count;$i=$i+2){ $join += "$($a[$i]) $($a[$i+1])" } $join
gruß
speedy- Als Antwort vorgeschlagen Peter Kriegel Donnerstag, 13. Juni 2013 10:26
- Als Antwort markiert Denniver ReiningMVP, Moderator Donnerstag, 13. Juni 2013 10:27
-
Das Cmdlet Get-Content liest eine Textdatei Zeile für Zeile ein!
Nun könnte man auf die Idee kommen, eine Zählschleife zu bauen und in dieser Zählschleife jede zweiten Zeile mit der vorderen zu verheiraten.
Dies würde einfach mit einer Binären Berechnung anhand des Modulo % Operators geschehen!
# Pseudo code! # Wenn Zähler Modulo 2 = 0 dann haben wie die 2. Zeile If( $Counter % 2 –eq 0) { -join ($Zeile1, $Zeile2) }
Der Code mit der Zählschleife ist aber sehr aufwändig, da man die $Zeile1 zwischenspeichern muss usw.
Das Cmdlet Get-Content hat aber den Parameter –ReadCount mit dem geht das viel einfacher.
ReadCount liefert ein Array von Zeilen auf jede Zeile kann man dann bequem zugreifen oder dieses Array einfach joinen!
Get-Content -Path 'C:\Temp\test.txt' -ReadCount 2 | ForEach-Object {-join ($_)} #oder mit Leerzeichen dazwischen Get-Content -Path 'C:\Temp\test.txt' -ReadCount 2 | ForEach-Object {-join ($_[0],' ',$_[1])}
Man sollte sich immer die Komplette Dokumentation zu einem Cmdlet durchlesen, erst dann weiß man was überhaupt möglich ist!
Get-Help Get-Content –Full
Oder
http://www.colorconsole.de/PS_Windows/de/Get-Content.htmJoin Dokumentation:
Get-Help about_Join
oder
http://www.colorconsole.de/PS_Windows/de/about_join.htm
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum!
- Bearbeitet Peter Kriegel Donnerstag, 13. Juni 2013 06:27
- Als Antwort markiert FakeWiener Donnerstag, 13. Juni 2013 06:36
Alle Antworten
-
Hallo TheGullimonster,
geht ganz simpel:
$a = GC "C:\file.txt" $join = @() for($i = 0; $i -lt $a.count;$i=$i+2){ $join += "$($a[$i]) $($a[$i+1])" } $join
gruß
speedy- Als Antwort vorgeschlagen Peter Kriegel Donnerstag, 13. Juni 2013 10:26
- Als Antwort markiert Denniver ReiningMVP, Moderator Donnerstag, 13. Juni 2013 10:27
-
Das Cmdlet Get-Content liest eine Textdatei Zeile für Zeile ein!
Nun könnte man auf die Idee kommen, eine Zählschleife zu bauen und in dieser Zählschleife jede zweiten Zeile mit der vorderen zu verheiraten.
Dies würde einfach mit einer Binären Berechnung anhand des Modulo % Operators geschehen!
# Pseudo code! # Wenn Zähler Modulo 2 = 0 dann haben wie die 2. Zeile If( $Counter % 2 –eq 0) { -join ($Zeile1, $Zeile2) }
Der Code mit der Zählschleife ist aber sehr aufwändig, da man die $Zeile1 zwischenspeichern muss usw.
Das Cmdlet Get-Content hat aber den Parameter –ReadCount mit dem geht das viel einfacher.
ReadCount liefert ein Array von Zeilen auf jede Zeile kann man dann bequem zugreifen oder dieses Array einfach joinen!
Get-Content -Path 'C:\Temp\test.txt' -ReadCount 2 | ForEach-Object {-join ($_)} #oder mit Leerzeichen dazwischen Get-Content -Path 'C:\Temp\test.txt' -ReadCount 2 | ForEach-Object {-join ($_[0],' ',$_[1])}
Man sollte sich immer die Komplette Dokumentation zu einem Cmdlet durchlesen, erst dann weiß man was überhaupt möglich ist!
Get-Help Get-Content –Full
Oder
http://www.colorconsole.de/PS_Windows/de/Get-Content.htmJoin Dokumentation:
Get-Help about_Join
oder
http://www.colorconsole.de/PS_Windows/de/about_join.htm
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum!
- Bearbeitet Peter Kriegel Donnerstag, 13. Juni 2013 06:27
- Als Antwort markiert FakeWiener Donnerstag, 13. Juni 2013 06:36
-
Du kannst in diesem Forum auch mehrere richtige Antworten als Antwort Markieren!
Please click “Mark as Answer” if my post answers your question and click “Vote As Helpful” if my Post helps you.
Bitte markiere hilfreiche Beiträge von mir als “Als Hilfreich bewerten” und Beiträge die deine Frage ganz oder teilweise beantwortet haben als “Als Antwort markieren”.
My PowerShell Blog http://www.admin-source.info
[string](0..21|%{[char][int]([int]("{0:d}" -f 0x28)+('755964655967-86965747271757624-8796158066061').substring(($_*2),2))})-replace' '
German ? Come to German PowerShell Forum!