実現したいこと
現在書いているコードを短縮してシンプルにしたい
詳細
よろしくお願いいたします。
GAS
1 2function myFunction() { 3 4 5//HTMLを取得 6 const url = "URL"; 7 const response = UrlFetchApp.fetch(url); 8 const html = response.getContentText("UTF-8") 9 10//テーブルデータを取得 11 const tabledatas = Parser.data(html).from('<tbody>').to("</tbody>").build(); 12 13 //テーブルデータから特定の文字列に囲まれたデータをすべて抽出.iterate();(東G) 14 let tabledata1 = Parser.data(tabledatas).from('<td>東G</td>').to('</td>').iterate(); 15 16 17 //テーブルデータから特定の文字列に囲まれたデータをすべて抽出.iterate();(東S) 18 let tabledata2 = Parser.data(tabledatas).from('<td>東S</td>').to('</td>').iterate(); 19 20 21 //テーブルデータから特定の文字列に囲まれたデータをすべて抽出.iterate();(東P) 22 let tabledata3 = Parser.data(tabledatas).from('<td>東P</td>').to('</td>').iterate(); 23 24 25 //テーブルデータから特定の文字列に囲まれたデータをすべて抽出.iterate();(東2) 26 let tabledata4 = Parser.data(tabledatas).from('<td>東2</td>').to('</td>').iterate(); 27 28 29 //テーブルデータから特定の文字列に囲まれたデータをすべて抽出.iterate();(東1) 30 let tabledata5 = Parser.data(tabledatas).from('<td>東1</td>').to('</td>').iterate(); 31 32 //テーブルデータから特定の文字列に囲まれたデータをすべて抽出.iterate();(JQ) 33 let tabledata6 = Parser.data(tabledatas).from('<td>JQ</td>').to('</td>').iterate(); 34 35 36 //テーブルデータから特定の文字列に囲まれたデータをすべて抽出.iterate();(東マ) 37 let tabledata7 = Parser.data(tabledatas).from('<td>東マ</td>').to('</td>').iterate(); 38 39 40 41//スプシのデータ取得 42 const spreadFile = SpreadsheetApp.getActiveSpreadsheet(); 43 44//スプシのシート名を指定してデータ取得 45 const spreadSheet = spreadFile.getSheetByName("シート1"); 46 47let tabledata11,tabledata22,tabledata33,tabledata44,tabledata55,tabledata66,tabledata77 48 49//すべてのテーブルデータをスプシに記入 50 51 //テーブルデータ(東G)をスプシに記入 52 for (let i = 0; i < tabledata1.length; i++) { 53 54 //抽出した無駄な部分を削除 55 tabledata11 =tabledata1[i].replace("<td>",""); 56 tabledata11 =tabledata1[i].replace(/[\s\t\n]/g,""); 57 tabledata11 = tabledata1[i].replace("<td>", ""); 58 spreadSheet.getRange(spreadSheet.getLastRow()+1,2).setValues([[tabledata11]]) 59 60 } 61 62 63 //テーブルデータ((東S))をスプシに記入 64 for(let i=0;i<tabledata2.length;i++){ 65 66 //抽出した無駄な部分を削除 67 tabledata22 =tabledata2[i].replace("<td>",""); 68 tabledata22 =tabledata2[i].replace(/[\s\t\n]/g,""); 69 tabledata22 = tabledata2[i].replace("<td>", ""); 70 71 spreadSheet.getRange(spreadSheet.getLastRow()+1,2).setValues([[tabledata22]]) 72 } 73 74 75 76 //テーブルデータ((東P))をスプシに記入 77 for(let i=0;i<tabledata3.length;i++){ 78 79 //抽出した無駄な部分を削除 80 tabledata33 =tabledata3[i].replace("<td>",""); 81 tabledata33 =tabledata3[i].replace(/[\s\t\n]/g,""); 82 tabledata33 = tabledata3[i].replace("<td>", ""); 83 84 spreadSheet.getRange(spreadSheet.getLastRow()+1,2).setValues([[tabledata33]]) 85 86 } 87 88 89 90 //テーブルデータ((東2))をスプシに記入 91 for(let i=0;i<tabledata4.length;i++){ 92 93 //抽出した無駄な部分を削除 94 tabledata44 =tabledata4[i].replace("<td>",""); 95 tabledata44 =tabledata4[i].replace(/[\s\t\n]/g,""); 96 tabledata44 = tabledata4[i].replace("<td>", ""); 97 98 spreadSheet.getRange(spreadSheet.getLastRow()+1,2).setValues([[tabledata44]]) 99 } 100 101 102 //テーブルデータ((東1))をスプシに記入 103 for(let i=0;i<tabledata5.length;i++){ 104 105 //抽出した無駄な部分を削除 106 tabledata55 =tabledata5[i].replace("<td>",""); 107 tabledata55 =tabledata5[i].replace(/[\s\t\n]/g,""); 108 tabledata55 = tabledata5[i].replace("<td>", ""); 109 110 spreadSheet.getRange(spreadSheet.getLastRow()+1,2).setValues([[tabledata55]]) 111 112 } 113 114 //テーブルデータ((JQ))をスプシに記入 115 for(let i=0;i<tabledata6.length;i++){ 116 117 //抽出した無駄な部分を削除 118 tabledata66 =tabledata6[i].replace("<td>",""); 119 tabledata66 =tabledata6[i].replace(/[\s\t\n]/g,""); 120 tabledata66 = tabledata6[i].replace("<td>", ""); 121 122 spreadSheet.getRange(spreadSheet.getLastRow()+1,2).setValues([[tabledata6[i]]]) 123 } 124 125 //テーブルデータ((東マ))をスプシに記入 126 //for(i of tabledata7){ 127 //spreadSheet.appendRow([tabledata7[i]]); 128 for(let i=0;i<tabledata7.length;i++){ 129 130 //抽出した無駄な部分を削除 131 tabledata77 =tabledata7[i].replace("<td>",""); 132 tabledata77 =tabledata7[i].replace(/[\s\t\n]/g,""); 133 tabledata77 = tabledata7[i].replace("<td>", ""); 134 135 spreadSheet.getRange(spreadSheet.getLastRow()+1,2).setValues([[tabledata77]]) 136 137 138} 139 140}
JavaとJavaScriptは全く別の言語です。
「Java」タグは外してください。
「Google Apps Script」タグがあるので付けてください。
[タグ一覧|Google Apps Script](https://teratail.com/tags/Google%20Apps%20Script)
「Google スプレッドシート」タグもあります。
[タグ一覧|Google スプレッドシート](https://teratail.com/tags/Google%20%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%89%E3%82%B7%E3%83%BC%E3%83%88)
コメントありがとうございます。質問を修正したのでご確認よろしくお願いいたします。
現在書いているコードを短縮してシンプルにするために、自分でやってみたことを記してください。また、その結果自分が想定した通りにならなかったのであれば、どうなることを想定していて実際はどうなったのかを記してください。
ちなみに、このコメント欄に書くのではありません。質問文を編集して書いてください。
対応ありがとうございます^^
5行目、12行目、20行目はfor(... in ...)ではないのですか?
tabledata1 から tabledata7 を用意する方法から改善したほうがいいと思います。そのあたりのコードも開示してはどうでしょうか。
コメントありがとうございます。質問を修正したのでご確認よろしくお願いいたします。
for (... of ...) {
for (... in ...) {
は
for ( ; ; ) {
だったの?
というか、
for of 文をご存知で使わないのは何故ですか?
テーブルデータとシート記入と二重にfor文を使えるのはご存知ですよね。
というか、質問者さん自身がコードをいろいろ書き換えて試していらっしゃるようなんで、
> 現在書いているコードを短縮してシンプルにするために、自分でやってみたことを記してください。また、その結果自分が想定した通りにならなかったのであれば、どうなることを想定していて実際はどうなったのかを記してください。
という私の問いかけにも反応をいただきたいです。
ちなみに (繰り返しになりますが)、このコメント欄に書くのではありません。質問文を編集して書いてください。
えっと、よくわかりませんが、質問者さんは質問を楽しんでいて回答は望んでいない(自分で回答を見つけたい)ということですか?
私個人の印象としては、質問の動機とか自分が試したこととかを示さず、ただ答えだけを求める質問のしかたはよろしくないなーと思いますね。
コードが同じことの繰り返しで重複しているのを
まとめて書く方法を知りたいだけかと思っていました。
なので配列でのfor文の使い方を知っているようなので、重ねて組み合わせればいいだけかと。
動機や何を試したのかは、私は関心がありませんでした。
まあそういうことなんでしょうが、それにしてもいろいろやりかたはあるわけで、例えば「東G」とかいった部署名? なんですかね、これをパラメータ化してまとめるとか、他のやりかたとかあると思います。そういったことを何か**試した上で質問**してきているのではないのなら、本当にやりたいの? ということです。
一方、現場の感覚で言うと、ちゃんと動いてるものなら強いて単純化しようとしてバグを入れたらまずいので、そのままがいいという判断もありうるわけですよね。だから、あえてそういうことを**しようと思った動機** (たとえば「上長に指示されたから」でもいいので) を知りたいというのはあります。
動機しだいで(上からの指示なら)バクありでもいいと仰りたいように聞こえますよ。
上長の指示の結果バグを作り込んでしまったら、それは上長の判断ミスです。会社勤めというのはそういうものです。ていうか何の話だ。
変な話になって、ごめんなさい。
ただ、
> 上長の指示の結果バグを作り込んでしまったら、それは上長の判断ミスです。
というのを責任転嫁というのではないかなぁと...一瞬思ってしまいました。
ごめんなさい。
上はどんなときにでも責任は負うものですね。
上長が「お前が勝手にバグを入れたんだ」と言ったら責任転嫁です。
組織の中で上司からの指示に従って仕事をしたのに問題が生じたら、責任を取るのは組織であって、個人ではありません。そうでなきゃ誰も、会社で上司の指示に従ったりしませんでしょ。
なんか変な話になっちゃいましたね、こちらこそ失礼。
for of 文をご存知で使わないのは何故ですか?
>昨日から初めてまだ初学者のため、for ofよりfor文が自分ではコードの理解がしやすいためです。
gasでしたいことは、とあるサイトの表から特定の情報をスクレイピングすることです。
よろしくお願いいたします。
//すべてのテーブルデータをスプシに記入
これ以降のコードを短縮できそうと思っているのですが、短縮できるアイデアがありません。
どなたかアイデアありましたら教えていただけますと幸いです。
なぜ短縮したいのでしょうか。別に今のままでも動くのだから問題ないではありませんか。
また、for文の3種類の構文を知っているくらいですから、短縮のために何か試してみたことがあるのではないですか。それを説明してください。
なぜ短縮したいのでしょうか。
>短縮した方が気持ち良いしかっこよくないですか?スキルアップのためでもあります。
この気持ちに共感していただけないでしょうか。
短縮のために何か試してみたことがあるのではないですか。それを説明してください。
>特にありません。ただ単に短縮したコードを書いてみたいです。
スキルアップのためなら、ご自分で勉強されるのが一番です。参考書を読むなりして、短縮できるテクニックがないか調べましょう。
短縮できるかどうか調べて、私の方でも試したのですができませんでした、、
答え探すより人に聞いた方が効率良くないですか?
もちろん、いろいろ寄り道して思考を辿ることが重要なときもありますが、プログラミングは答え見て覚えた方が上達速度早いと思っています。
私は間違っていますでしょうか。玄人の方の意見を聞かせていただけますか。
ですから、試したことを書いてくださいと言っています。
teratailでは、自分で問題に取り組まずに単に正解を要求するような「**丸投げの質問**」は推奨されていません。
https://teratail.com/help/avoid-asking
回答を得たいのであれば、「私の方でも試したのですができませんでした」と言うのではなく、
> 現在書いているコードを短縮してシンプルにするために、自分でやってみたことを記してください。また、その結果自分が想定した通りにならなかったのであれば、どうなることを想定していて実際はどうなったのかを記してください。
---
流石にこれだけ言えば、普通は対応すると思うのですが。しないとしたら、最初から回答を求めていない質問の可能性が出てきますね。
掲載コードから見て取れる事はforを知っていてあえて使わないことを選んだという事、関数も知っていそうだがそれもあえて使わないことを選んだのだろうという事だけです。
ならばこれ以上改善の余地はないです。これがもしforが一切書かれていないコードだったらforがありますよって教える事はできます。
> プログラミングは答え見て覚えた方が上達速度早いと思っています。
この程度なら試行錯誤考えた方がスキルアップになりそうです。
見て覚えた方が良いレベルの内容は大体書籍になっていたりするものだし、その難易度が高いものならライブラリ化されていたりします。
ここまでのやり取りを読む前は、
単純にコードの文字数を少なくしたいだけかと思っていて、
なぜ質問者さんが自分で書いているのにわかっていないかと疑問でした。
何がどうなっているのかを理解できなくても、
それを使ったコードを書いてみたかったのですね。
わからなくてもいいから動くコードを欲しいのであれば、
あえて初学者には理解できないように書いたコードでもいいのでしょうか。
> あえて初学者には理解できないように書いたコード
そういうコードゴルフ的なことをするのは楽しいので、奇抜なコードを回答として投稿されるのもよいと思いますよ☺️
> 答え探すより人に聞いた方が効率良くないですか?
> もちろん、いろいろ寄り道して思考を辿ることが重要なときもありますが、プログラミングは答え見て覚えた方が上達速度早いと思っています。
と仰ってますが、
ご自身で提示したコード自体からいろいろ(今回の質問が不要なほど)覚えられるのになぁと思ってしまいました。
> for of 文をご存知で使わないのは何故ですか?
> >昨日から初めてまだ初学者のため、for ofよりfor文が自分ではコードの理解がしやすいためです。
コードがわかりにくくなる for ( ; ; ) 文を使うのは
イテレータが必要でなおかつ途中でbreakしたい時ですね。
配列ならsomeメソッドで置き換えできる可能性もありますが。
質問者さんからのレスポンスがなくなりましたが、明日の午前中まで待ってみます。
あえて初学者には理解できないように書いたコードでもいいのでしょうか。
>もし短縮できるものがあるなら見てみたいです!色々勉強させてください。
> 現在書いているコードを短縮してシンプルにするために、自分でやってみたことを記してください。また、その結果自分が想定した通りにならなかったのであれば、どうなることを想定していて実際はどうなったのかを記してください。
がんば!
> >もし短縮できるものがあるなら見てみたいです!
> 色々勉強させてください。
まずは、
ご自身で書いたコードを勉強するなり、
これまでの試行錯誤を書いてみましょう。
という話の流れになっていますよ。