dbgrox
Goto Top

Powershell csv Datei bestimmte Zellen in eine andere csv speichern

Guten Tag,

ich bin derzeit an einer Aufgabe dran. Ich muss aus einer csv Datei bestimmte Zellen in eine andere csv speichern. Ich bin ein komplette neuling bei Powershell. Ich sitze schon mehrere Tag dran und habe bis heute nichts gefunden was mir geholfen hat.

Über eure Hilfe wäre ich sehr dankbar!

Mein Script:

$csv = Import-Csv -path 'C:\Users\product.csv' -Encoding UTF8 -Delimiter "," |
WHERE { $_.status -ne 1}

#Zellen die benötigt werden
$range1 ="A1:A2"
$range2 ="B1:B2"
$range3 ="C1:C2"
$range4 ="CC1:CC2"
$Range5 ="CD1:CD2"
$Range6 ="CE1:CE2"
$range7 ="CF1:CF2"
$range8 ="CG1:CG2"
$range9 ="CH1:CH2"


Get-Content -$range1, $range2, $range3, $range4, $range5, $range6, $range7, $range8, $range9 | format-table -AutoSize


#Platzhalter um zu wissen welche Zellen der Tabelle.
<#$a = ($_.puid)
$b = ($_.ean)
$c = ($_.manufacturerSKU)
$d = ($_.marketingtext)
$e = ($_.keySellingPoints)
$f = ($_.packageContents)
$g = ($_.productFeatures)
$h = ($_.htmlMainSpecs)
$i = ($_.htmlSpecs)#>


$spalte1 = Read-Host "$range1"
$spalte2 = Read-Host "$range2"
$spalte3 = Read-Host "$range3"
$spalte4 = Read-Host "$range4"
$spalte5 = Read-Host "$range5"
$spalte6 = Read-Host "$range6"
$spalte7 = Read-Host "$range7"
$spalte8 = Read-Host "$range8"
$spalte9 = Read-Host "$range9"

#War die Hoffnung, dass das Script nur die Informationen Speichert, anstatt alles.
$Output = "$range1, $range2, $range3, $range4, $range5, $range6, $range7, $range8, $range9"
$csv | Export-Csv -Delimiter ";" -Encoding UTF8 -Path C:\Users\api2.csv -NoTypeInformation

Content-ID: 1171964747

Url: https://administrator.de/forum/powershell-csv-datei-bestimmte-zellen-in-eine-andere-csv-speichern-1171964747.html

Ausgedruckt am: 22.12.2024 um 05:12 Uhr

aqui
aqui 19.08.2021 um 10:04:20 Uhr
Goto Top
Es wäre sicher sehr hilfreich und übersichtlicher für die Community hier wenn du Code Tags benutzen würdest !!
Wie, das erklären dir die FAQs: Formatierungen in den Beiträgen
Kann man über den Bearbeiten Button übrigens nachträglich korrigieren ! face-wink
149062
149062 19.08.2021 aktualisiert um 10:24:25 Uhr
Goto Top
Etwas wirr geschrieben das ganze, sinnvoller wäre es gewesen mal Ist und Soll als Vergleich hier zu posten.

Ich bemühe mal meine Glaskugel was du vermutlich vorhast
 Import-Csv -path 'C:\Users\product.csv' -Encoding UTF8 -Delimiter "," | ? status -ne '1' | select puid,ean,manufacturerSKU,marketingtext,keySellingPoints,productFeatures,htmlMainSpecs,htmlSpecs -First 2 | Export-Csv -Path 'C:\Users\api2.csv' -Delimiter ";" -Encoding UTF8  -NoTypeInformation  
Exportiert die ersten zwei Zeilen von einer Auswahl an bestimmten Spalten aus Zeilen bei denen die Spalte "Status" nicht 1 ist.
Dbgrox
Dbgrox 19.08.2021 um 10:31:28 Uhr
Goto Top
Leider hat es ncihts gebracht, in der Exportierten csv sind nurnoch Fragezeichen.
Wenn ich den Status wegnehme, werden mir nur die selects 1. Zeile angezeigt ohne die Informationen die ich dazu brauche.
Gibt es auch eine möglichkeit diese Nachträglich zu bekommen?

Vielen Dank!
149062
149062 19.08.2021 aktualisiert um 10:38:01 Uhr
Goto Top
Zitat von @Dbgrox:

Leider hat es ncihts gebracht, in der Exportierten csv sind nurnoch Fragezeichen.
Dann ändere doch mal das Encoding bei Import-CSV wohlmöglich hat das Quell-File ein anderes Encoding!
Z.B bei ANSI auf -Encoding Default oder alternativ weg lassen.
Wenn ich den Status wegnehme, werden mir nur die selects 1. Zeile angezeigt ohne die Informationen die ich dazu brauche.
?? Was bedeutet bei dir selects 1. Zeile ? Sprech doch bitte verständlich.
  • Stimmt der Delimiter für das Import-File wirklich und auch die Spaltenbezeichnungen?
  • Gibt es die Spalte "Status" überhaupt?
  • Hat die CSV überhaupt eine Überschriftenzeile?

Wie ich schon geschrieben habe poste ein IST und SOLL der CSV, dann müssen wir hier nicht rum raten!
Dbgrox
Dbgrox 19.08.2021 um 10:41:00 Uhr
Goto Top
Ich meinte wenn ich den Status -ne1 wegnehme und stattdessen nur select da lasse und den export, schreibt dieser mir nur die namen mit puid bis htmlspecs rein.

Es gibt keine Spalte mit Status und ich glaube auch keine Überschriftenzeile(kann ich nicht genau sagen, arbeite das 1. mal mit Powershellscripts).

Ich habe nur eine Artikelliste mit allen möglichen Informationen. Dort werden nicht alle gerbaucht sondern nur die bei select mit deren 2. zeile.
Dbgrox
Dbgrox 19.08.2021 um 10:42:08 Uhr
Goto Top
Zitat von @Dbgrox:

Ich meinte wenn ich den Status -ne1 wegnehme und stattdessen nur select da lasse und den export, schreibt dieser mir nur die namen mit puid bis htmlspecs rein.

Es gibt keine Spalte mit Status und ich glaube auch keine Überschriftenzeile(kann ich nicht genau sagen, arbeite das 1. mal mit Powershellscripts).

Ich habe nur eine Artikelliste mit allen möglichen Informationen. Dort werden nicht alle gerbaucht sondern nur die bei select mit deren 2. zeile.

Und es muss leider eine csv bleiben um diese mit einem 2. script einzulesen und mittels Bittransfer die Informationen einzuspeisen.
149062
149062 19.08.2021 aktualisiert um 10:46:44 Uhr
Goto Top
Zitat von @Dbgrox:

Ich meinte wenn ich den Status -ne1 wegnehme und stattdessen nur select da lasse und den export, schreibt dieser mir nur die namen mit puid bis htmlspecs rein.
Das ist ja auch OK.
Es gibt keine Spalte mit Status und ich glaube auch keine Überschriftenzeile(kann ich nicht genau sagen, arbeite das 1. mal mit Powershellscripts).
Genau das war die Information die wir hier brauchen, wenn es keine Spalte Status gibt kannst du ja auch nicht nach ihr filtern, logisch oder face-wink, die Überschriften muss man dann Import-CSV über den Parameter -Header mitteilen.

Da wir hier die Spalten deiner CSV nicht kennen kann ich dir kein dazu passendes Beispiel machen.
Dbgrox
Dbgrox 19.08.2021 um 10:51:04 Uhr
Goto Top
Ich habe mal ein Bild aneghangen.
api2.csv - excel 19.08.2021 10_24_47
149062
149062 19.08.2021 aktualisiert um 11:02:41 Uhr
Goto Top
Hier ein einfaches Beispiel das du an deines selbst anpassen kannst und du davon dann auch was lernst:

Ausgangs-CSV wäre dieses ( diese hat im Orginal also keine Spaltenüberschriften)
"Max","Muster","22","1"  
"Sabine","Musterfrau","22","0"  
Davon wollen wir nur Vor- und Nachname von den Usern exportieren deren Status 1 ist (hier die letzte Spalte) in dem Fall also nur Max Muster.

Zieldatei wäre demnach
"Vorname";"Nachname"  
"Max";"Muster"  

Der dazu passende Code sieht so aus
Import-CSV .\import.csv -Delimiter "," -Header "Vorname","Nachname","Alter","Status" | ? Status -eq '1' | select Vorname,Nachname | export-csv .\export.csv -Delimiter ";" -Encoding UTF8 -NoTypeinformation  
Du musst also für jede Spalte einen Namen im Parameter -Header vergeben damit diese später in der Pipeline auch als Eigenschaften angesprochen werden können, denn sonst weiß die Powershell ja nicht welche Spalten es beim Select Befehl ansprechen soll.

Als Anfänger solltest du mal hier rein schauen und dir zunächst die Grundlagen aneignen ...

Powershell Leitfaden für Anfänger
https://www.windowspro.de/script/csv-dateien-powershell-erstellen-sortie ...
Dbgrox
Dbgrox 19.08.2021 um 11:04:28 Uhr
Goto Top
Danke ich bin aufjedenfall einen Schritt weiter, leider übernimmt er trotzem ab der 2. Zeile alle Informationen, auch die nicht benötigten. Ist das normal?
149062
149062 19.08.2021 aktualisiert um 11:11:15 Uhr
Goto Top
Zitat von @Dbgrox:

Danke ich bin aufjedenfall einen Schritt weiter, leider übernimmt er trotzem ab der 2. Zeile alle Informationen, auch die nicht benötigten. Ist das normal?
Nein, wir kennen deine Quelldatei nicht und ob da noch zusätzliche Leerzeichen oder sonst was in den Spalten stehen, wenn Sachen übernommen werden hast du die Spaltennamen nicht korrekt definiert oder die Werte des Vergleichs im Where-Object stimmen in der Quelldatei nicht überein, oder der Delimiter der Quelldatei stimmt schon nicht, as simple as that.
Deswegen habe ich hier jetzt schon zum dritten mal gesagt IST Zustand der ersten paar Zeilen der Quell-CSV mit Code-Tags als Text und nicht als Bild posten dann kann man dir weiterhelfen ansonsten Glaskugel!!
Dbgrox
Dbgrox 19.08.2021 um 11:16:24 Uhr
Goto Top
Ich kann dir auch den Link schicken, ich kann leider sonst selber nicht mehr helfen.

https://m117996:cXTIqD6dzt9TO0JhFb-QKVR3JQY5C0y430OK8rve6nQ@api.itscope. ...

die datei heisst da product.csv muss aber vor dem download bestätigt werden.
erikro
erikro 19.08.2021 um 11:17:22 Uhr
Goto Top
Moin,

Zitat von @Dbgrox:

Ich habe mal ein Bild aneghangen.

Das ist kein CSV. Die Informationen eines Datensatzes stehen in mehreren Zeilen. Das kann so nichts werden. Eine vollständige Beispieldatei als Text (Code-Tags nicht vergessen) wäre wirklich hilfreich.

Liebe Grüße

Erik
149062
Lösung 149062 19.08.2021 aktualisiert um 11:26:00 Uhr
Goto Top
Zitat von @Dbgrox:

Ich kann dir auch den Link schicken, ich kann leider sonst selber nicht mehr helfen.

https://m117996:cXTIqD6dzt9TO0JhFb-QKVR3JQY5C0y430OK8rve6nQ@api.itscope. ...

die datei heisst da product.csv muss aber vor dem download bestätigt werden.

Das File ist nicht Komma delmited sondern TAB-Delimited, deswegen habe ich oben ja gefragt ob der delimiter stimmt ... aber wenn man Fragen nicht beantwortet ...

-Delimiter "`t"   

Import-Csv -path 'C:\Users\api2.csv' -Encoding UTF8 -Delimiter "`t" | ? stockStatus -ne 1 | select puid,ean,manufacturerSKU,marketingtext,keySellingPoints,productFeatures,htmlMainSpecs,htmlSpecs | Export-Csv -Path 'C:\Users\api2.csv' -Delimiter ";" -Encoding UTF8  -NoTypeInformation  
Eine Spalte Status gibt es nicht daher habe ich mal die Spalte stockStatus für die Einschränkung im Where Object genommen, das kannst du ja nun hoffentlich selbst anpassen.
Dbgrox
Dbgrox 19.08.2021 um 11:26:31 Uhr
Goto Top
Okay was muss ich dann an dem Script verändern? Beim ersten -Delimiter "t" rein und weiter?

Ich bin wirklich ein kompletter anfänger und benutze beides in diesem zusammenhang zum 1. mal und wahrscheinlich danach nicht unbedingt wieder.
149062
149062 19.08.2021 aktualisiert um 11:32:39 Uhr
Goto Top
Zitat von @Dbgrox:

Okay was muss ich dann an dem Script verändern? Beim ersten -Delimiter "t" rein und weiter?

S. letzter Kommentar oben (Backtick beachten!)

-Delimiter "`t"
Dbgrox
Dbgrox 19.08.2021 um 11:30:51 Uhr
Goto Top
Vielen Dank, hat durch deine Hilfe super funktioniert. Hab einen schönen Tag. face-smile
Dbgrox
Dbgrox 19.08.2021 um 11:34:47 Uhr
Goto Top
Zitat von @149062:

Zitat von @Dbgrox:

Okay was muss ich dann an dem Script verändern? Beim ersten -Delimiter "t" rein und weiter?

S. letzter Kommentar oben (Backtick beachten!)

-Delimiter "`t"

Und danke für das nächste mal habe ich mehr Erfahrung in diesem Bereich face-smile