daniel3
Goto Top

Textdatei auf Rendundanz untersuchen und ändern

Hallo zusammen,
Ich müsste mit einer Bat oder kleineren Programm, eine txt Datei auf Rendundanz untersuchen und ausbessern.
z.B.
101 Test
205 Test2
101 Test3
306 Test4

Ich müsste die Datei so ändern das zum Schluss folgendes rauskommt:

101 Test
205 Test2
1011Test3
306 Test4

Also statt dem Leerzeichen eine 1

Content-Key: 364740

Url: https://administrator.de/contentid/364740

Printed on: April 24, 2024 at 04:04 o'clock

Mitglied: 135333
135333 Feb 14, 2018 updated at 10:11:49 (UTC)
Goto Top
Powershell
$arr =@()
(gc 'c:\datei.txt') | %{  
    $line = $_.split(' ',2)  
    If ($line -in $arr){$line + '1' + $line[1]}else{$arr += $line;$_}  
} | sc 'c:\datei_neu.txt'  
Gruß Snap
Member: Daniel3
Daniel3 Feb 14, 2018 at 10:05:50 (UTC)
Goto Top
Hallo Snap,
Kannst du mir das bitte erklären, verstehe das nicht.
Mitglied: 135333
135333 Feb 14, 2018 at 10:11:29 (UTC)
Goto Top
Mitglied: 135333
135333 Feb 14, 2018 updated at 10:35:40 (UTC)
Goto Top
Also nochmal mit Erklärungen, dann sollte klar sein was passiert:
# definiert ein leeres Array
$arr = @()
# liest Textdatei ein und baut eine Schleife um die Zeilen zu durchlaufen
(gc 'c:\datei.txt') | %{  
    # splitet die Zeile anhand der Leerzeichen zwei mal
    $line = $_.split(' ',2)  
    # Wenn Nummer bereits im Array existiert gebe die Daten mit einer 1 dazwischen aus ansonsten füge die Nummer dem Array hinzu und gebe die Zeile unverändert aus
    If ($line -in $arr){$line + '1' + $line[1]}else{$arr += $line;$_}  
} | sc 'c:\datei_neu.txt' # schreibt die Ausgaben in eine neue Datei  
Member: Daniel3
Daniel3 Feb 14, 2018 at 10:36:05 (UTC)
Goto Top
Sorry aber bei mir funktioniert das nicht face-sad
mir erstellts zwar die neue Datei, aber diese bleibt unverändert.
Mitglied: 135333
135333 Feb 14, 2018 at 10:39:18 (UTC)
Goto Top
Dann hast du's falsch kopiert, also nochmal kopieren. Läuft, getestet.
Member: Daniel3
Daniel3 Feb 14, 2018 at 10:40:35 (UTC)
Goto Top
Jetzt hats funktioniert
Danke
Member: Daniel3
Daniel3 Feb 14, 2018 at 10:54:48 (UTC)
Goto Top
Hallo Snap,
Vielen Dank nochmal.
Ich müsste nun nochmal das geiche Rückgäng machen also von
so:
101 Test
205 Test2
1011Test3
306 Test4
nach
so:
101 Test
205 Test2
101 Test3
306 Test4

Hast du da auch was?
Danke in Vorraus
Mitglied: 135333
135333 Feb 14, 2018 updated at 11:07:30 (UTC)
Goto Top
Nana, hast du kein Backup gemacht face-big-smile. Das gibt heiße Öhrchen face-smile

(gc 'c:\test.txt') -replace '^(.{3})(1)(.*)','$1 $3' | sc gc 'c:\test.txt'  
Member: Daniel3
Daniel3 Feb 14, 2018 at 12:04:06 (UTC)
Goto Top
Perfekt danke bist der Beste face-smile
Member: Daniel3
Daniel3 Feb 14, 2018 at 13:37:13 (UTC)
Goto Top
Hast du auch einen Lösung bezüglich, ich muss die Skript auf einen Windows 7 PC zum laufen bekommen.
Da ist Powershell v1 installiert und da funktionierts nicht.
Funktioniert nur bei Windows 10
Mitglied: 135333
135333 Feb 14, 2018 updated at 13:57:04 (UTC)
Goto Top
Powershell 1 gibt es nicht mehr!

In PS 2.0 wie es auf W7 installiert ist nutze statt dem -in Operator den -contains Operator.
Also
if ($arr -contains $line)
Member: Daniel3
Daniel3 Feb 14, 2018 at 14:00:50 (UTC)
Goto Top
Anbei das Bild
2018-02-14 15_00_09-vorführ_2018_yuno - teamviewer
Mitglied: 135333
135333 Feb 14, 2018 updated at 14:04:11 (UTC)
Goto Top
Siehe bitte meinen letzten Post!
Member: Daniel3
Daniel3 Feb 14, 2018 at 16:17:40 (UTC)
Goto Top
Also bei mir funktionierst jetzt auch bei Windows 7 wenn ich Powershell öffne und den Text reinkopiere.
Wenn ich aber den Code als test.ps1 speichere und diese mit Powershell ausführe funktioniert es nicht. face-sad
Mitglied: 135333
135333 Feb 14, 2018 at 17:11:51 (UTC)
Goto Top
Stichwort Executionpolicy
Member: Daniel3
Daniel3 Feb 15, 2018 at 14:04:34 (UTC)
Goto Top
ich raffs nicht face-sad
Member: Daniel3
Daniel3 Feb 15, 2018 at 15:23:13 (UTC)
Goto Top
Ich bekomme immer folgenden Fehler. auch nach der Set-ExecutionPolicy
2018-02-15 16_20_56-vorführ_2018_yuno - teamviewer
Mitglied: 135333
135333 Feb 15, 2018 updated at 15:44:04 (UTC)
Goto Top
Tja, das sagt dir doch eindeutig das du die Executionpolicy auf Signieren festgelegt hast oder das eine GPO bei dir das Ausführen Unsignierter Sktipte verbietet und nicht auf RemoteSigned oder Unrestricted festgelegt ist.

Also administrative Powershell-Konsole öffnen und
Set-Executionpolicy Unrestricted
Eintippeln.
Dann cmd öffnen und
Powershell -File "c:\script.ps1"  
eintippeln, feeeedich, oder Bypass machen
Powershell -Executionpolicy Bypass -File "c:\script.ps1"  
Das man das noch nicht mal ergoogeln kann ist schon sehr schwach!

I'm out a here.
Gruß snap