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

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

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

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

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

Q&A

解決済

2回答

703閲覧

空白文字を含むデータの空白を消して配列にする方法

Khy

総合スコア118

Google Apps Script

Google Apps ScriptはGoogleの製品と第三者のサービスでタスクを自動化するためのJavaScriptのクラウドのスクリプト言語です。

JavaScript

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

0グッド

1クリップ

投稿2019/05/08 02:02

現在txtファイルのデータを表形式に変換するプログラムを作成しています。
txtデータは以下のようになっており、文字と文字の間は空白文字で区切られているのですが、空白には半角スペース、全角スペース、tabが混在しており、その数も統一されていない状態です。
また最後の項目は任意項目でスペースのみが入っているか文字が入っている状態です。

1   2017/01/01 apple 赤いです。
2 2017/01/02 banana
3 2017/01/03 orange 美味しいです。

これをどうにか行ごとに空白を決して分けて[[1,"2017/01/01","apple","赤いです。"],[2,"2017/01/02","banana",""],[3,"2017/01/03","orange","美味しいです。"]]のような配列データにしたいのですが、いい方法はございますでしょうか?
現状以下のコードを書いておりますが、上手く機能しておりません。
ご教授頂けると助かります。

var datas = [ "1   2017/01/01 apple 赤いです。", "2 2017/01/02 banana ", "3 2017/01/03 orange 美味しいです。", ] for(var i = 0; i < datas.length; i++){ //スペースで分割 var data = datas[i].split(/[\s]/); //スペースが入った配列を削除 for(var j = 0; j < data.length; j++){ //空白文字ならその要素を削除しようとしていますが機能しておりません。 if(data[j] == /\s+/){ data.splice(j, 1); } } console.log(data); }

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

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

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

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

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

guest

回答2

0

ベストアンサー

単に、splitの正規表現を複数文字にヒットするようにして、var data = datas[i].split(/\s+/);とすれば、スペース類はすべて「区切り文字」として吸収されて残らなくなります。

投稿2019/05/08 02:06

maisumakun

総合スコア145183

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

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

macaron_xxx

2019/05/08 02:13

GASのタグから、行列を揃える必要があると思うので、 最後にdataのlengthが3だった場合に空文字をpushしてやればいいですね。
Khy

2019/05/09 03:40

maisumakunさん splitだけで分けれたのですね、、お陰様で無事解決しました。 ありがとうございました!
Khy

2019/05/09 03:41

macaron_xxxさん ご丁寧にありがとうございます! 無事解決致しました!
guest

0

maisumakunさんの回答の通りjsにおいて\sが適当にスペース文字を判断してくれますが
たとえば半角スペース、全角スペース、tabを指定して分割したい場合など
(つまり改行などは区切りにしたくないなど)は、個別に指定してやります

javascript

1var a=[ 2 `1 \t\t   2017/01/01 app 3le 赤いです。`, 4 "2 2017/01/02 banana ", 5 "3 2017/01/03 orange 美味しいです。", 6 ]; 7var b=a.map(x=>x.split(/[\x20\u3000\t]+/)); 8console.log(b);

投稿2019/05/08 02:51

yambejp

総合スコア114779

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

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

Khy

2019/05/09 03:39

ご回答ありがとうございます! 個別に区切る方法もあるのですね 勉強になりました、ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問