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

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

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

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

Q&A

解決済

2回答

411閲覧

癖のあるCSVテキストをJSで料理する方法の有無について

asagao

総合スコア15

JavaScript

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

0グッド

0クリップ

投稿2020/07/09 01:24

初学者です。

JavaScript

1var csvstr = `1qwerty,asdfgh,zxcvbn,,,,"[[""あ"",true,140,{}],[""い"",false,100,{}],[""う"",true,500,{}]]" 22qwerty,asdfgh,zxcvbn,,,,"[[""あ"",true,140,{}],[""い"",false,100,{}]]" 33qwerty,asdfgh,zxcvbn,,,,"[[""あ"",true,140,{}]]"`; 4```ぶち当たった壁 5```JavaScript 6var arr = csvstr.split("\n"); 7var output = []; 8for (var i = 0; i < arr.length; i++) { 9 output[i] = arr[i].split(","); 10} 11```をすると右の方の二次元配列の中身のカンマを利用してsplitしてしまう 12最終的に 13```JavaScript 14output[0][0] => "1qwerty" 15output[0][1] => "asdfgh" 16output[0][6] => [["あ",true,140,{}],["い",false,100,{}],["う",true,500,{}]] 17output[0][6].length => 3 18output[0][6][0] => ["あ",true,140,{}] 19output[0][6][0][2] => 140 20```という出力にもっていきたいのですがブラウザで走るJavaScriptでできますか? 21可能であれば若干の方策のヒントをいただけると嬉しいです。 22面倒なことせず他の言語でやったほうがいい、便利なライブラリがある等でも助かります。 23宜しくお願いいたします。

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

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

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

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

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

guest

回答2

0

ベストアンサー

CSVをいちいちフルスクラッチで解釈するのは無駄なので
ライブラリをつかってください。

投稿2020/07/09 01:37

yambejp

総合スコア116724

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

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

yambejp

2020/07/09 01:39

6番目(実質7番目)の要素がJSON型なのは自動判別キビシイので 「6番目」要素を指定してよいのでしょうか? <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery-csv/1.0.3/jquery.csv.min.js"></script> <script> var csvstr = `1qwerty,asdfgh,zxcvbn,,,,"[[""あ"",true,140,{}],[""い"",false,100,{}],[""う"",true,500,{}]]" 2qwerty,asdfgh,zxcvbn,,,,"[[""あ"",true,140,{}],[""い"",false,100,{}]]" 3qwerty,asdfgh,zxcvbn,,,,"[[""あ"",true,140,{}]]"`; var result = $.csv.toArrays(csvstr).map(x=>x.map((y,z)=>z==6?JSON.parse(y):y)); console.log(result); </script>
miyabi_takatsuk

2020/07/09 01:40

ですね・・・。 私の回答のことも、自分でアルゴリズム組んだら、最初は穴だらけで余計に時間食いますしね・・・。 ライブラリ一択ですね。
asagao

2020/07/09 01:46

秒で解決していただけるとは。 列は固定ですので[6]決め打ちで構いません。 いまブラウザで確認しましたら欲しい出力結果になっていました。 jQuery.CSV.jsよいですね。使わせていただきます。 本当ありがとうございます。
guest

0

確かに、JavaScript以外の方がいいかもですが、JavaScriptでもやれると思います。

下記手順でやるとよいのではないでしょうか?

  1. まず、二次配列の文字を対象に処理をする
  2. 上記処理の中で、いったんカンマを別の文字に置き換えて、エスケープする
  3. カンマ区切りで、splitする。
  4. 各配列要素を操作して、エスケープした文字をカンマに戻す
  5. 二次配列要素を配列に変換する

文字列処理に於いて、このエスケープ処理は、けっこう重宝するテクニックなので、覚えておくと技術の幅がグンと広くなると思いますよ。

投稿2020/07/09 01:37

編集2020/07/09 01:38
miyabi_takatsuk

総合スコア9555

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

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

asagao

2020/07/09 01:53

セルの中身に配列が入っていてカンマや引用符2つがあったりと素直に行かない文字列処理は初心者には辛かったです。 カンマの退避置換エスケープも考えたんですが、そこからの進展が自分ではできませんでした。 初学者には難しいそうので先達の開発者がつくってくれた便利ライブラリに頼ろうと思います。 回答ありがとうございました。
miyabi_takatsuk

2020/07/09 01:59

ですね。 ライブラリ使うで大正解だと思います。 私の回答でのことを自身で作れたとしても、どうしても最初はバグが出てしまうので、 返って時間かかるかと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問