54362


csvファイルをタブ区切りでsqlserverにbulkinsertしたいのですが、文字列にダブルクォーテーションで囲まれたカラムが混在しています。  
さらにそのダブルクォーテーション付きのカラムにはカンマもあります。  
普通であればダブルクォーテーションを削除してカンマをタブに変換すればいいのですが上記がネックとなります。  
そのため前処理として、

  1. カンマを別の値（被らなければなんでもよい）に置換
  2. ダブルクォーテションンを削除
  3. カンマをタブに変換

をしたいです。

文字列  
1,12345,"aaa,bbb",56789,"aaa",34567

例えば、`"aaa,bbb"`のカンマだけを`x`に置換して`"aaaxbbb"`にしたいです。

[code]

    $data = Get-Content .\test.csv | ForEach-Object { $_ -replace "",""}
    
[/code]

`-replace`以降の指定の仕方がわかりません。

よろしくお願いします。


CC BY-SA 4.0
2019-04-21T07:25:29.623
54358
2019-04-21T14:37:05.563
2019-04-21T08:42:51.333
33013
33013
question
powershell
Powershellでダブルクォーテションで囲まれた文字列を置換したい


コメントでも触れられているように一旦`Import-Csv`で読みこんだ方が確実かと思います。  
その後に生成された各オブジェクトのプロパティの値を加工して結合するだけです。

[code]

    Import-Csv .\test.csv -Header (1..6) | foreach { $_.psobject.Properties.Value.Replace(",", "x") -join "`t" }
    
[/code]

カンマのまま残すのであれば置換する必要もないので以下でいいです。

[code]

    Import-Csv .\test.csv -Header (1..6) | foreach { $_.psobject.Properties.Value -join "`t" }
    
[/code]


CC BY-SA 4.0
2019-04-21T10:30:44.470
54362
2019-04-21T10:41:03.873
2019-04-21T10:41:03.873
28280
28280
54358
answer


SQL ServerにCSVファイルをインポートするのが目的なのですね。

もし、`SQL Server 2017`を利用しているのであれば、`BULK
INSERT`の`FORMAT`オプションで`CSV`を指定すると、CSVファイルを取り込むことが可能です。

※対象ファイルが、harry0000さんのコメントにある、[RFC 4180](https://www.rfc-
editor.org/rfc/rfc4180)に準拠している必要があります。

参考:  
[BULK INSERT (Transact-SQL) - SQL Server | Microsoft
Docs](https://docs.microsoft.com/ja-jp/sql/t-sql/statements/bulk-insert-
transact-sql?view=sql-server-2017#input-file-format-options)


CC BY-SA 4.0
2019-04-21T14:37:05.563
54368
2019-04-21T14:37:05.563
2021-10-07T07:34:52.683
-1
12561
54358
answer