komoran12
Goto Top

Werte aus CSV in TXT - Powershell

Hallo Ihr,

ich benötige mal wieder Eure Hilfe,kann mir wer mit einem Code aushelfen?

Ich habe eine .csv mit Spalte von A - AE - ich würde nun gerne in einer .txt die Werte aus der .csv ziehen,
sodass in der .txt folgender Aufbau vorhanden ist:

SpalteA;SpalteC & Spalte AA;SpalteZ;

CSV Aufbau:

Test;Test;Test;Test;Test;Test;Test;Test;Test;Test;Test;Test;Test;Test;Test;Test;Test;Test;Test;Test;Test;Test;Test;Test;Test;Test;Test;Test;Test;Test;Test
Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert;Testwert

Ich freue mich auf eine Rückmeldung.

BG

Content-ID: 341110

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

Ausgedruckt am: 23.11.2024 um 16:11 Uhr

Markus2016
Markus2016 20.06.2017 um 20:45:43 Uhr
Goto Top
Hallo Komoran12,

schau Dir doch mal die Seite an. Da ist es recht einfach erklärt.

Einlesen einer Datei, die durch Kommas getrennte Werte enthält

Gruß

Markus2016
Komoran12
Komoran12 20.06.2017 um 21:04:21 Uhr
Goto Top
Die Seite hatte ich auch schon gesehen, allerdings funktioniert das irgendwie nicht für meine Anforderung.
Markus2016
Markus2016 20.06.2017 um 21:25:13 Uhr
Goto Top
Hallo Komoran12,

$InhaltCSV = Import-Csv ".... .csv"

und die Ausgabe per Out-File

$InhaltCSV | Out-File "$PSScriptRoot\..... .txt"

Wegen den Trennzeichen und der Sortierung

Schau Dir die Seite mal an

Gruß

Markus2016
Komoran12
Komoran12 20.06.2017 um 21:34:32 Uhr
Goto Top
Kannst Du mir da vielleicht helfen, wie der komplette Befehl aussehen muss? Bei mir will das irgendwie nicht face-sad
Markus2016
Markus2016 20.06.2017 um 21:37:57 Uhr
Goto Top
Hallo Komoran12,

wie schaut denn Dein Ansatz aus?

Gruß

Markus2016
Komoran12
Komoran12 20.06.2017 um 21:42:28 Uhr
Goto Top
Ich habe da irgendwie noch keinen richtigen, bin da blutiger Anfänger in Powershell....
Markus2016
Markus2016 20.06.2017 aktualisiert um 23:23:36 Uhr
Goto Top
Hallo Komoran12,
da machst Du es dir jetzt zu einfach.

Versuche die Ansätze, welche Du bei deinen anderen Fragen aufgezeigt bekommen hast zu verstehen und anzupassen.

Gruß
Markus2016
Komoran12
Komoran12 21.06.2017 um 07:17:01 Uhr
Goto Top
Guten Morgen Markus2016,

$arr = @()
(Import-CSV 'c:\quelle.csv' -delimiter ";") | %{$arr += $_.'Spalte 1' + ';1'}  
($arr -join ';') | sc 'c:\ziel.txt'  

Oben dargestellten Lösungsansatz jabe ich jetzt, aber ich würde jetzt die 1. Spalte weglassen und weitere hinzufügen.

Und das will mir nicht gelingen.
133417
133417 21.06.2017 aktualisiert um 07:40:09 Uhr
Goto Top
Pillepalle...
(Import-CSV 'c:\quelle.csv' -delimiter ";") | select 'NameDerSpalteA',@{n='Name der neuen Spalte';e={"$($_.NamederSpalteC) $($_.NameDerSpalteAA)"}},'NameDerSpalteZ' | Export-CSV 'c:\ziel.txt' -Delimiter ';' -NoType -Encoding UTF8  
Gruß
Komoran12
Komoran12 21.06.2017 um 08:38:00 Uhr
Goto Top
Nachfolgende Codezeile fügt die Spalte C und AA zusammen, kann ich hier auch ein skip=1 einzufügen, dass halt nur die Testwerte in der .txt stehen?

e={"$($_.NamederSpalteC) $($_.NameDerSpalteAA)"}  
133417
Lösung 133417 21.06.2017 aktualisiert um 09:20:12 Uhr
Goto Top
Ab und zu sollte man auch mal ins Manual schauen face-confused
https://msdn.microsoft.com/en-us/powershell/reference/5.1/microsoft.powe ...
(Import-CSV 'c:\quelle.csv' -delimiter ";") | select 'NameDerSpalteA',@{n='Name der neuen Spalte';e={"$($_.NamederSpalteC) $($_.NameDerSpalteAA)"}},'NameDerSpalteZ' | ConvertTo-CSV -delimiter ';' -NoType | select -skip 1 | sc 'c:\ziel.txt'  
Komoran12
Komoran12 21.06.2017 aktualisiert um 23:06:55 Uhr
Goto Top
Hallo BibersBaum,
das ist echt super, das funktioniert face-smile zwei Fragen noch, was muss ich einbauen, falls ich in Spalte Z leerzeichen habe, die ich gerne entfernen möchte,aber nur in der Spalte Z.
Komoran12
Komoran12 21.06.2017 um 23:09:36 Uhr
Goto Top
Ich dachte da an:

(Import-CSV 'c:\quelle.csv' -delimiter ";") | select 'NameDerSpalteA',@{n='Name der neuen Spalte';e={"$($_.NamederSpalteC) $($_.NameDerSpalteAA)"}},'NameDerSpalteZ'.replace(' ','') | ConvertTo-CSV -delimiter ';' -NoType | select -skip 1 | sc 'c:\ziel.txt'  
133417
133417 22.06.2017 aktualisiert um 21:57:36 Uhr
Goto Top
(Import-CSV 'c:\quelle.csv' -delimiter ";") | select 'NameDerSpalteA',@{n='Name der neuen Spalte';e={"$($_.NamederSpalteC) $($_.NameDerSpalteAA)"}},@{n='NameDerSpalteZ';e={$_.'NameDerSpalteZ'.replace(' ','')}} | ConvertTo-CSV -delimiter ';' -NoType | select -skip 1 | sc 'c:\ziel.txt'  
Komoran12
Komoran12 24.06.2017 um 16:11:01 Uhr
Goto Top
BibersBaum, ich muss nochmal nachfragen. Habe den Code jetzt wie nachfolgend angepasst. In Powershell funktioniert er, aber leider nicht mit einer Batch-Datei:

powershell -Command "(Import-CSV $env:USERPROFILE\Desktop\Skripte\vorlage.csv -delimiter ';' -Encoding Default) | select @{e={$_.'Nummer'.replace(' ','')}},@{e={"$($_.'Vorname') $($_.'Nachname')"}},'Merkmal' | ConvertTo-CSV -delimiter ';' -NoTypeInformation | select -skip 1 | set-content $env:USERPROFILE\Desktop\Skripte\vorlage_2.txt -NoNewline"  

Beim Code zeigt er ab Zeichen 173 einen Fehler an, dass ein unerwartetes Token vorliegt:

$($_.'Nachname')"}},'Merkmal' | ConvertTo-CSV -delimiter ';' -NoTypeInformation | select -skip 1 | set-content $env:USERPROFILE\Desktop\Skripte\vorlage_2.txt -NoNewline  

Habe gerade alles durchgespielt, komme aber nicht auf die Lösung face-sad face-sad

Kannst Du mir einen Tipp geben? face-smile

BG
133417
133417 24.06.2017 um 16:32:18 Uhr
Goto Top
Zitat von @Komoran12:
Kannst Du mir einen Tipp geben? face-smile
Klar, TIPP Doppelte Anführungszeichen innerhalb von doppelten Anführungszeichen gehören mit Backslash "escaped", jetzt sollte es auch bei dir Klick machen face-wink
Komoran12
Komoran12 24.06.2017 um 17:13:58 Uhr
Goto Top
Mhhhh - OK - irgendwie kriege ich das nicht hin - wie wäre denn die Lösung, damit es klappt?
133417
133417 24.06.2017 aktualisiert um 19:11:05 Uhr
Goto Top
Wow, du bekommst zwei
\" nicht hin?? Alle Achtung! Meine Beschreibung oben war eindeutig, also beschäftige dich damit sonst lernst du aus der Sache nichts.
Wenn zwischen
-Command "        \"   \"          "  
zwei weitere " kommen musst du sie escapen, damit die Shell sie nicht als Ende des Command interpretiert, logisch wenn man mal nachdenkt, oder?!

Ebenso sind Prozenzeichen und eventuell andere verwendeten Batch Sonderzeichen nach Batch Manier zu behandeln.
Warum du hier aber das PowerShell mit der Batch mixt weiß nur der Geier.
Wenn man schon so eine mächtige Sprache hat, warum dann da noch Das 80er Jahre Batch drauf pappen?? Irgendwie unlogisch.
Komoran12
Komoran12 24.06.2017 um 18:19:38 Uhr
Goto Top
Zitat von @133417:

Wow, du bekommst zwei
\" nicht hin?? Alle Achtung! Meine Beschreibung oben war eindeutig, also beschäftige dich damit sonst lernst du aus der Sache nichts.
Wenn zwischen
> -Command "                  "  
> 
zwei weitere " kommen musst du sie escapen, damit die Shell sie nicht als Ende des Command interpretiert, logisch wenn man mal nachdenkt, oder?!

Ebenso sind Prozenzeichen und eventuell andere verwendeten Batch Sonderzeichen nach Batch Manier zu behandeln.

Wenn ich dich jetzt richtig verstanden habe, muss es wie folgt "escapt"werden:


powershell -Command /"(Import-CSV $env:USERPROFILE\Desktop\Skripte\vorlage.csv -delimiter ';' -Encoding Default) | select @{e={$_.'Nummer'.replace(' ','')}},@{e={"$($_.'Vorname') $($_.'Nachname')"}},'Merkmal' | ConvertTo-CSV -delimiter ';' -NoTypeInformation | select -skip 1 | set-content $env:USERPROFILE\Desktop\Skripte\vorlage_2.txt -NoNewline/"  

Dennoch möchte er mir keine Ausgabe "schenken".

Warum du hier aber das PowerShell mit der Batch mixt weiß nur der Geier.
Wenn man schon so eine mächtige Sprache hat, warum dann da noch Das 80er Jahre Batch drauf pappen?? Irgendwie unlogisch.

Da ich hier gerne den Code innerhalb einer .vbs Datei ausführen möchte.
133417
Lösung 133417 24.06.2017 aktualisiert um 19:08:22 Uhr
Goto Top
Falsch, erstens ist das kein Backslash den du da nutzt! Und zweitens an der falschen Stelle. Ich habe doch extra geschrieben das nur weitere innere Anführungszeichen escaped werden müssen.
Alles leider Anzeichen das du meine Threads einfach nicht aufmerksam liest face-sad, deswegen bin ich jetzt raus, da kommt man sich hier ja veräppelt vor. Mal wirklich, das ist Administrator.de nicht gutefrage.net ...

Ciao.