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

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

新規登録して質問してみよう
ただいま回答率
85.48%
Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

タイムアウト

タイムアウトはイベント発生から完了までに掛かる経過時間に対する一定の待ち時間を指します。また、特定の時間が経過された場合に発生するイベントを指すこともあります。

Q&A

解決済

1回答

2919閲覧

【GAS】【文字列操作】特定の文字列が存在すると?処理が進まなくなる(タイムアウト)。

experiment

総合スコア1

Google スプレッドシート

Google スプレッドシートは、フリーで利用できる表計算ソフト。Webアプリのためインターネットに接続することで利用できます。チャートやグラフの作成のほか、シートを他のユーザーと共有したり、同時に作業を進めることも可能です。

Google Apps Script

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

タイムアウト

タイムアウトはイベント発生から完了までに掛かる経過時間に対する一定の待ち時間を指します。また、特定の時間が経過された場合に発生するイベントを指すこともあります。

2グッド

0クリップ

投稿2021/06/04 08:05

編集2021/06/04 08:23

前提・実現したいこと

GASを使用してメールを送信するスクリプトを作成しています。
メール本文にあたる文章を作成しており、デバッグを掛けたところ、処理が進まなく(※)なりました。
本文内に問題があると思い、スクリプトを1行1行検査していたところ、特定の文章のところで引っかかっていることが分かりました。
なぜ、この部分で引っかかるのかが分からず、今回問い合わせをさせていただいた次第です。

文字列の部分しか触っていないため、原因の特定が出来ませんでした。

※デバッグで処理中を表示しているぐるぐるマークが表示されてタイムアウトしました

発生している問題・エラーメッセージ

エラーメッセージは表示されません
デバッグにて処理が進まなくなりました。
後述しますが、該当する行を削除すると処理が進みました。

該当のソースコード

スクリプト:GAS
■関数の呼び出し元
var body = makeBody(participation, applicant, receiptNumber,price);

■呼び出し先の関数
function makeBody(participation, applicant, receiptNumber, price) {
var body = ""

  • applicant + "様\n\n"
  • "「〇〇〇」にてお席の確認ができましたので、ご連絡いたします。\n"
  • "以下の内容をご確認の上、下記口座へのお振込みをお願いいたします。\n"
  • "~~~~~"
  • "\n\n";

return body;
}

※ + "~~~~~" には他に幾つか行が存在しており、そこで変数を使用しています。関係ないと思い伏せました

試したこと

※変数の取得や受け渡しは問題なく出来ております。

1.「 + "以下の内容をご確認の上、下記口座へのお振込みをお願いいたします。\n"」
上記の行を削除すると問題なく処理が進みました。
2.「以下の内容をご確認の上、」の部分だけを削除しても、問題なく処理が進みました
3.「下記口座へのお振込みをお願いいたします。」の部分だけを削除しても、問題なく処理が進みました。
4.「\n」の部分を削除すると、今回問題となった現象(デバッグが進まない)のままでした。
5.「確認の上、下記口座へのお」という任意の箇所を削除してみても、問題なく処理が進みました。

補足情報(FW/ツールのバージョンなど)

スプレッドシートのスクリプトエディタを使用しております。

Cu_coin, sakaimo👍を押しています

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

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

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

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

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

guest

回答1

0

ベストアンサー

いろいろ試しましたが、少なくとも+でつないだ結果2バイト文字(1バイト文字は2つで2バイト文字1つと数える)が67個以上の場合、デバッガが復帰しないようです。
ただしいくつか反例もあります。
「\n」の数や位置も関係しているようですが、明確な規則性はわかりませんでした。

おそらくデバッガのバグだと思います。

回避するには文字列を少なくするしかないような気がします。

通らない(デバッグが進まないパターン)

// 2バイト文字が67個以上連続する body = "1234567890123456789012345678901234567890123456789012345678901234567" // +で連結した結果、2バイト文字が67個以上連続する body = "1234567890123456789" + "012345678901234567890123456789012345678901234567" // 2バイト文字が67個以上(ただし、 2バイト文字が67個+1バイト文字が1個は通る) body = "\n\n1234567890123456789012345678901234567890123456789012345678901234567" // 1バイト文字であっても2個以上は1つの2バイト文字として計算される? body = "12345678901234567890123456789012345678901234567890123456789012345aa67" // 2バイト文字が67個+1バイト文字が2個以上だと通らない body = "1234567890123456789a012345678901234567890123456789012345678a901234567" // 1バイト文字であっても2個連続する場合は無視されて。2バイト文字が途切れたことにならない。(ただし反例あり。下記) body = "12345678901234567890123456789012345678901234567890123456789012345\n\n67" // 変数を分けても、計算結果がアウトに該当する場合アウト。 body1 = "1234567890123456789" body2 = "012345678901234567890123456789012345678901234567" body = body1 + body2 //<===ここでデバッガが無限ループ。

  

通る(デバッグが進むパターン)

// 2バイト文字が67個未満 body = "123456789012345678901234567890123456789012345678901234567890123456" // 2バイト文字が67個+1バイト文字が1個の場合は通る。 body = "12345678901234567890123456789012345678901234567890123456a78901234567" body = "12345678901234567890123456789012345678901234567890123456\n\n7890123456" body = "123456789012345678901234567890123456789012345678901234567890123456\n\n" // 謎。最後から2番目が「\n\n」の場合は通る。(区切り文字扱い?) body = "123456789012345678901234567890123456789012345678901234567890123456\n\n7"

投稿2021/06/04 13:47

編集2021/06/04 13:48
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

experiment

2021/06/04 14:43

ご検証いただきありがとうございます。 省略した行に該当行よりも多い文字数の所もあったり、問題の行を別の行に移したらデバッグが進む、といったこともありました。 ご検証いただいた内容も考えると、デバッガのバグというのが現実的な気がしてきました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問