FILE APIとencode.jsを使ったCSVの取り込み時にダブルクォートを除外して配列にしたいです。
実際に記述しているコードは下記です。
// CSVテキストを2次元配列にする function toArray(csv){ var result = new Array(); var rows = csv.split("\n"); $(rows).each(function(){ result.push(this.split(",")); }); return result; } // HTML5 のFile APIに対応している場合 if(window.File && window.FileReader && window.FileList && window.Blob) { $("#file_input").change(function(event){ // ファイルデータ取得 var file = event.target.files[0]; // CSVファイルチェック if(!file.name.match('.csv$')) { alert('CSVファイルを選択してください'); return; } // ファイル読み込み var reader = new FileReader(); reader.onload = function(e) { console.log(e); const codes = new Uint8Array(e.target.result); const encoding = Encoding.detect(codes); const unicodeString = Encoding.convert(codes, { to: 'unicode', from: encoding, }); // 文字コード配列を文字列に変換 var result = Encoding.codeToString(unicodeString); array = toArray(result); console.log(array); }; reader.onerror = function() { alert('ファイルが読めませんでした。'); }; reader.readAsArrayBuffer(file); }); } else { $('#member_import_dialog').text('File APIに対応したブラウザでご確認ください'); }
console.logで出力すると、文字列を挟んでいたダブルクォートが残ったまま配列化されてしまうのですが、
これを除外することはできるのでしょうか。文字列間にダブルクォートが含まれている場合は、除外の対象外とし、
あくまでカラムを囲んでいるダブルクォートのみを取り除きたいです。
toArray には何が入っているのですか?
大変失礼しました。
toArray()の関数定義を追加しましたのでご確認いただけますでしょうか。
ご質問のご希望からずれていると思うので、回答欄に書かずこちらに書きますが、CSV処理のライブラリを使った方が楽だと思います。
たとえば:
https://www.papaparse.com/
良さそうなライブラリですね。
こういったライブラリを調べても見つけることができなかったので助かります。
こちらで試してみます。
こちらを使ってみたのですが、うまく動作しません。
追記にコードを記述してみましたがどこかおかしい点はありますでしょうか。
文字コード変換をしていないように見えます。
resの中身はundefinedです。
utf-8,shift-jisどちらのファイルをアップしても同じでした。
ドキュメントによると、
The complete callback shown here is executed after all files are finished and does not receive any data. Use the complete callback in config for per-file results.
とのことですね。
コメントしてから気づきました。
ありがとうございます。
確認いたします。
最終的にうまく動いたコードをのせました。
文字エンコードの自動変換に対応させてみました。
ありがとうございました。
あ、よろしければ回答のほうにライブラリの紹介をしていただけますか?
こちらだとBAを選択できないようなので。
ご解決されて何よりです。
お手数おかけしてすみませんが、自己解決でご対応いただけますか?
承知いたしました。
ありがとうございました。
回答1件
あなたの回答
tips
プレビュー
