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

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

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

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

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

Q&A

1回答

5808閲覧

csvの改行を\r\nに変換する方法

naonao11

総合スコア97

CSV

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

SQL Server

SQL Serverはマイクロソフトのリレーショナルデータベース管理システムです。データマイニングや多次元解析など、ビジネスインテリジェンスのための機能が備わっています。

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

sh

shは、UNIX系OSのシェル操作の1つであり、最も基本的なシェルのことです。

0グッド

1クリップ

投稿2020/02/28 21:35

今回、csvのファイル内の改行を改行コードに変換したいのですが方法が思いつきません。
元のデータ

"id","name","created_at" 1,"改行 ・hogehoge ・hogehoge2 ・hogehoge3",2020/01/01 2,"改行2 hogehoge ・hogehoge5 hogehoge3",2020/01/02

といった具合のデータを

"id","name","created_at" 1,"改行\r\n・hogehoge\r\n・hogehoge2\r\n・hogehoge3",2020/01/01 2,"改行2\r\nhogehoge\r\n・hogehoge5\r\nhogehoge3",2020/01/02

行いたい理由
sql serverにてデータをbulk insertを行いたいと考えています。

行ったSQL文

BULK INSERT table FROM '/tmp/hoge.csv' WITH (FIRSTROW = 2, CODEPAGE = ‘65001’, DATAFILETYPE = ‘Char’, FORMAT = 'CSV'); GO

御助力よろしくお願いします。

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

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

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

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

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

guest

回答1

0

入力をin.csv、出力をout.csvとして、Rubyが入っていればワンライナーで書けます。

ruby -rcsv -e 'CSV.new(STDOUT).then { |csv| CSV.new(STDIN).each { |row| csv.puts row.map { |field| field.gsub("\n", "\r\n") } } }' < in.csv > out.csv

ただ、出力はCSVとして正しければ良いとなりますので、不必要な"は消されたりしますのでご注意ください。(必要な場合は消されません)

投稿2020/02/28 22:23

raccy

総合スコア21751

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

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

naonao11

2020/02/29 00:54

ありがとうございます! このCSVにてデータをBulk Insertしたのですが上手くいきません。。。 こちら何か原因があるでしょうか。。 エラー内容 ``` リンク サーバー "(null)" の OLE DB プロバイダー "BULK" から必要なインターフェイス ("IID_IColumnsInfo") を取得できません。 ```
raccy

2020/02/29 01:46 編集

まず、CSVがあなたの想定通りなのか確認してください。 想定通りのCSVなのにうまく行かないのであれば、insertのやり方が間違っているのかもしれません。質問内容が大きく変わっていますので、新たに質問をした方が良いでしょう。 想定と違うのであれば、どう違うのか、どういう風になれば良いのかを質問に書いてください。RFC4180で定められたCSVとは多少異なる必要があれば、それを明記してください(例えば、Excel等の個々のアプリよってはRFC4180に従っていない場合があります)。ただ、要件によっては私が回答に書いた方法ではうまくいかない可能性はあります。
naonao11

2020/03/01 14:52 編集

申し訳ございません書き方が悪かったです>< 改行 ・hogehoge ・hogehoge2 ・hogehoge3 を上のワンライナーで行うと 改行 \r\n・hogehoge \r\n・hogehoge2 \r\n・hogehoge3 となります。。。 またダブルコーテションを残る形の方法もありませんでしょうか。。
raccy

2020/03/01 22:21

Rubyは環境に合わせてデフォルトの改行コードや文字コードを変えます。CSVがOS標準のもの(例えば、WindowsだとCRLF+Windows31-J、標準的なLinuxだとLF+UTF-8)と異なる場合は想定通りにはなりません。異なる場合は、CSVの改行コードと文字コードを明記してください。環境に関係無く指定する事は可能です。 ただ、ダブルコーテーションは全て付けるか全て消すかのどちらです。これはCSVとして解釈する限り、その時点でダブルコーテーションで囲っていたという情報が消えてしまうからです。他の言語のCSVライブラリでもこのような仕様は同じだと思われます。CSVのパーサーを作るところから始める必要がありますので、簡単にはできません。ただ、汎用のCSVとしてではなく、フィールドなどに抱える情報に規則があり、固定であれば、それように作ることはできます。その場合は、どのようなフィールドになるのか、どのような規則なのか、そういった点を細かく定義する必要があります。
xdolphinx

2020/05/04 14:30

まだ未解決のまま問題を抱えておられますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問