質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

Q&A

解決済

2回答

9469閲覧

PowerShellでCSVファイル内の特定列に対してのみ文字列操作(削除)を行いたい

POPONGA

総合スコア3

CSV

CSV(Comma-Separated Values)はコンマで区切られた明白なテキスト値のリストです。もしくは、そのフォーマットでひとつ以上のリストを含むファイルを指します。

PowerShell

Windows PowerShellはコマンドラインインターフェースであり、システム管理を含むWindowsタスク自動化のためのスクリプト言語です。

0グッド

0クリップ

投稿2021/05/20 09:25

編集2021/05/20 11:34

前提・実現したいこと

PowerShellを使用し、CSVファイル内の特定列に対してのみ文字列操作(削除)を行いたいのですが、実現方法がわかりません。
よい方法があればご教示いただけないでしょうか。

対象CSVファイルのデータ(Import.csv)

データA,データB,データC,データD "しゃけ","おかか","すじこ","こんぶ"

各列の文字列の前後には「”」ダブルクォーテーションが入った状態です。

期待するアウトプット(Output.csv)

上記対象CSVファイルのデータのうち、データC列のみ前後の「”」ダブルクォーテーションを削除し、CSVファイルとして出力しなおしたいです。

データA,データB,データC,データD "しゃけ","おかか",すじこ,"こんぶ"

※データC列「すじこ」のみ、前後のダブルクォーテーションを削除。

補足情報(PowerShellのバージョン)

Name Value ---- ----- PSVersion 5.1.19041.906

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

↓ すみません、この回答ではだめですね。
(5.1.19041.906 だったらExport-CsvQuoteFieldsオプション無いので。)


ベタにやるとこんな感じですかね。

powershell

1# note: Import-Csvで読込み`"`が必要な項目に文字列付加しExport-Csvで`"`無し出力。 2Import-Csv onigiri.csv | foreach { 3 $_.データA = '"'+$_.データA+'"'; 4 $_.データB = '"'+$_.データB+'"'; 5 $_.データD = '"'+$_.データD+'"'; 6 echo $_} | Export-Csv -Path .\onigiri.out.csv -QuoteFields ""

入出力ファイルがSJISなら

powershell

1# note: Import-Csvで読込み`"`が必要な項目に文字列付加しExport-Csvで`"`無し出力。 2Import-Csv onigiri.csv -Encoding oem | foreach { 3 $_.データA = '"'+$_.データA+'"'; 4 $_.データB = '"'+$_.データB+'"'; 5 $_.データD = '"'+$_.データD+'"'; 6 echo $_} | Export-Csv -Path .\onigiri.out.csv -QuoteFields "" -Encoding oem

投稿2021/05/20 11:48

編集2021/05/20 12:08
Y.H.

総合スコア7918

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

POPONGA

2021/05/20 12:08

ご教示ありがとうございます! 私の環境ではPowerShellのバージョンが古いせいか、「-QuoteFields」オプションが使えませんでしたが、考え方はとても参考になりました。 色々やりかたがあって面白いですね。
guest

0

自己解決

下記で対応できました!

$ImportFile = ".\Import.csv" $DATA_AB = Get-Content $ImportFile | % { $_.Split(",")[0] + "," + $_.Split(",")[1] } $DATA_C = Get-Content $ImportFile | % {$($_-split(","))[2]} | % {$_.Replace('"','')} $DATA_D = Get-Content $ImportFile | % {$($_-split(","))[3]} for ($i=0; $i -lt 5; $i++){ Write-Output ($DATA_AB[$i] + "," + $DATA_C[$i] + "," + $DATA_D[$i]) | Out-File .\Output.csv -Append -Encoding default }

↓出力結果(Output.csvの中身)

データA,データB,データC,データD "しゃけ","おかか",すじこ,"こんぶ" "しゃけ","おかか",すじこ,"こんぶ" "しゃけ","おかか",すじこ,"こんぶ" "しゃけ","おかか",すじこ,"こんぶ"

投稿2021/05/20 11:35

編集2021/05/20 12:31
POPONGA

総合スコア3

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Y.H.

2021/05/20 12:14

解決してよかったです!
POPONGA

2021/05/20 12:19

少々手こずりましたが何とかできました。 とても勉強になるご回答ありがとうございました:)
Y.H.

2021/05/20 12:27

私の回答は質問の要件満たしてないので、 ベストアンサーはPOPONGAさんのこの回答の方がいいと思います。
POPONGA

2021/05/20 12:35

ご指摘ありがとうございます。自己解決に変更させていただきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問