前提・実現したいこと
前提
https://teratail.com/questions/269193
で解決したと思った件に関してですが
自分の確認不手際で見逃している箇所がありました。
申し訳ございません。
また,javascriptを触り始めて3日目程度の知識が無いので
実現したいことや質問に不慣れな部分がある事に関しても
お手数お掛け致します。
実現したいこと
Javascriptで頂いたTSVファイル読み込んでいるのですが
タブ区切りを行った際にデータ部分にタブが混じっているものがあり
本来区切る必要が無い箇所でタブ区切りがされてしまいます
※頂くTSVを相手側でデータ内のタブを考慮して修正して頂く事が出来ないので
こちら側で対応しなければならない形です。
なので、タブ区切りを行う前にreplaceを使い
データ部分のタブを空白に置き換えることで
不必要な分割がされないようにしようとしております。
もしくは、タブ区切りを行う際に先頭が
ダブルクオーテーションの箇所は
タブ区切りを行わないなどは可能でしょうか?
発生している問題・エラーメッセージ
下記TSVのデータがあるのですが
(異常:データ部分にTAB有り)
[TAB]6000[TAB]"販売者[TAB](株)佐々木 "[TAB][TAB]"内容量[TAB] 200g
原材料名 [TAB]ブドウ糖、香料
賞味期限 [TAB]製造日より6ヶ月以内
保存方法 [TAB]直射日光を避け常温
配送方法 [TAB]宅配便(常温)
提供事業所 [TAB] (株)佐々木"[TAB]1か月間
(異常:データ部分も区切られてしまう)
6000,"販売者,(株)佐々木",,
内容量, 200g
原材料名 ,ブドウ糖、香料
賞味期限 ,製造日より6ヶ月以内
保存方法 ,直射日光を避け常温
配送方法 ,宅配便(常温)
提供事業所 ,株)佐々木",
1か月間
本来""で囲まれた部分のタブの箇所で
分割がされたくない部分が分割されてしまいます
本来であれば
"販売者[TAB](株)佐々木 "の中の[TAB]と
"内容量[TAB] 200g
原材料名 [TAB]ブドウ糖、香料
賞味期限 [TAB]製造日より6ヶ月以内
保存方法 [TAB]直射日光を避け常温
配送方法 [TAB]宅配便(常温)
提供事業所 [TAB] (株)佐々木"
の中の[TAB]で区切られたくない形です。
""の無いのTABを空白に置き換えるか
もしくは、[TAB]区切りの際に先頭がダブルクオーテーションだったら
区切らない方法など無いでしょうか?
目指すべきは""内に[TAB]が入っていてもいいので
下記のように綺麗に分割出来ればいい形です。
6000,"販売者[TAB](株)佐々木 ",,"内容量[TAB] 200g
原材料名 [TAB]ブドウ糖、香料
賞味期限 [TAB]製造日より6ヶ月以内
保存方法 [TAB]直射日光を避け常温
配送方法 [TAB]宅配便(常温)
提供事業所 [TAB] (株)佐々木",1か月間
もしくは、
6000,
"販売者(株)佐々木 ",,"内容量 200g
原材料名 ブドウ糖、香料
賞味期限 製造日より6ヶ月以内
保存方法 直射日光を避け常温
配送方法 宅配便(常温)
提供事業所 (株)佐々木",
1か月間
該当のソースコード
javascript
https://teratail.com/questions/269193の置換方法の正規表現を入れてみました。
function getArraysFromTSV(tsvFile): Promise<string[][]> {
return new Promise(resolve => {
let appReader = new FileReader();
appReader.onload = function (e) {
const rawString =${e.target.result}
;resolve( **rawString.replace(/(["].+?)\t(.+?["])/g**,"$1$2") .split('\n') .map(string => string.split("\t")) .map( row => row.map( cell => cell.charAt(0) === '"' && cell.charAt(cell.length - 1) === '"' ? cell.substring(1, cell.length - 1).replace(/<!--NEWLINE-->/g, "\n").replace(/""/g, '"') : cell ) ).filter(row => row.join('').trim() !== "") ) }; appReader.readAsText(tsvFile);
});
}
### 試したこと 正規表現の箇所を変更して console.log(rawString.replace(/(["].+?)\t(.+?["])/g,"$1$2")) を書いてみてgoogle chromeの検証のconsoleを確認してみた形です。
回答1件
あなたの回答
tips
プレビュー