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

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

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

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

3回答

21783閲覧

CSVファイルのパーシングで文字列のコンマと区分子のコンマを分けたい

super

総合スコア33

CSV

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

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

正規表現

正規表現とは特定の文字列によるパターンマッチングを行う際に用いられる宣言型プログラミングです。

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

2グッド

0クリップ

投稿2016/07/19 10:22

編集2016/07/19 10:32

ご覧いただきまして有難う御座います。

jQuery(javascript)でCSVファイルを読み込んでテーブルにプレビュー処理する作業をやっております。
ダブルクォーテーション(")に囲まれた文字の中にコンマは文字列として扱いと思います。

split関数でコンマ区切っている既存処理を
正規表現を使って改修したいんですが、中々正確には動けません。

csvのサンプルは以下の通りです。

csv

1"学校","我が子の名前=\"健太,綾香\"","特機","鷲見","誕生日" 2... 3... 4

以上のデータの場合、健太,綾香のコンマは区切り文字ではなく文字列としてエスケープしたいです。

コンマ(,)の前文字が(") OR コンマ(,)の後文字が(") ← の場合は区切る

,でsplitする前に区切り,ではない「健太,綾香」のコンマをエスケープしたいと思います。← もっといい方法があれば是非助けてください。変わっても全然かまいません。
->
###エスケープしないでsplitする時、"内のコンマは無視する方法などありますでしょうか?

以下のリンクからテスト・確認できます。

jsfiddleを作成しました

よろしくお願いいたします。

KiyoshiMotoki, masayoshi001👍を押しています

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

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

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

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

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

guest

回答3

0

"\" でエスケープするという事は \\\ でエスケープする必要がありますが、その認識でOKでしょうか。
通常のCSVフォーマット(MS Excelが出力するCSV互換)では "" でエスケープするのでそのようなパーサを作ったことがあります。

Re: super さん

投稿2016/07/19 10:31

think49

総合スコア18162

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

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

masayoshi001

2018/01/30 13:04

同じ問題に当たり,csv.jsを使用して解決出来ました. ありがとうございました.
guest

0

自己解決

早速のご回答誠に有難う御座います。
ライブラリーを使ったら確実にできると思いますが、ライブラリー無しでしたかったのでいろいろ探した結果splitで一行で解決できました。

javascript

1var csv_sample = '"学校","我が子の名前=\"健太,綾香\"","特機","鷲見","誕生日"'; 2var csvvalue = csv_sample.split(",(?=([^\"]*\"[^\"]*\")*[^\"]*$)", -1);

勉強になりました。有難う御座います。

投稿2016/07/19 10:47

super

総合スコア33

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

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

think49

2016/07/19 11:04 編集

var csv_sample = '"a","b","c"\r\n"d","e","f"'; の場合に1行のCSVファイルとしてパースされますが、問題ないのでしょうか。 また、\" という文字列を入力したい場合はどのように書くのでしょうか。 方法論としては次の2パターンが考えられます。 - RegExp#execで「セル値」「カンマ」「改行」を一つずつ消費する - String#replace で「セル値」「カンマ」「改行」を一つずつ消費する
super

2016/07/19 11:31

ご回答くださって有難う御座います。 仰った通りの問題がありましたので、matchの/gオプションを使って修正した途中でした。 2パターンの方法論は助かります。旨く改修ができましたらまた投稿いたします。 有難う御座います。
guest

0

CSV は本気で対応しようと思うとなかなか面倒くさいので、車輪を何度も発明せずあるものを使わせていただくのが良いかと。

JQueryでCSVを配列に変換 ($.csv())

投稿2016/07/19 10:31

Zuishin

総合スコア28660

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

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

think49

2016/07/19 10:54

そのライブラリは改行の扱いがおかしいようです(初回処理で改行を split しているのが原因だと思います)。 console.log(JSON.stringify(jQuery.csv()('"a1,a2","b1\r\nb2"\r\n"c1""c2",d1\\"d2'))); // [["a1,a2","b"],["2"],["c1\"\"c2","1\\\"d"]]
Zuishin

2016/07/19 11:02

そうなんですか。改行の扱いを何度も修正されているようなのに。
think49

2016/07/19 11:24

> var lines = text.split(lined); 初めに改行で split しているのでセル値内の改行もsplitしてしまっています。 "" で括られた中にはどんな文字でも入れる事が出来ます(エスケープされていない " を除く)ので split で行を分割する実装は基本的にまずいです。 " のエスケープ処理がなく、 ", が後続すると自動的にセル値として閉じる仕様なので ", をセル値に含める事もできないようです。 console.log(JSON.stringify(jQuery.csv()('"a1"",a2","b1\r\nb2"'))); // [["a1\"","2","b"],["2"]]
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問