Actions

ExpressionScript How-tos/ja: Difference between revisions

From LimeSurvey Manual

(Created page with "</td><td><b>ここでは、ツールチップが表示される一般的なエラーの例を示します。</b><br>宣言する前に変数を使用する: <span style="back...")
No edit summary
 
(93 intermediate revisions by 3 users not shown)
Line 1: Line 1:
<languages />
<languages />
__TOC__
__TOC__


Line 8: Line 6:




ここまで、LimeSurveyマニュアルを読めば、[[Expression_Manager_-_presentation/ja#Key_Definitions|LimeSurveyの用語]]を理解したことになります。次に、アンケートを強化する方法として、式と変数について説明しました。次の段階では、[[Expression_Manager_-_presentation/ja#Syntax Highlighting|構文強調表示]]の種類と意味を扱い、構文エラーを修正する方法を学習しました。
LimeSurveyのマニュアルを理解しているならば、[[ExpressionScript - Presentation/ja#.E4.B8.BB.E3.81.AA.E5.AE.9A.E7.BE.A9|LimeSurvey特有の用語]]を理解していることになります。続いて、アンケートを強化する方法として、式と変数について説明しました。さらに、[[ExpressionScript - Presentation/ja#.E6.A7.8B.E6.96.87.E3.83.8F.E3.82.A4.E3.83.A9.E3.82.A4.E3.83.88|構文の強調表示]]の種類と意味を取り扱い、構文エラーを修正する方法を学びました。


これらの基本的な概念をカバーしながら、事例を使ってLimeSurvey内で式がどのように機能するかを説明します。
これらの基本的な概念が理解できたら、LimeSurvey内で式がどのように機能するか、例を使って見ていきましょう。




Line 16: Line 14:




次のスクリーンショットは例を示していますが、ツールチップの値は表示されません。ツールチップは、太字の色の上にマウスを置くたびに表示される有益なボックスです。
次のスクリーンショットは実際の表示例ですが、ツールチップの値は表示されません。ツールチップは、太字の色の上にマウスを置くたびに表示される便利なボックスです。


この構文強調表示によって、複雑なものでも簡単に正しい式を作成することができます。 LimeSurveyチームは式ビルダーGUIの開発を計画していますが、既存の構文強調表示を使用すれば、タイプミスをすばやく特定し修正することができます。また、ツールチップを使用して、式が正しいかを検証することもできます(たとえば、目的の変数を選択したかを確認するなど)。
この構文強調表示によって、複雑なものであっても簡単に正しい式を作成することができます。LimeSurveyチームは、式ビルダーGUIの開発を計画していますが、すでに提供されている構文強調表示を使用すれば、タイプミスをすばやく特定し修正することができます。また、ツールチップを使って、式が正しいかを検証することもできます(目的の変数を選択したかを確認するなど)。


それぞれの例では、3つの列があります。
それぞれの例には、3つの列があります。
#Source - これは、LimeSurveyの質問フィールドに入力する生のテキストです。
#Source - LimeSurveyの質問フィールドに入力する生のテキストです
#Pretty Print - これは、入力した内容を構文強調表示したものです。
#Pretty Print - 入力したものと同等ですが、構文が強調表示されています
#*式は、黄褐色の背景で示されていますが、中括弧では囲まれていません。
#*この強調表示では、式は黄褐色の背景で表示されますが、中括弧で囲まれていません。
#*EMは再帰的置換をサポートしているため、強調表示の中で中括弧を表示すると構文エラーが発生する可能性があるので注意してください。
#*EMは再帰的な置換をサポートしているため、強調表示に中括弧を表示すると構文エラーが発生します
#Result - これは、EMがソースを処理して生成される結果です。
#Result - EMがソースを処理して生成した結果です
#*適切に置き換えられるものはすべて
#*適切に置換できるものすべて
#*エラーのある式はインラインで構文が強調表示されます。エラーは赤い線で囲まれています。
#*エラーのある式はインラインで表示され、構文が強調表示されます。 エラーは赤い線のボックスで囲まれます。




Line 34: Line 32:


適切な構文の例を以下に示します。
適切な構文の例を以下に示します。
#値: 既知の変数が現在のページに設定されているかどうかに応じて色分けされていることを示します。旧式のINSERTANS:xxxxは独自のカラーコーディングスタイルを持っています。
#値: 現在のページでセットされているかに応じて既知の変数が色付きで表示されます。旧式のINSERTANS:xxxxは独自の色分けスタイルになります。
#質問属性: ドット記法により質問のプロパティにアクセスできることを示します。
#質問の属性: ドット表記により質問の属性にアクセスできます。
#数学: 基本的な計算と複雑な計算がサポートされていることを示します。
#数学: 基本的な計算だけでなく、複雑な計算もサポートします。
#テキスト処理: テキスト処理機能が利用できることを示します。
#テキスト処理: テキスト処理関数の例
#日付: 利用可能な日付関連関数のうちの2つを示します。
#日付: 日付関連の関数の例
#条件: if()関数の使用法を示します。入れ子にすることもできます。
#条件: if()の使い方。入れ子にすることも可能。
#文言調整された段落: 先行する値に基づいてレポートをカスタマイズすることができます。
#文言調整: 先行する質問の値に応じてレポートをカスタマイズできます。
#文字列内のEM処理: 文字列内で置換を実行できることを示します。この例では置換により画像名を生成しています。
#文字列中のES処理: 文字列の一部を置換できます。この例では画像の名前を変えることができます。
#EMは中括弧を処理しない: 中括弧がエスケープされているか、式と中括弧の間に空白がある場合、EMはその式を無視します。
#ESは次のような中括弧を処理しません: 中括弧がエスケープされている場合、式と中括弧の間に空白がある場合、ESは式を無視します。




[[File:em-syntax-highlighting-1-v2.jpg]]
<center>[[File:em-syntax-highlighting-1-v2.jpg]]</center>




Line 51: Line 49:




EM式を入力する際の一般的なエラーの例を次に示します。ツールチップは追加的な情報を提供します。
ES式を入力する際の一般的なエラーの例を次に示します。ツールチップによって追加情報が提供されます。
#インラインJavascriptで中括弧の後に空白を追加していない。
#中括弧の後にスペースを追加し忘れたインラインJavascript
#*EMは、中括弧の直後に"document.write"が現れると式であると考えるため、"document"と"write"がそれぞれ未定義の変数、関数となり、赤色のボックスで表示される。
#*"document.write"が中括弧の直後に表示されると、EMはそれを式と見なし、"document"と"write"はそれぞれ未定義の変数と関数と認識され、赤いボックス内に表示されます。
#未知/間違った変数、関数、演算子
#不明、またはスペルミスのある変数、関数、演算子
#*ここでは、"sex"(性別)の代わりに"gender"という変数名を使用していることを忘れていますが、EMはそのエラーをキャッチします。また、'++'についても、サポートしていない演算子として赤色のボックスで表示されます。
#*ここでは、"sex"ではなく"gender"という変数名を誤って使用していても、EMはそのエラーをキャッチします。また、'++'はサポートされている演算子ではないため、赤いボックスで囲まれます。
#eqの代わりに=を使っていたり、代入を行っている場合の警告
#eqの代わりに=を使用したり、値を代入すると警告されます。
#*'='と'+='は黒ではなく赤いテキストで表示されています。文字の上にマウスを置くと、値を代入しようとしているという警告が表示されます。
#*'='と'+='は、黒ではなく赤のテキストで表示されています。その上にマウスカーソルを合わせると、値を代入している旨の警告が表示されます。
#関数の引数の数が間違っている
#関数の引数の数の誤り
#*if()は3つの引数を取りますが、4つ与えられているので、赤いボックスの "if"にカーソルを合わせるとエラーが説明され、サポートされている構文が表示されます。
#*if()は3つの引数を受け取りますが、4つ与えられているため、赤い枠で囲まれた"if"にカーソルを合わせると、エラーの説明とサポートされている構文が表示されます。
#*sum()は引数の数に制限はありませんが、閉じ括弧の前にコンマがついているので、赤色のボックスで表示されます。
#*sum()は引数の数に制限はありませんが、閉じ括弧の前にコンマがあるため、赤いボックスで囲まれています。
#括弧の不一致
#括弧の不一致
#*式を書く時の最も一般的なエラーの一つです。
#*これは、式を記述する際の最も一般的なエラーの1つです。
#*閉じ括弧が欠落している例を2つ、閉じ括弧が多すぎる例を1つを示しています。
#*ここでは、閉じ括弧が不足している例2つと、閉じ括弧が多すぎる例を示しています。
#サポートされていない構文
#サポートされていない構文
#*EMがサポートしていない演算子または句読点を使用すると、赤いボックスになります。
#*ESがサポートしていない演算子や記号を使用すると、赤いボックスで囲まれます。
#無効な代入
#無効な代入
#*変数は値が書き換え可能なものもありますが、読み取り専用のものもあります。
#*変数には、読み書き可能で値を変更できるもの、読み取り専用のものがあります。
#*読み取り専用変数の値を変更しようとしても実行できません。EMは赤枠で囲みます。
#*読み取り専用変数の値を変更しようとしてもできません。この場合、EMは赤いボックスで表示します。
#*式または文字列に値を代入しようとしてもエラーが発生します。
#*式または文字列に値を代入しようとしてもエラーが発生します。




[[File:em-syntax-highlighting-errors-v2.jpg]]
<center>[[File:em-syntax-highlighting-errors-v2.jpg]]</center>




==アクティブなツールチップを使用した構文ハイライトの"ライブ"の例==
==アクティブなツールチップを使用した構文強調表示の"実際に動く"==




Line 81: Line 79:
  <tr><th>ソース</th><th>整形表示</th><th>結果</th></tr><tr><td><b>ここでは、ツールチップを使ったOK構文の例を示します。</b><br>こんにちは、{if(gender=='M','Mr.','Mrs.')} {surname}。現在、{date('g:i a',time())}です。数を合わせると{sum(numPets,numKids)}になるあなたの子供とペットがどこにいるかわかりますか。
  <tr><th>ソース</th><th>整形表示</th><th>結果</th></tr><tr><td><b>ここでは、ツールチップを使ったOK構文の例を示します。</b><br>こんにちは、{if(gender=='M','Mr.','Mrs.')} {surname}。現在、{date('g:i a',time())}です。数を合わせると{sum(numPets,numKids)}になるあなたの子供とペットがどこにいるかわかりますか。


</td><td><b>ここでは、ツールチップを使ったOK構文の例を示します。</b><br>こんにちは、<span style="background-color: #eee8aa;"><span title="Excel-style if(test,result_if_true,result_if_false); if(test,result_if_true,result_if_false)" style="color: blue; font-weight: bold">if</span>(<span title="[java61764X1X5][G:2][Q:110]: What is your gender (male/female)?; value=M" style="color: green; font-weight: bold">gender</span> == <span title="" style="color: gray">'M'</span>,<span title="" style="color: gray">'Mr.'</span>,<span title="" style="color: gray">'Mrs.'</span>)</span> <span style="background-color: #eee8aa;"><span title="[java61764X1X1][G:1][Q:20]: What is your last/surname?; value=Smith" style="color: green; font-weight: bold">surname</span></span>。現在、<span style="background-color: #eee8aa;"><span title="Format a local date/time; string date(format [, timestamp=time()])" style="color: blue; font-weight: bold">date</span>(<span title="" style="color: gray">'g:i a'</span>,<span title="Return current UNIX timestamp; number time()" style="color: blue; font-weight: bold">time</span>())</span>です。数を合わせると<span style="background-color: #eee8aa;"><span title="Calculate the sum of values in an array; number sum(arg1, arg2, ... argN)" style="color: blue; font-weight: bold">sum</span>(<span title="[java61764X1X4][G:2][Q:50]: How many pets do you have?; value=1" style="color: maroon; font-weight: bold">numPets</span>,<span title="[java61764X1X3][G:2][Q:40]: How many kids do you have?; value=2" style="color: green; font-weight: bold">numKids</span>)</span>になるあなたの子供とペットがどこにいるかわかりますか。
</td><td><b>ここでは、ツールチップを使ったOK構文の例を示します。</b><br>こんにちは、<span style="background-color: #eee8aa;"><span title="Excelのようなif(test,result_if_true,result_if_false); if(test,result_if_true,result_if_false)" style="color: blue; font-weight: bold">if</span>(<span title="[java61764X1X5][G:2][Q:110]: 性別は、男性/女性どちらですか。; value=M" style="color: green; font-weight: bold">gender</span> == <span title="" style="color: gray">'M'</span>,<span title="" style="color: gray">'Mr.'</span>,<span title="" style="color: gray">'Mrs.'</span>)</span> <span style="background-color: #eee8aa;"><span title="[java61764X1X1][G:1][Q:20]: あなたの姓は何ですか。; value=Smith" style="color: green; font-weight: bold">surname</span></span>。現在、<span style="background-color: #eee8aa;"><span title="ローカルの日時を表示する; string date(format [, timestamp=time()])" style="color: blue; font-weight: bold">date</span>(<span title="" style="color: gray">'g:i a'</span>,<span title="現在のUNIXタイムスタンプを返す; number time()" style="color: blue; font-weight: bold">time</span>())</span>です。数を合わせると<span style="background-color: #eee8aa;"><span title="配列の中の値を合計する; number sum(arg1, arg2, ... argN)" style="color: blue; font-weight: bold">sum</span>(<span title="[java61764X1X4][G:2][Q:50]: ペットは何匹いますか。; value=1" style="color: maroon; font-weight: bold">numPets</span>,<span title="[java61764X1X3][G:2][Q:40]: 何人の子供がいますか。; value=2" style="color: green; font-weight: bold">numKids</span>)</span>になるあなたの子供とペットがどこにいるかわかりますか。


</td><td><b>ここでは、ツールチップを使ったOK構文の例を示します。</b><br>こんにちは、<span id="LEMtailor_Q_40_1">Mr.</span> <span id="LEMtailor_Q_40_2">Smith</span>。現在、6:07 amです。数を合わせると<span id="LEMtailor_Q_40_4">3</span>になるあなたの子供とペットがどこにいるかわかりますか。
</td><td><b>ここでは、ツールチップを使ったOK構文の例を示します。</b><br>こんにちは、<span id="LEMtailor_Q_40_1">Mr.</span> <span id="LEMtailor_Q_40_2">Smith</span>。現在、6:07 amです。数を合わせると<span id="LEMtailor_Q_40_4">3</span>になるあなたの子供とペットがどこにいるかわかりますか。
</td></tr>
</td></tr>
<tr><td><b>ここでは、ツールチップが表示される一般的なエラーの例を示します。</b><br>宣言する前に変数を使用する:  {notSetYet}<br>未知の関数:  {iff(numPets&gt;numKids,1,2)}<br>未知の変数: {sum(age,num_pets,numKids)}<br>過った # パラメーター: {sprintf()},{if(1,2)},{date()}<br>読み取り専用の変数への代入:{TOKEN:ATTRIBUTE_1+=10},{name='Sally'}<br>括弧の不一致: {pow(3,4},{(pow(3,4)},{pow(3,4))}
<tr><td><b>ここでは、一般的なエラーの例を使って、ツールチップを見ることができます。</b><br>宣言なしに使用された変数:  {notSetYet}<br>未知の関数:  {iff(numPets&gt;numKids,1,2)}<br>未知の変数: {sum(age,num_pets,numKids)}<br>引数の数の誤り: {sprintf()},{if(1,2)},{date()}<br>読み取り専用変数への代入:{TOKEN:ATTRIBUTE_1+=10},{name='Sally'}<br>括弧の不一致: {pow(3,4},{(pow(3,4)},{pow(3,4))}


</td><td><b>ここでは、ツールチップが表示される一般的なエラーの例を示します。</b><br>宣言する前に変数を使用する: <span style="background-color: #eee8aa;"><span title="This variable is not declared until a later page; Not a valid expression" style="border-style: solid; border-width: 2px; border-color: red;"><span title="This variable is not declared until a later page; Not a valid expression; [java61764X3X6][G:3][Q:200]: Who will win the next election?; value=?" style="color: #FF00FF ; font-weight: bold">notSetYet</span></span></span><br>未知の関数:  <span style="background-color: #eee8aa;"><span title="Undefined function" style="border-style: solid; border-width: 2px; border-color: red;"><span title="Undefined function" style="color: blue; font-weight: bold">iff</span></span>(<span title="[java61764X1X4][G:2][Q:50]: How many pets do you have?; value=1" style="color: maroon; font-weight: bold">numPets</span> &gt; <span title="[java61764X1X3][G:2][Q:40]: How many kids do you have?; value=2" style="color: green; font-weight: bold">numKids</span>,1,2)</span><br>未知の変数: <span style="background-color: #eee8aa;"><span title="Calculate the sum of values in an array; number sum(arg1, arg2, ... argN)" style="color: blue; font-weight: bold">sum</span>(<span title="[java61764X1X2][G:2][Q:30]: How old are you?; value=45" style="color: green; font-weight: bold">age</span>,<span title="Undefined variable" style="border-style: solid; border-width: 2px; border-color: red;"><span title="Undefined variable" style="color: red; font-weight: bold">num_pets</span></span>,<span title="[java61764X1X3][G:2][Q:40]: How many kids do you have?; value=2" style="color: green; font-weight: bold">numKids</span>)</span><br>誤った # パラメーター: <span style="background-color: #eee8aa;"><span title="Function must have at least 1 argument(s); Not a valid expression" style="border-style: solid; border-width: 2px; border-color: red;"><span title="Function must have at least 1 argument(s); Not a valid expression; Return a formatted string; string sprintf(format, arg1, arg2, ... argN)" style="color: blue; font-weight: bold">sprintf</span></span>()</span>,<span style="background-color: #eee8aa;"><span title="Function does not support that number of arguments2.  Function supports this many arguments, where -1=unlimited: 3; Not a valid expression" style="border-style: solid; border-width: 2px; border-color: red;"><span title="Function does not support that number of arguments2.  Function supports this many arguments, where -1=unlimited: 3; Not a valid expression; Excel-style if(test,result_if_true,result_if_false); if(test,result_if_true,result_if_false)" style="color: blue; font-weight: bold">if</span></span>(1,2)</span>,<span style="background-color: #eee8aa;"><span title="Function does not support that number of arguments0.  Function supports this many arguments, where -1=unlimited: 1,2; Not a valid expression" style="border-style: solid; border-width: 2px; border-color: red;"><span title="Function does not support that number of arguments0.  Function supports this many arguments, where -1=unlimited: 1,2; Not a valid expression; Format a local date/time; string date(format [, timestamp=time()])" style="color: blue; font-weight: bold">date</span></span>()</span><br>読み取り専用の変数への代入:<span style="background-color: #eee8aa;"><span title="The value of this variable can not be changed; Not a valid expression" style="border-style: solid; border-width: 2px; border-color: red;"><span title="The value of this variable can not be changed; Not a valid expression; ; value=worker" style="color: #996600; font-weight: bold">TOKEN:ATTRIBUTE_1</span></span><span title="Assigning a new value to a variable" style="color: red; font-weight: bold">+=</span>10</span>,<span style="background-color: #eee8aa;"><span title="The value of this variable can not be changed; Not a valid expression" style="border-style: solid; border-width: 2px; border-color: red;"><span title="The value of this variable can not be changed; Not a valid expression; [java61764X1X1][G:1][Q:10]: What is your first/given name?; value=Peter" style="color: green; font-weight: bold">name</span></span><span title="Assigning a new value to a variable" style="color: red; font-weight: bold">=</span><span title="" style="color: gray">'Sally'</span></span><br>括弧の不一致: <span style="background-color: #eee8aa;"><span title="Parentheses not balanced" style="border-style: solid; border-width: 2px; border-color: red;"><span title="Parentheses not balanced; Exponential expression; number pow(base, exp)" style="color: blue; font-weight: bold">pow</span></span>(3,4</span>,<span style="background-color: #eee8aa;"><span title="Parentheses not balanced" style="border-style: solid; border-width: 2px; border-color: red;">(</span><span title="Exponential expression; number pow(base, exp)" style="color: blue; font-weight: bold">pow</span>(3,4)</span>,<span style="background-color: #eee8aa;"><span title="Exponential expression; number pow(base, exp)" style="color: blue; font-weight: bold">pow</span>(3,4)<span title="Extra right parentheses detected" style="border-style: solid; border-width: 2px; border-color: red;">)</span></span>
</td><td><b>ここでは、一般的なエラーの例を使って、ツールチップを見ることができます。</b><br>宣言なしに使用された変数: <span style="background-color: #eee8aa;"><span title="この変数は後のページまで宣言されていません。;有効な式ではありません。" style="border-style: solid; border-width: 2px; border-color: red;"><span title="この変数は後のページまで宣言されていません。;有効な式ではありません。;[java61764X3X6][G:3][Q:200]: 次の選挙ではだれが当選するでしょうか。; value=?" style="color: #FF00FF ; font-weight: bold">notSetYet</span></span></span><br>未知の関数:  <span style="background-color: #eee8aa;"><span title="未知の関数" style="border-style: solid; border-width: 2px; border-color: red;"><span title="未知の関数" style="color: blue; font-weight: bold">iff</span></span>(<span title="[java61764X1X4][G:2][Q:50]: ペットは何匹いますか。; value=1" style="color: maroon; font-weight: bold">numPets</span> &gt; <span title="[java61764X1X3][G:2][Q:40]: 何人の子供がいますか。; value=2" style="color: green; font-weight: bold">numKids</span>,1,2)</span><br>未知の変数: <span style="background-color: #eee8aa;"><span title="配列の中の値を合計する; number sum(arg1, arg2, ... argN)" style="color: blue; font-weight: bold">sum</span>(<span title="[java61764X1X2][G:2][Q:30]: 何歳ですか。; value=45" style="color: green; font-weight: bold">age</span>,<span title="未知の変数" style="border-style: solid; border-width: 2px; border-color: red;"><span title="未知の変数" style="color: red; font-weight: bold">num_pets</span></span>,<span title="[java61764X1X3][G:2][Q:40]: 何人の子供がいますか。; value=2" style="color: green; font-weight: bold">numKids</span>)</span><br>引数の数の誤り: <span style="background-color: #eee8aa;"><span title="関数は少なくとも1つの引数が必要です。; 有効な式ではありません。" style="border-style: solid; border-width: 2px; border-color: red;"><span title="関数は少なくとも1つの引数が必要です。;有効な式ではありません。; フォーマットされた文字列を返す; string sprintf(format, arg1, arg2, ... argN)" style="color: blue; font-weight: bold">sprintf</span></span>()</span>,<span style="background-color: #eee8aa;"><span title="関数は次の個数の引数をサポートしていません2。関数がサポートする引数の数(-1は制限なし): 3; 有効な式ではありません。" style="border-style: solid; border-width: 2px; border-color: red;"><span title="関数は次の個数の引数をサポートしていません2。関数がサポートする引数の数(-1は制限なし): 3; 有効な式ではありません。; Excelのようなif(test,result_if_true,result_if_false); if(test,result_if_true,result_if_false)" style="color: blue; font-weight: bold">if</span></span>(1,2)</span>,<span style="background-color: #eee8aa;"><span title="関数は次の個数の引数をサポートしていません0。関数がサポートする引数の数(-1は制限なし): 1,2; 有効な式ではありません。" style="border-style: solid; border-width: 2px; border-color: red;"><span title="関数は次の個数の引数をサポートしていません0。関数がサポートする引数の数(-1は制限なし): 1,2; 有効な式ではありません。; ローカルの日付/時刻をフォーマットする; string date(format [, timestamp=time()])" style="color: blue; font-weight: bold">date</span></span>()</span><br>読み取り専用変数への代入:<span style="background-color: #eee8aa;"><span title="この変数の値は変更できません。; 有効な式ではありません。" style="border-style: solid; border-width: 2px; border-color: red;"><span title="この変数の値は変更できません。; 有効な式ではありません。; ; value=worker" style="color: #996600; font-weight: bold">TOKEN:ATTRIBUTE_1</span></span><span title="変数に新たな値を代入する" style="color: red; font-weight: bold">+=</span>10</span>,<span style="background-color: #eee8aa;"><span title="この変数の値は変更できません。; 有効な式ではありません。" style="border-style: solid; border-width: 2px; border-color: red;"><span title="この変数の値は変更できません。; 有効な式ではありません。; [java61764X1X1][G:1][Q:10]: あなたの名前は何ですか。; value=Peter" style="color: green; font-weight: bold">name</span></span><span title="変数に新たな値を代入する" style="color: red; font-weight: bold">=</span><span title="" style="color: gray">'Sally'</span></span><br>括弧の不一致: <span style="background-color: #eee8aa;"><span title="括弧の数が一致していません。" style="border-style: solid; border-width: 2px; border-color: red;"><span title="括弧の数が一致していません。; 指数関数; number pow(base, exp)" style="color: blue; font-weight: bold">pow</span></span>(3,4</span>,<span style="background-color: #eee8aa;"><span title="括弧の数が一致していません。" style="border-style: solid; border-width: 2px; border-color: red;">(</span><span title="指数関数; number pow(base, exp)" style="color: blue; font-weight: bold">pow</span>(3,4)</span>,<span style="background-color: #eee8aa;"><span title="指数関数; number pow(base, exp)" style="color: blue; font-weight: bold">pow</span>(3,4)<span title="余分な右括弧があります。" style="border-style: solid; border-width: 2px; border-color: red;">)</span></span>


</td><td><b>Here are common errors so you can see the tooltips</b><br>Variables used before they are declared:  <span id="LEMtailor_Q_40_5"><span style="background-color: #eee8aa;"><span title="This variable is not declared until a later page; Not a valid expression" style="border-style: solid; border-width: 2px; border-color: red;"><span title="This variable is not declared until a later page; Not a valid expression; [java61764X3X6][G:3][Q:200]: Who will win the next election?; value=?" style="color: #FF00FF ; font-weight: bold">notSetYet</span></span></span></span><br>Unknown Function:  <span style="background-color: #eee8aa;"><span title="Undefined function" style="border-style: solid; border-width: 2px; border-color: red;"><span title="Undefined function" style="color: blue; font-weight: bold">iff</span></span>(<span title="[java61764X1X4][G:2][Q:50]: How many pets do you have?; value=1" style="color: maroon; font-weight: bold">numPets</span> &gt; <span title="[java61764X1X3][G:2][Q:40]: How many kids do you have?; value=2" style="color: green; font-weight: bold">numKids</span>,1,2)</span><br>Unknown Variable: <span style="background-color: #eee8aa;"><span title="Calculate the sum of values in an array; number sum(arg1, arg2, ... argN)" style="color: blue; font-weight: bold">sum</span>(<span title="[java61764X1X2][G:2][Q:30]: How old are you?; value=45" style="color: green; font-weight: bold">age</span>,<span title="Undefined variable" style="border-style: solid; border-width: 2px; border-color: red;"><span title="Undefined variable" style="color: red; font-weight: bold">num_pets</span></span>,<span title="[java61764X1X3][G:2][Q:40]: How many kids do you have?; value=2" style="color: green; font-weight: bold">numKids</span>)</span><br>Wrong # parameters: <span style="background-color: #eee8aa;"><span title="Function must have at least 1 argument(s); Not a valid expression" style="border-style: solid; border-width: 2px; border-color: red;"><span title="Function must have at least 1 argument(s); Not a valid expression; Return a formatted string; string sprintf(format, arg1, arg2, ... argN)" style="color: blue; font-weight: bold">sprintf</span></span>()</span>,<span style="background-color: #eee8aa;"><span title="Function does not support that number of arguments2.  Function supports this many arguments, where -1=unlimited: 3; Not a valid expression" style="border-style: solid; border-width: 2px; border-color: red;"><span title="Function does not support that number of arguments2.  Function supports this many arguments, where -1=unlimited: 3; Not a valid expression; Excel-style if(test,result_if_true,result_if_false); if(test,result_if_true,result_if_false)" style="color: blue; font-weight: bold">if</span></span>(1,2)</span>,<span style="background-color: #eee8aa;"><span title="Function does not support that number of arguments0.  Function supports this many arguments, where -1=unlimited: 1,2; Not a valid expression" style="border-style: solid; border-width: 2px; border-color: red;"><span title="Function does not support that number of arguments0.  Function supports this many arguments, where -1=unlimited: 1,2; Not a valid expression; Format a local date/time; string date(format [, timestamp=time()])" style="color: blue; font-weight: bold">date</span></span>()</span><br>Assign read-only-vars:<span style="background-color: #eee8aa;"><span title="The value of this variable can not be changed; Not a valid expression" style="border-style: solid; border-width: 2px; border-color: red;"><span title="The value of this variable can not be changed; Not a valid expression; ; value=worker" style="color: #996600; font-weight: bold">TOKEN:ATTRIBUTE_1</span></span><span title="Assigning a new value to a variable" style="color: red; font-weight: bold">+=</span>10</span>,<span id="LEMtailor_Q_40_12"><span style="background-color: #eee8aa;"><span title="The value of this variable can not be changed; Not a valid expression" style="border-style: solid; border-width: 2px; border-color: red;"><span title="The value of this variable can not be changed; Not a valid expression; [java61764X1X1][G:1][Q:10]: What is your first/given name?; value=Peter" style="color: green; font-weight: bold">name</span></span><span title="Assigning a new value to a variable" style="color: red; font-weight: bold">=</span><span title="" style="color: gray">'Sally'</span></span></span><br>Unbalanced parentheses: <span style="background-color: #eee8aa;"><span title="Parentheses not balanced" style="border-style: solid; border-width: 2px; border-color: red;"><span title="Parentheses not balanced; Exponential expression; number pow(base, exp)" style="color: blue; font-weight: bold">pow</span></span>(3,4</span>,<span style="background-color: #eee8aa;"><span title="Parentheses not balanced" style="border-style: solid; border-width: 2px; border-color: red;">(</span><span title="Exponential expression; number pow(base, exp)" style="color: blue; font-weight: bold">pow</span>(3,4)</span>,<span style="background-color: #eee8aa;"><span title="Exponential expression; number pow(base, exp)" style="color: blue; font-weight: bold">pow</span>(3,4)<span title="Extra right parentheses detected" style="border-style: solid; border-width: 2px; border-color: red;">)</span></span>
</td><td><b>ここでは、一般的なエラーの例を使って、ツールチップを見ることができます。</b><br>宣言なしに使用された変数:  <span id="LEMtailor_Q_40_5"><span style="background-color: #eee8aa;"><span title="この変数は後のページまで宣言されていません。; 有効な式ではありません。" style="border-style: solid; border-width: 2px; border-color: red;"><span title="この変数は後のページまで宣言されていません。;有効な式ではありません。; [java61764X3X6][G:3][Q:200]: 次の選挙ではだれが当選するでしょうか。; value=?" style="color: #FF00FF ; font-weight: bold">notSetYet</span></span></span></span><br>未知の関数:  <span style="background-color: #eee8aa;"><span title="未知の関数" style="border-style: solid; border-width: 2px; border-color: red;"><span title="未知の関数" style="color: blue; font-weight: bold">iff</span></span>(<span title="[java61764X1X4][G:2][Q:50]: ペットは何匹いますか。; value=1" style="color: maroon; font-weight: bold">numPets</span> &gt; <span title="[java61764X1X3][G:2][Q:40]: 何人の子供がいますか。; value=2" style="color: green; font-weight: bold">numKids</span>,1,2)</span><br>未知の変数: <span style="background-color: #eee8aa;"><span title="配列の中の値を合計する; number sum(arg1, arg2, ... argN)" style="color: blue; font-weight: bold">sum</span>(<span title="[java61764X1X2][G:2][Q:30]: 何歳ですか。; value=45" style="color: green; font-weight: bold">age</span>,<span title="未知の変数" style="border-style: solid; border-width: 2px; border-color: red;"><span title="未知の変数" style="color: red; font-weight: bold">num_pets</span></span>,<span title="[java61764X1X3][G:2][Q:40]: 何人の子供がいますか。; value=2" style="color: green; font-weight: bold">numKids</span>)</span><br>引数の数の誤り: <span style="background-color: #eee8aa;"><span title="関数は少なくとも1つの引数が必要です。; 有効な式ではありません。" style="border-style: solid; border-width: 2px; border-color: red;"><span title="関数は少なくとも1つの引数が必要です。; 有効な式ではありません。; フォーマットされた文字列を返す; string sprintf(format, arg1, arg2, ... argN)" style="color: blue; font-weight: bold">sprintf</span></span>()</span>,<span style="background-color: #eee8aa;"><span title="関数は次の個数の引数をサポートしていません2。関数がサポートする引数の数(-1は制限なし): 3; 有効な式ではありません。" style="border-style: solid; border-width: 2px; border-color: red;"><span title="関数は次の個数の引数をサポートしていません2。関数がサポートする引数の数(-1は制限なし): 3; 有効な式ではありません。; Excelのようなif(test,result_if_true,result_if_false); if(test,result_if_true,result_if_false)" style="color: blue; font-weight: bold">if</span></span>(1,2)</span>,<span style="background-color: #eee8aa;"><span title="関数は次の個数の引数をサポートしていません0。関数がサポートする引数の数(-1は制限なし): 1,2; 有効な式ではありません。" style="border-style: solid; border-width: 2px; border-color: red;"><span title="関数は次の個数の引数をサポートしていません0。関数がサポートする引数の数(-1は制限なし): 1,2; 有効な式ではありません。; ローカルの日付/時刻をフォーマットする; string date(format [, timestamp=time()])" style="color: blue; font-weight: bold">date</span></span>()</span><br>読み取り専用変数への代入:<span style="background-color: #eee8aa;"><span title="この変数の値は変更できません。; 有効な式ではありません。" style="border-style: solid; border-width: 2px; border-color: red;"><span title="この変数の値は変更できません。; 有効な式ではありません。; ; value=worker" style="color: #996600; font-weight: bold">TOKEN:ATTRIBUTE_1</span></span><span title="変数に新たな値を代入する" style="color: red; font-weight: bold">+=</span>10</span>,<span id="LEMtailor_Q_40_12"><span style="background-color: #eee8aa;"><span title="この変数の値は変更できません。; 有効な式ではありません。" style="border-style: solid; border-width: 2px; border-color: red;"><span title="この変数の値は変更できません。; 有効な式ではありません。; [java61764X1X1][G:1][Q:10]: あなたの名前は何ですか。; value=Peter" style="color: green; font-weight: bold">name</span></span><span title="変数に新たな値を代入する" style="color: red; font-weight: bold">=</span><span title="" style="color: gray">'Sally'</span></span></span><br>括弧の不一致: <span style="background-color: #eee8aa;"><span title="括弧の数が一致していません。" style="border-style: solid; border-width: 2px; border-color: red;"><span title="括弧の数が一致していません。; 指数関数; number pow(base, exp)" style="color: blue; font-weight: bold">pow</span></span>(3,4</span>,<span style="background-color: #eee8aa;"><span title="括弧の数が一致していません。" style="border-style: solid; border-width: 2px; border-color: red;">(</span><span title="指数関数; number pow(base, exp)" style="color: blue; font-weight: bold">pow</span>(3,4)</span>,<span style="background-color: #eee8aa;"><span title="指数関数; number pow(base, exp)" style="color: blue; font-weight: bold">pow</span>(3,4)<span title="余分な右括弧があります。" style="border-style: solid; border-width: 2px; border-color: red;">)</span></span>


</td></tr>
</td></tr>
<tr><td><b>Here is some of the unsupported syntax</b><br>No support for '++', '--', '%',';': {min(++age, --age,age % 2);}<br>Nor '|', '&amp;', '^': {(sum(2 | 3,3 &amp; 4,5 ^ 6)}}<br>Nor arrays: {name[2], name['mine']}
<tr><td><b>サポートされていない構文の例を示します。</b><br>サポートされていない'++''--''%'';': {min(++age, --age,age % 2);}<br>'|''&amp;''^': {(sum(2 | 3,3 &amp; 4,5 ^ 6)}}<br>配列: {name[2], name['mine']}
</td><td><b>Here is some of the unsupported syntax</b><br>No support for '++', '--', '%',';': <span style="background-color: #eee8aa;"><span title="Find lowest value; number min(arg1, arg2, ... argN)" style="color: blue; font-weight: bold">min</span>(<span title="Unsupported syntax" style="border-style: solid; border-width: 2px; border-color: red;"> ++ </span><span title="[java61764X1X2][G:2][Q:30]: How old are you?; value=45" style="color: green; font-weight: bold">age</span>,<span title="Unsupported syntax" style="border-style: solid; border-width: 2px; border-color: red;"> -- </span><span title="[java61764X1X2][G:2][Q:30]: How old are you?; value=45" style="color: green; font-weight: bold">age</span>,<span title="[java61764X1X2][G:2][Q:30]: How old are you?; value=45" style="color: green; font-weight: bold">age</span><span title="Unsupported syntax" style="border-style: solid; border-width: 2px; border-color: red;"> % </span>2)<span title="Unsupported syntax" style="border-style: solid; border-width: 2px; border-color: red;"> ; </span></span><br>Nor '|', '&amp;', '^': <span style="background-color: #eee8aa;">(<span title="Calculate the sum of values in an array; number sum(arg1, arg2, ... argN)" style="color: blue; font-weight: bold">sum</span>(2<span title="Unsupported syntax" style="border-style: solid; border-width: 2px; border-color: red;"> | </span>3,3<span title="Unsupported syntax" style="border-style: solid; border-width: 2px; border-color: red;"> &amp; </span>4,5<span title="Unsupported syntax" style="border-style: solid; border-width: 2px; border-color: red;"> ^ </span>6)</span>}<br>Nor arrays: <span style="background-color: #eee8aa;"><span title="[java61764X1X1][G:1][Q:10]: What is your first/given name?; value=Peter" style="color: green; font-weight: bold">name</span><span title="Unsupported syntax" style="border-style: solid; border-width: 2px; border-color: red;"> [ </span>2<span title="Unsupported syntax" style="border-style: solid; border-width: 2px; border-color: red;"> ] </span>,<span title="[java61764X1X1][G:1][Q:10]: What is your first/given name?; value=Peter" style="color: green; font-weight: bold">name</span><span title="Unsupported syntax" style="border-style: solid; border-width: 2px; border-color: red;"> [ </span><span title="" style="color: gray">'mine'</span><span title="Unsupported syntax" style="border-style: solid; border-width: 2px; border-color: red;"> ] </span></span>
</td><td><b>サポートされていない構文の例を示します。</b><br>サポートされていない'++''--''%'';': <span style="background-color: #eee8aa;"><span title="最小値を探す; number min(arg1, arg2, ... argN)" style="color: blue; font-weight: bold">min</span>(<span title="サポートされていない構文" style="border-style: solid; border-width: 2px; border-color: red;"> ++ </span><span title="[java61764X1X2][G:2][Q:30]: 何歳ですか。; value=45" style="color: green; font-weight: bold">age</span>,<span title="サポートされていない構文" style="border-style: solid; border-width: 2px; border-color: red;"> -- </span><span title="[java61764X1X2][G:2][Q:30]: 何歳ですか。; value=45" style="color: green; font-weight: bold">age</span>,<span title="[java61764X1X2][G:2][Q:30]: 何歳ですか。; value=45" style="color: green; font-weight: bold">age</span><span title="サポートされていない構文" style="border-style: solid; border-width: 2px; border-color: red;"> % </span>2)<span title="サポートされていない構文" style="border-style: solid; border-width: 2px; border-color: red;"> ; </span></span><br>'|''&amp;''^': <span style="background-color: #eee8aa;">(<span title="配列の中の値を合計する; number sum(arg1, arg2, ... argN)" style="color: blue; font-weight: bold">sum</span>(2<span title="サポートされていない構文" style="border-style: solid; border-width: 2px; border-color: red;"> | </span>3,3<span title="サポートされていない構文" style="border-style: solid; border-width: 2px; border-color: red;"> &amp; </span>4,5<span title="サポートされていない構文" style="border-style: solid; border-width: 2px; border-color: red;"> ^ </span>6)</span>}<br>配列: <span style="background-color: #eee8aa;"><span title="[java61764X1X1][G:1][Q:10]: あなたの名前は何ですか。; value=Peter" style="color: green; font-weight: bold">name</span><span title="サポートされていない構文" style="border-style: solid; border-width: 2px; border-color: red;"> [ </span>2<span title="サポートされていない構文" style="border-style: solid; border-width: 2px; border-color: red;"> ] </span>,<span title="[java61764X1X1][G:1][Q:10]: あなたの名前は何ですか。; value=Peter" style="color: green; font-weight: bold">name</span><span title="サポートされていない構文" style="border-style: solid; border-width: 2px; border-color: red;"> [ </span><span title="" style="color: gray">'mine'</span><span title="サポートされていない構文" style="border-style: solid; border-width: 2px; border-color: red;"> ] </span></span>


</td><td><b>Here is some of the unsupported syntax</b><br>No support for '++', '--', '%',';': <span style="background-color: #eee8aa;"><span title="Find lowest value; number min(arg1, arg2, ... argN)" style="color: blue; font-weight: bold">min</span>(<span title="Unsupported syntax" style="border-style: solid; border-width: 2px; border-color: red;"> ++ </span><span title="[java61764X1X2][G:2][Q:30]: How old are you?; value=45" style="color: green; font-weight: bold">age</span>,<span title="Unsupported syntax" style="border-style: solid; border-width: 2px; border-color: red;"> -- </span><span title="[java61764X1X2][G:2][Q:30]: How old are you?; value=45" style="color: green; font-weight: bold">age</span>,<span title="[java61764X1X2][G:2][Q:30]: How old are you?; value=45" style="color: green; font-weight: bold">age</span><span title="Unsupported syntax" style="border-style: solid; border-width: 2px; border-color: red;"> % </span>2)<span title="Unsupported syntax" style="border-style: solid; border-width: 2px; border-color: red;"> ; </span></span><br>Nor '|', '&amp;', '^': <span style="background-color: #eee8aa;">(<span title="Calculate the sum of values in an array; number sum(arg1, arg2, ... argN)" style="color: blue; font-weight: bold">sum</span>(2<span title="Unsupported syntax" style="border-style: solid; border-width: 2px; border-color: red;"> | </span>3,3<span title="Unsupported syntax" style="border-style: solid; border-width: 2px; border-color: red;"> &amp; </span>4,5<span title="Unsupported syntax" style="border-style: solid; border-width: 2px; border-color: red;"> ^ </span>6)</span>}<br>Nor arrays: <span style="background-color: #eee8aa;"><span title="[java61764X1X1][G:1][Q:10]: What is your first/given name?; value=Peter" style="color: green; font-weight: bold">name</span><span title="Unsupported syntax" style="border-style: solid; border-width: 2px; border-color: red;"> [ </span>2<span title="Unsupported syntax" style="border-style: solid; border-width: 2px; border-color: red;"> ] </span>,<span title="[java61764X1X1][G:1][Q:10]: What is your first/given name?; value=Peter" style="color: green; font-weight: bold">name</span><span title="Unsupported syntax" style="border-style: solid; border-width: 2px; border-color: red;"> [ </span><span title="" style="color: gray">'mine'</span><span title="Unsupported syntax" style="border-style: solid; border-width: 2px; border-color: red;"> ] </span></span>
</td><td><b>サポートされていない構文の例を示します。</b><br>サポートされていない'++''--''%'';': <span style="background-color: #eee8aa;"><span title="最小値を探す; number min(arg1, arg2, ... argN)" style="color: blue; font-weight: bold">min</span>(<span title="サポートされていない構文" style="border-style: solid; border-width: 2px; border-color: red;"> ++ </span><span title="[java61764X1X2][G:2][Q:30]: 何歳ですか。; value=45" style="color: green; font-weight: bold">age</span>,<span title="サポートされていない構文" style="border-style: solid; border-width: 2px; border-color: red;"> -- </span><span title="[java61764X1X2][G:2][Q:30]: 何歳ですか。; value=45" style="color: green; font-weight: bold">age</span>,<span title="[java61764X1X2][G:2][Q:30]: 何歳ですか。; value=45" style="color: green; font-weight: bold">age</span><span title="サポートされていない構文" style="border-style: solid; border-width: 2px; border-color: red;"> % </span>2)<span title="サポートされていない構文" style="border-style: solid; border-width: 2px; border-color: red;"> ; </span></span><br>'|''&amp;''^': <span style="background-color: #eee8aa;">(<span title="配列の中の値を合計する; number sum(arg1, arg2, ... argN)" style="color: blue; font-weight: bold">sum</span>(2<span title="サポートされていない構文" style="border-style: solid; border-width: 2px; border-color: red;"> | </span>3,3<span title="サポートされていない構文" style="border-style: solid; border-width: 2px; border-color: red;"> &amp; </span>4,5<span title="サポートされていない構文" style="border-style: solid; border-width: 2px; border-color: red;"> ^ </span>6)</span>}<br>配列: <span style="background-color: #eee8aa;"><span title="[java61764X1X1][G:1][Q:10]: あなたの名前は何ですか。; value=Peter" style="color: green; font-weight: bold">name</span><span title="サポートされていない構文" style="border-style: solid; border-width: 2px; border-color: red;"> [ </span>2<span title="サポートされていない構文" style="border-style: solid; border-width: 2px; border-color: red;"> ] </span>,<span title="[java61764X1X1][G:1][Q:10]: あなたの名前は何ですか。; value=Peter" style="color: green; font-weight: bold">name</span><span title="サポートされていない構文" style="border-style: solid; border-width: 2px; border-color: red;"> [ </span><span title="" style="color: gray">'mine'</span><span title="サポートされていない構文" style="border-style: solid; border-width: 2px; border-color: red;"> ] </span></span>


</td></tr>
</td></tr>
Line 101: Line 99:




=テーラリングの例({INSERTANS:xxx}の拡張)=
=文言調整の例({INSERTANS:xxx}の拡張)=




Line 109: Line 107:
'Mr.'か'Mrs.'を使い分けるにはif()関数を使用します。
'Mr.'か'Mrs.'を使い分けるにはif()関数を使用します。


構文は、if(test,do_if_true,do_if_false)です。
構文は、if(test,do_if_true,do_if_false)となります。


{|
{|
Line 116: Line 114:
|1||gender||性別は?||性別
|1||gender||性別は?||性別
|-
|-
|2||example1||Dear {if(gender=='M','Mr.','Mrs.')} Smith, ...||テキスト表示
|2||example1||Dear {if(gender=='M','Mr.','Mrs.')} Smith, ...||自由回答(長い)
|-
|
|}
|}




[[File:em-tailoring-q-ex1.jpg]]
<center>[[File:em-tailoring-q-ex1.jpg]]</center>




使用ビュー:
以下で確認できるように、"性別"に対する回答として回答者が選択したものに合わせ、"Mr"または"Mrs"になるように調整されています。




[[File:em-tailoring-q-ex1-usage.jpg]]
<center>[[File:em-tailoring-q-ex1-usage.jpg]]
[[File:em-tailoring-q-ex2-usage.jpg]]</center>




Line 137: Line 134:




構文は、if(test,do_if_true,do_if_false)です。
構文は、"if(test,do_if_true,do_if_false)"となります。


{|
{|
|#||属性||値
|#||属性||値
|-
|-
|-||姓||Smith
|1||姓||Smith
|-
|-||メールアドレス||test@test.com
|-
|-
|-||ATTRIBUTE_2||M
|2||メールアドレス||test@test.com
|-
|-
|
|3||ATTRIBUTE_2||M
|}
|}




案内メールのテキスト:
案内メールのテキストは以下のとおりです。


<syntaxhighlight lang="php" enclose="div">
<syntaxhighlight lang="php">


Dear {if(ATTRIBUTE_2=='M','Mr','Mrs')} {LASTNAME},
Dear {if(ATTRIBUTE_2=='M','Mr','Mrs')} {LASTNAME},
Line 160: Line 155:
あなたはアンケートに招待されました。
あなたはアンケートに招待されました。


http:/...
https:/...


</syntaxhighlight>
</syntaxhighlight>




[[File:emEx1mail.jpg]]
<center>[[File:emEx1mail.jpg]]</center>




電子メールビュー:
電子メールは次のようになります。




[[File:emEx1mailview.jpg]]
<center>[[File:emEx1mailview.jpg]]</center>




=計算 / 評価の例=
=計算/評価の例=




Line 187: Line 182:
|#||コード||質問||タイプ||出現条件
|#||コード||質問||タイプ||出現条件
|-
|-
|1||numKids||子どもは何人いますか。||数値入力||1
|1||numKids||子供は何人いますか。||数値入力||1
|-
|2||kid1||一番目の子どもは何歳ですか。||数値入力||numKids >= 1
|-
|-
|3||kid2||二番目の子どもは何歳ですか。||数値入力||numKids >= 2
|2||kid1||1人目の子供は何歳ですか。||数値入力||numKids >= 1
|-
|-
|4||kid3||三番目の子どもは何歳ですか。||数値入力||numKids >= 3
|3||kid2||2人目の子供は何歳ですか。||数値入力||numKids >= 2
|-
|-
|5||kid4||四番目の子どもは何歳ですか。||数値入力||numKids >= 4
|4||kid3||3人目の子供は何歳ですか。||数値入力||numKids >= 3
|-
|-
|6||sumKidAges||{sum(kid1.NAOK,kid2,NAOK,kid3.NAOK,kid4.NAOK)}||||1
|5||kid4||4人目の子供は何歳ですか。||数値入力||numKids >= 4
|-
|-
|7||kidSummary||{numKids}人の{if(numKids==1,'子ども','子どもたち')}がいると回答しました。{if(numKids>1,implode(' ','上から',min(numKids,4),'人までの年齢の合計は',sumKidAges,'です。'),' ')}||テキスト表示||1
|6||sumKidAges||{sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK)}||||1
|-
|-
|
|7||kidSummary||{if(numKids==1,'子供','子供達')}が{numKids}人いると答えました。{if(numKids>1,implode(' ','最初から',min(numKids,4),'人の子供の年齢の合計は',sumKidAges,'です。'),' ')}||テキスト表示||1
|}
|}


Line 208: Line 201:




代表的な質問のスクリーンショットです。ご覧のとおり、EM構文では、文言調整を含んでいそうなすべてのフィールドが強調表示されます。ここでは、出現条件、式の質問タイプ、および質問内の置換の例を示します。ヘルプ、グループヘッダーの表示、ようこそメッセージ、および終了メッセージ内で置き換えることもできます。
以下は、代表的な質問のスクリーンショットです。ご覧のとおり、EM構文では、文言調整を含んでいそうなすべてのフィールドが強調表示されます。ここでは、出現条件、式の質問タイプ、および質問内の置換の例を示します。ヘルプ、グループヘッダーの表示、ようこそメッセージ、および終了メッセージ内で置き換えることもできます。


この質問では、出現条件は{numKids >= 2}であるため、回答者が少なくとも2人の子供がいると回答した場合にのみ表示されます。
次の例では、出現条件は{numKids >= 2}であるため、回答者が少なくとも2人の子供がいると回答した場合にのみ表示されます。




[[File:em-tailoring2-q-kid2.jpg]]
<center>[[File:em-tailoring2-q-kid2.jpg]]</center>




また、各変数に.NAOK接尾辞を使用することに注意してください。これは、EMが入れ子の出現条件を実現するためのものです。もし.NAOKをつけない場合持、4人の子供を持っていると回答した場合にのみ合計が計算されることになります(すべての変数が真の場合)。.NAOKを使用すると、変数のすべてまたは一部が偽であっても合計を計算することを意味します(すなわち"該当なし"(Not Applicable - NA)でも構わないということです)。
また、各変数に.NAOK接尾辞を使用することに注意してください。これは、EMが入れ子の出現条件を実現するためのものです。もし.NAOKをつけない場合、4人の子供を持っていると回答した場合にのみ合計が計算されることになります(すべての変数が真の場合)。.NAOKを使用すると、変数のすべてまたは一部が偽であっても合計を計算することを意味します(すなわち"該当なし"(Not Applicable - NA)でも構わないということです)。


ただし、.NAOK属性は変数がEMに渡されるかどうかにのみ影響します。その人が最初に3人の子供がいると回答し、それぞれの年齢を入力した後、気が変わり、2人であると答えた場合、3つの入力値の合計は必要ありません。次の例で確認してください。
ただし、.NAOK属性は変数がEMに渡されるかどうかにのみ影響します。例えば、その人が最初に3人の子供がいると回答し、それぞれの年齢を入力した後、気が変わり、2人であると答えた場合、3人目の子供はもはや無関係なので、3つの入力値の合計は必要ありません。




[[File:em-tailoring2-q-sumKidAges.jpg]]
<center>[[File:em-tailoring2-q-sumKidAges.jpg]]</center>




Line 227: Line 220:




[[File:em-tailoring2-q-kidSummary.jpg]]
<center>[[File:em-tailoring2-q-kidSummary.jpg]]</center>




Line 235: Line 228:




[[File:em-tailoring2-s-0kids.jpg]]
<center>[[File:em-tailoring2-s-0kids.jpg]]</center>




Line 241: Line 234:




[[File:em-tailoring2-s-1kid.jpg]]
<center>[[File:em-tailoring2-s-1kid.jpg]]</center>




Line 251: Line 244:




[[File:em-tailoring2-s-3kids.jpg]]
</center>[[File:em-tailoring2-s-3kids.jpg]]</center>




Line 257: Line 250:




[[File:em-tailoring2-s-3kids-sum.jpg]]
<center>[[File:em-tailoring2-s-3kids-sum.jpg]]</center>




Line 266: Line 259:




[[File:em-tailoring2-s-2kids-sum.jpg]]
<center>[[File:em-tailoring2-s-2kids-sum.jpg]]</center>




Line 278: Line 271:




==データを入力し、ページ内で入力されたものが動的に変化するレポートを表示する==
==データを入力し、同じページ内で入力されたものが動的に変化するレポートを表示する==




Line 288: Line 281:




[[File:em-on_page_report-usage-1.jpg]]
<center>[[File:em-on_page_report-usage-1.jpg]]</center>




回答を入力し始めると、文言調整プロセスも開始されます。
回答を入力し始めると、文言調整プロセスも開始されます。


[[File:em-on_page_report-usage-2.jpg]]
<center>[[File:em-on_page_report-usage-2.jpg]]</center>




Line 299: Line 292:




[[File:em-on_page_report-usage-3.jpg]]
<center>[[File:em-on_page_report-usage-3.jpg]]</center>


=一般的なデバッグの例=
=一般的なデバッグの例=
Line 315: Line 308:




[[File:em-nested-if-blank.jpg]]
<center>[[File:em-nested-if-blank.jpg]]</center>




Line 321: Line 314:




[[File:em-nested-if-name.jpg]]
<center>[[File:em-nested-if-name.jpg]]</center>




Line 327: Line 320:




[[File:em-nested-if-toddler.jpg]]
<center>[[File:em-nested-if-toddler.jpg]]</center>




Line 333: Line 326:




[[File:em-nested-if-teenager.jpg]]
<center>[[File:em-nested-if-teenager.jpg]]</center>




Line 339: Line 332:




[[File:em-nested-if-logic-file.jpg]]
<center>[[File:em-nested-if-logic-file.jpg]]</center>




質問を編集している最中、括弧の数を間違える可能性があります。括弧が少ない場合はこのようになります。
名前を入力すると、"Hello {name}."となります。




[[File:em-nested-if-missing-closing-paren.jpg]]
[[File:em-nested-if-name.jpg]]




Line 353: Line 346:




[[File:em-nestedd-if-extra-right-paren.jpg]]
<center>[[File:em-nestedd-if-extra-right-paren.jpg]]</center>




Line 359: Line 352:




[[File:em-nested-if-edit-screen.jpg]]
<center>[[File:em-nested-if-edit-screen.jpg]]</center>

Latest revision as of 02:27, 19 February 2022


これまでの説明の概略

LimeSurveyのマニュアルを理解しているならば、LimeSurvey特有の用語を理解していることになります。続いて、アンケートを強化する方法として、式と変数について説明しました。さらに、構文の強調表示の種類と意味を取り扱い、構文エラーを修正する方法を学びました。

これらの基本的な概念が理解できたら、LimeSurvey内で式がどのように機能するか、例を使って見ていきましょう。


構文強調表示

次のスクリーンショットは実際の表示例ですが、ツールチップの値は表示されません。ツールチップは、太字の色の上にマウスを置くたびに表示される便利なボックスです。

この構文強調表示によって、複雑なものであっても簡単に正しい式を作成することができます。LimeSurveyチームは、式ビルダーGUIの開発を計画していますが、すでに提供されている構文強調表示を使用すれば、タイプミスをすばやく特定し修正することができます。また、ツールチップを使って、式が正しいかを検証することもできます(目的の変数を選択したかを確認するなど)。

それぞれの例には、3つの列があります。

  1. Source - LimeSurveyの質問フィールドに入力する生のテキストです
  2. Pretty Print - 入力したものと同等ですが、構文が強調表示されています
    • この強調表示では、式は黄褐色の背景で表示されますが、中括弧で囲まれていません。
    • EMは再帰的な置換をサポートしているため、強調表示に中括弧を表示すると構文エラーが発生します
  3. Result - EMがソースを処理して生成した結果です
    • 適切に置換できるものすべて
    • エラーのある式はインラインで表示され、構文が強調表示されます。 エラーは赤い線のボックスで囲まれます。


適切な構文

適切な構文の例を以下に示します。

  1. 値: 現在のページでセットされているかに応じて既知の変数が色付きで表示されます。旧式のINSERTANS:xxxxは独自の色分けスタイルになります。
  2. 質問の属性: ドット表記により質問の属性にアクセスできます。
  3. 数学: 基本的な計算だけでなく、複雑な計算もサポートします。
  4. テキスト処理: テキスト処理関数の例
  5. 日付: 日付関連の関数の例
  6. 条件: if()の使い方。入れ子にすることも可能。
  7. 文言調整: 先行する質問の値に応じてレポートをカスタマイズできます。
  8. 文字列中のES処理: 文字列の一部を置換できます。この例では画像の名前を変えることができます。
  9. ESは次のような中括弧を処理しません: 中括弧がエスケープされている場合、式と中括弧の間に空白がある場合、ESは式を無視します。



エラーを含むEM構文

ES式を入力する際の一般的なエラーの例を次に示します。ツールチップによって追加情報が提供されます。

  1. 中括弧の後にスペースを追加し忘れたインラインJavascript
    • "document.write"が中括弧の直後に表示されると、EMはそれを式と見なし、"document"と"write"はそれぞれ未定義の変数と関数と認識され、赤いボックス内に表示されます。
  2. 不明、またはスペルミスのある変数、関数、演算子
    • ここでは、"sex"ではなく"gender"という変数名を誤って使用していても、EMはそのエラーをキャッチします。また、'++'はサポートされている演算子ではないため、赤いボックスで囲まれます。
  3. eqの代わりに=を使用したり、値を代入すると警告されます。
    • '='と'+='は、黒ではなく赤のテキストで表示されています。その上にマウスカーソルを合わせると、値を代入している旨の警告が表示されます。
  4. 関数の引数の数の誤り
    • if()は3つの引数を受け取りますが、4つ与えられているため、赤い枠で囲まれた"if"にカーソルを合わせると、エラーの説明とサポートされている構文が表示されます。
    • sum()は引数の数に制限はありませんが、閉じ括弧の前にコンマがあるため、赤いボックスで囲まれています。
  5. 括弧の不一致
    • これは、式を記述する際の最も一般的なエラーの1つです。
    • ここでは、閉じ括弧が不足している例2つと、閉じ括弧が多すぎる例を示しています。
  6. サポートされていない構文
    • ESがサポートしていない演算子や記号を使用すると、赤いボックスで囲まれます。
  7. 無効な代入
    • 変数には、読み書き可能で値を変更できるもの、読み取り専用のものがあります。
    • 読み取り専用変数の値を変更しようとしてもできません。この場合、EMは赤いボックスで表示します。
    • 式または文字列に値を代入しようとしてもエラーが発生します。



アクティブなツールチップを使用した構文強調表示の"実際に動く"例

ソース整形表示結果
ここでは、ツールチップを使ったOK構文の例を示します。
こんにちは、{if(gender=='M','Mr.','Mrs.')} {surname}。現在、{date('g:i a',time())}です。数を合わせると{sum(numPets,numKids)}になるあなたの子供とペットがどこにいるかわかりますか。
ここでは、ツールチップを使ったOK構文の例を示します。
こんにちは、if(gender == 'M','Mr.','Mrs.') surname。現在、date('g:i a',time())です。数を合わせるとsum(numPets,numKids)になるあなたの子供とペットがどこにいるかわかりますか。
ここでは、ツールチップを使ったOK構文の例を示します。
こんにちは、Mr. Smith。現在、6:07 amです。数を合わせると3になるあなたの子供とペットがどこにいるかわかりますか。
ここでは、一般的なエラーの例を使って、ツールチップを見ることができます。
宣言なしに使用された変数: {notSetYet}
未知の関数: {iff(numPets>numKids,1,2)}
未知の変数: {sum(age,num_pets,numKids)}
引数の数の誤り: {sprintf()},{if(1,2)},{date()}
読み取り専用変数への代入:{TOKEN:ATTRIBUTE_1+=10},{name='Sally'}
括弧の不一致: {pow(3,4},{(pow(3,4)},{pow(3,4))}
ここでは、一般的なエラーの例を使って、ツールチップを見ることができます。
宣言なしに使用された変数: notSetYet
未知の関数: iff(numPets > numKids,1,2)
未知の変数: sum(age,num_pets,numKids)
引数の数の誤り: sprintf(),if(1,2),date()
読み取り専用変数への代入:TOKEN:ATTRIBUTE_1+=10,name='Sally'
括弧の不一致: pow(3,4,(pow(3,4),pow(3,4))
ここでは、一般的なエラーの例を使って、ツールチップを見ることができます。
宣言なしに使用された変数: notSetYet
未知の関数: iff(numPets > numKids,1,2)
未知の変数: sum(age,num_pets,numKids)
引数の数の誤り: sprintf(),if(1,2),date()
読み取り専用変数への代入:TOKEN:ATTRIBUTE_1+=10,name='Sally'
括弧の不一致: pow(3,4,(pow(3,4),pow(3,4))
サポートされていない構文の例を示します。
サポートされていない'++'、'--'、'%'、';': {min(++age, --age,age % 2);}
'|'、'&'、'^': {(sum(2 | 3,3 & 4,5 ^ 6)}}
配列: {name[2], name['mine']}
サポートされていない構文の例を示します。
サポートされていない'++'、'--'、'%'、';': min( ++ age, -- age,age % 2) ;
'|'、'&'、'^': (sum(2 | 3,3 & 4,5 ^ 6)}
配列: name [ 2 ] ,name [ 'mine' ]
サポートされていない構文の例を示します。
サポートされていない'++'、'--'、'%'、';': min( ++ age, -- age,age % 2) ;
'|'、'&'、'^': (sum(2 | 3,3 & 4,5 ^ 6)}
配列: name [ 2 ] ,name [ 'mine' ]


文言調整の例({INSERTANS:xxx}の拡張)

"Dear {Mr}/{Mrs} Smith..."

'Mr.'か'Mrs.'を使い分けるにはif()関数を使用します。

構文は、if(test,do_if_true,do_if_false)となります。

# コード 質問 タイプ
1 gender 性別は? 性別
2 example1 Dear {if(gender=='M','Mr.','Mrs.')} Smith, ... 自由回答(長い)



以下で確認できるように、"性別"に対する回答として回答者が選択したものに合わせ、"Mr"または"Mrs"になるように調整されています。



案内メールにおける"Dear {Mr}/{Mrs} Smith..."

トークンテーブルの属性を使用して、上記の例を案内メールに使用できます。電子メールの中で'Mr.'または'Mrs.'を使い分けるにはif()関数を使用します。


構文は、"if(test,do_if_true,do_if_false)"となります。

# 属性
1 Smith
2 メールアドレス test@test.com
3 ATTRIBUTE_2 M


案内メールのテキストは以下のとおりです。

Dear {if(ATTRIBUTE_2=='M','Mr','Mrs')} {LASTNAME},

あなたはアンケートに招待されました。

https:/...



電子メールは次のようになります。



計算/評価の例

実行時に評価値を計算し、その結果をアンケートデータに格納する

この例では、EMのすべての機能(出現条件、文言調整、式の質問タイプなど)を使用しています。

また、これらのすべてがJavaScript対応であることも示しています。したがって、ページにこれらの機能を導入すると、回答者が回答を設定したり変更したりすると、動的に変化します。

# コード 質問 タイプ 出現条件
1 numKids 子供は何人いますか。 数値入力 1
2 kid1 1人目の子供は何歳ですか。 数値入力 numKids >= 1
3 kid2 2人目の子供は何歳ですか。 数値入力 numKids >= 2
4 kid3 3人目の子供は何歳ですか。 数値入力 numKids >= 3
5 kid4 4人目の子供は何歳ですか。 数値入力 numKids >= 4
6 sumKidAges {sum(kid1.NAOK,kid2.NAOK,kid3.NAOK,kid4.NAOK)} 1
7 kidSummary {if(numKids==1,'子供','子供達')}が{numKids}人いると答えました。{if(numKids>1,implode(' ','最初から',min(numKids,4),'人の子供の年齢の合計は',sumKidAges,'です。'),' ')} テキスト表示 1


この例をダウンロードするには、次のリンクをクリックしてください。 Assessments_survey_example


以下は、代表的な質問のスクリーンショットです。ご覧のとおり、EM構文では、文言調整を含んでいそうなすべてのフィールドが強調表示されます。ここでは、出現条件、式の質問タイプ、および質問内の置換の例を示します。ヘルプ、グループヘッダーの表示、ようこそメッセージ、および終了メッセージ内で置き換えることもできます。

次の例では、出現条件は{numKids >= 2}であるため、回答者が少なくとも2人の子供がいると回答した場合にのみ表示されます。



また、各変数に.NAOK接尾辞を使用することに注意してください。これは、EMが入れ子の出現条件を実現するためのものです。もし.NAOKをつけない場合、4人の子供を持っていると回答した場合にのみ合計が計算されることになります(すべての変数が真の場合)。.NAOKを使用すると、変数のすべてまたは一部が偽であっても合計を計算することを意味します(すなわち"該当なし"(Not Applicable - NA)でも構わないということです)。

ただし、.NAOK属性は変数がEMに渡されるかどうかにのみ影響します。例えば、その人が最初に3人の子供がいると回答し、それぞれの年齢を入力した後、気が変わり、2人であると答えた場合、3人目の子供はもはや無関係なので、3つの入力値の合計は必要ありません。



それぞれの式は、黄褐色の背景で色分けされています。ご覧の通り、3つの別々の式があります。最後の式には、2人以上の子供がいる場合にのみ表示されるメッセージが入っています。



ここでは、実際のアンケートのスクリーンショットを示します。

最初にページにアクセスすると、これが表示されます。"0人の子どもがいます"ではなく、"0人の子どもたちがいます"となっていることに注意してください。



子どもの数を1に変更すると、同じページ上にあってもこのように表示が即座に変わります。



文法は正しいものになっています。 "You have 1 child".

今度は、子供の数の値を3に変更し、即座に表示を変更します。

次の条件付きメッセージが下部に表示されていることに注目してください。"The sum of ages of your first 3 kids is 0.(最初の3人の子供の年齢の合計は0です。)"



今、子供の年齢を入力し、その年齢を合計して、このように表示させるとします。



値を入力するとスコアと表示が即座に更新されるため、これを使用して評価スコアの合計を表示することができます。


今度は、子供の数を2に変更します。表示は次のように変わります。



3番目の子供には5.5の値を入力しましたが、レポートには最初の2人の子供の値が合計されるようになりました。

その理由は、第3の値は出現条件を満たさなくなり、EMはそのような値を無視するからです。

子供の数を3に戻すと、再び5.5という値が見えます。これにより、ページに入力した情報を失うことはありません。

ただし、次または前のページに移動すると、出現条件を満たさない値はすべてセッション内およびデータベース内でNULLになります。もし、子供の数を2と設定したまま次のページに行き、もとのページに戻り、実は3人の子供がいると回答すると、5.5という年齢を見ることはありません。


データを入力し、同じページ内で入力されたものが動的に変化するレポートを表示する

この例は、LimeSurvey内の文言調整プロセスを示します。

この例をダウンロードするには、下記のリンクをクリックします。 動的に変化するアンケートの例

これは、ページが最初にどのように見えるかを示しています。どの都市に住んでいるのか尋ねる質問だけがあります。



回答を入力し始めると、文言調整プロセスも開始されます。


回答を入力すると、ページの下部にある表が更新され、回答コードと回答の値が表示されます。


一般的なデバッグの例

ネストされたif()ステートメント(条件付きロジック)

EMは、条件付きロジックまたは文言調整を実行できるよう、関数"if(test,do_if_true,do_if_false)"をサポートしています。この関数は、"if { } else if { } else { }"と同等の処理を行うために入れ子にすることができます。EMは、括弧の数が合わないかどうかを通知します(たとえば、右括弧が消えているなど)か、または余計な右括弧があるかどうかを通知します。長く入れ子になったif文を作成し、保存し、構文エラーをチェックし、見つかった場合は修正してください。以下の例を一緒にチェックしてみましょう。

以下の質問のグループは、ここからアクセスできます。Tailoring survey example.lsg


まず何も入力していないときは、単に"Hello."と表示されます。



名前を入力すると、"Hello {name}."となります。



年齢を入力すると、就学前の子供であるかどうかに応じて調整されたメッセージが届きます。



学齢児童、10代の人、または大人。ここに匿名希望の10代の人がいます。



ここにグループのロジックファイルがあります。 "if-based"の質問に見られるように、年齢に基づいて入れ子になったif文があります。



名前を入力すると、"Hello {name}."となります。



赤いボックスで囲まれた"if"という言葉にカーソルを合わせると、"括弧の数が合わない"と表示されます。この例では、"already an adult!"の後ろに4つの閉じ括弧があるはずですが、3つしかありません。

一方、余分な右かっこがある場合、次のように赤い枠で囲まれます。



実際に質問を編集しているときは、次のようになります。