まず、里々はできるだけ最新版を使用しよう。
併せてベースウェアも、最新版か、直近の安定バージョンにしておくと、それだけで解決する事もある。
辞書で以下のように記述すると、里々のバージョンを確認できる。

(里々のバージョン)

この記事を参考に、新しい里々に入れ替えよう。
他にも、少し高度になるがれしばを使うと挙動を追いやすくなる。




正しく動いてくれない&エラー系

書いたコードが動かない

とりあえず大雑把に以下の五点を疑ってみよう。

  1. タブ・スペース・全角・半角の間違い
    バグ筆頭。よくあるミスながら、慣れていても付きまとってくるイヤ〜なやつ。
    後述するようにコピペした時にも注意が必要。
    特にタブとスペース(全角・半角)は可視化できるエディタを使うことでかなり予防できるし、発見もしやすくなる。
    これらの発見に役立つツールには、サクラエディタ用の色分けファイルや、さとりすとなどがある。
     
  2. 条件式のミス
    原因が分かっても何がおかしいか分かりにくいイヤ〜なやつ。
    条件式のページを読んで、自分でざっくり計算してみよう。
    条件式に間違いがない場合は、()で呼び出す変数が存在しなかったり、記号が含まれたりした可能性を疑ってみよう。
    他にも、比較演算に初めて触れる人は、等しいを「==」と書くべきところを「=」と書いてしまったりする事がよくある。演算子一覧を見て再チェックしていこう。
     
  3. トーク名や変数名の重複
    被っていると大惨事。
    里々ではトークも単語群も変数も関数も言い方が違うだけで実体は同じもの。重複ダメ絶対。
    発見するには、サクラエディタ等のテキストエディタにだいたいついている機能、「Grep検索」(フォルダ内の全ファイルからの検索)で探してみよう。
     
  4. 変数への代入方法
    $に代入する時に【タブ】と「=」を間違えていないか確認してみよう。
    $変数【タブ】(変数)+1
    
    $変数=(変数)+1
    上の例だと、変数の中身は「+1+1+1+1・・・」なんてことになっていたりする。
    計算して欲しい場合は、下の例のように「=」を使うこと。
     
  5. 括弧の閉じ忘れ、全角半角の混在
    括弧の対応がおかしくないか調べてみよう。
    *例1
    :なんちゃって(ぉ
    
    *例2
    :(ユーザ)さーん?
    上の例は、どちらも誤動作を起こす。
    例1は見た通り括弧が閉じておらず、例2は が半角になっていて全角の括弧が閉じていない。このためこの行より先の全てが動作しなくなる
    ジャンプ先があるのにジャンプしてくれないとか、正しい記述なのに他が動かない時は、それより前の行にこういうミスがある可能性を疑ってみよう。
    例1のように意図的に括弧を文字として使いたい場合は、φを使うこと。
    例2のケースを発見するには、テキストエディタで半角の括弧を一文字ずつ検索してみよう。

コピペしたコードが動かない

ブラウザで表示して、そこからコピーしてきたコードには、書いた人の意図と違う余計な空白などが含まれることがある。
例えば行の前後に半角空白があったり、タブが空白になっていたり。

$変数	変数に入れる内容

>ジャンプ先	ジャンプ条件

などの場合、間に入るのはスペースではなくタブだ。確認してみよう。
また、【タブ】等と表記されてる場合もある。これもTabキーで置き換えよう。

関数が動かない

それはSAORIが提供する機能ではないだろうか。
satori_conf.txtに記述しないと使えない。
実行しても、関数名などがそのまま括弧つきでバルーンに出てくるような場合は間違い無い。

参考:SAORI

上記の設定は正しくしているのに意図した動作をしない場合、引数区切り問題に引っかかっている可能性もある。

「引数の個数が正しくありません。」と言われる

バルーン上にこの表示が出る場合、多くは内部関数外部関数/ssuの書き方の問題。

例えばwhen関数は「条件式・真の結果・偽の結果」と最大3つの引数を持つが、

(when,(乱数0〜3),真,偽,余計な部分)

などと書いてしまうとこの表示が出る。
もし正しく書いているように見えるのにこの表示が出る場合、引数区切り問題に引っかかっている可能性がある。
calc関数を始めとしたほとんどの関数は、when関数の「真」「偽」の部分と違い、まず中の括弧を先に展開する。
そのため、括弧の展開先まで考える必要があり、問題解決しにくい。

$変数1【タブ】3,
$変数2【タブ】4
(calc,(変数1)+(変数2))

(calc,3,+4)#引数が2つになってしまう

上記のcalc関数の例のように、括弧展開の結果、引数としたい部分に区切り字が含まれていないかを確認してみよう。

「式が計算できません」と言われる

計算式に何か問題があるようだ。
中身がない、何も定義されていない変数に計算をしようとしていないかチェック。
前述の「れしば.exe」を立ち上げて、どこでそれが発生しているのか確認してみよう。
他にも、計算式の中に演算に使える文字が混入していないかをチェックしておくと吉。

>ハラヘリー【タブ】(満腹度)<20

この例では(満腹度)が空っぽだとエラーになりやすい。
四則演算や比較演算問わず、satori_conf.txtで初期値を設定しておこう。

400 Bad Requestと言われる

たぶん、SAORIの引数が間違ってる。SAORIの説明書を読みなおそう。
または、SAORIの引数の扱いが問題かもしれない。
以下は何かのさおりにパスを渡そうとしている例。

(hogeSaori,C://SSP/testGhost/ghost/master)

ここで、「/」があることから、この引数を計算しようとしておかしな値を渡してしまう場合がある。
SAORI引数の計算を設定してみよう。

$SAORI引数の計算【タブ】無効
(hogeSaori,C://SSP/testGhost/ghost/master)
$SAORI引数の計算【タブ】自動

つつき反応が動かない

つつきに対して、辞書のOnMouseDoubleClickが実行される。
辞書内にない場合は、勝手に以下と同等の処理が補われる。

*OnMouseDoubleClick
>(R3)(R4)つつかれ
() 

反応がないということは、以下の可能性が高い。

  • OnMouseDoubleClickに別の記述がされている
  • ジャンプ先でエラーを起こしている

「>ジャンプ先【タブ】(条件式)」でジャンプしない

  • ジャンプ先が存在するか確認する。
  • 条件式が間違っていないか疑ってみる。
    • 順番に展開してみて、想定した挙動を示すか確認する。
    • 関数を条件式に使っているなら、引数や区切り文字がおかしくないか確認する。
  • 【タブ】が全角・半角スペース等になっていないか確認する。
  • replace.txtreplace_after.txtに【タブ】をタブ文字にする定義があるか確認する。
  • ジャンプより前の部分で括弧が閉じ忘れていないか確認する。
  • れしばを見てみる。
  • 他の人にも確認してもらう。

ランダムトークしなくなった

「$喋り間隔」に数値を設定しているのに自分からトークしない場合、シェルが画面外に出ていて、「見切れ」と判定されている可能性がある。
見える部分だけでなく、画像の透明な部分が少しはみ出しているだけでも見切れとされてしまう。
OnSatoriLoadなどで「$見切れてても喋る」を有効にしよう。
以下の1行をOnSatoriLoad末尾に記述するなどすると良い。

$見切れてても喋る【タブ】有効

作った機能が実行されたりされなかったりする

同じ記述が複数存在して、ランダムに選択されている可能性が高い。

*OnMouseDoubleClick
>(R3)(R4)つつかれ
() 

*OnMouseDoubleClick
>(R3)(R4)つつかれ

例えば上記のようにOnMouseDoubleClickが2つあると、つつかれた時にどちらかをランダムで実行することになる。
そのため、反応のない部位をつついたとき、ランダムトークしたりしなかったりする。
サクラエディタ等のテキストエディタにだいたいついてる機能、「Grep検索」(フォルダ内の全ファイルからの検索)で探してみよう。

SAORIが動かない

SAORIをじっくり読んでみよう。
satori_conf.txtの「@SAORI」への追加忘れに注意。

新しい機能がうまく動かない

ベースウェアがSSPの場合、ゴーストキャッシュという機能が影響しているかもしれない。
これは、起動したゴーストの情報をメモリ上に残し、次に呼ばれた時にファイルから読み込まず、メモリから読み込む機能。
ゴーストの起動が高速化する反面、「修正内容が反映されない」という問題がある。
主にゴーストの交代時や、複数ゴースト起動時の終了時にキャッシュに残るようだ。
何か修正を加えたら、ゴースト上で右クリック→機能→ゴースト再読み込み、を行ってみよう。
キャッシュを破棄して読み込みを行うので、追加した内容が適用される。

追加した機能のあるファイルで括弧が閉じ忘れていないか確認する。
別の新しい辞書ファイルを作り、追加した機能を新しい辞書ファイルに移動して動かしてみる。

それでも動かない場合、問題を分解してみよう。その機能を構成する要素を、一つ一つ動作確認していこう。シンプルな辞書で試してみよう。

つまっている場所がわかれば、人に聞く場合でも適切な質問ができる。

それでも期待した動作をしない

それでも解決しない場合、「ポストと狛犬」に同梱されてる「れしば.exe」を起動してみよう。
その状態でゴーストを起動すると、中で何が起こってるかがわかる。
また、掲示板等で助けを求める場合にも、れしばで表示される内容は役に立つことが多い。

原因が特定できない

辞書ファイルをいったん別のフォルダにコピーして、必要最小限の辞書だけで動かしてみよう。
正常に動く状態から、少しずつ変更していって、原因を突き止めよう。

謎の症例系

メニュー/選択肢に「…\w3」とか出てくる

replace_after.txtに登録された置換の影響で、右クリックメニュー/選択肢上の「・」「‥」「…」「。」「、」などにウェイトタグが出る場合がある。
これはエスケープ記号φ(ふぁい)をつけることで、その直後の文字が置換されないようにできる。

例)
辞書上:……おすすめ?(&R) → メニュー上:…\w3…\w3おすすめ?\w8(&R)

辞書上:φ…φ…おすすめφ? → メニュー上:……おすすめ?

(注・実際にエスケープすべき文字は、そのときのreplace_after.txtの内容によって異なる。上の例はreplace_after.txtに「…」「?」が設定されている場合。)

さおり呼び出しの結果を表示するなど「何を表示するか実行時までわからない」場合には、replaceコマンドで置き換える。

#例
(replace(バイト値、1)(出力したい文字列)(バイト値、1)…(バイト値、1)φ…)
#区切り文字がバイト値1なのは、変数「$出力したい文字列」に「、」「,」が含まれる場合に、
#さおり呼び出しの区切り文字と誤認されるのを防ぐため

サーフェスが勝手に変化してしまう

里々には「自動でサーフェスを規定値に戻す」仕組みがあります。

(1) トーク直前(スクリプト冒頭)
(2) トーク後に一定時間経過した時

この二箇所のタイミングで発生し、予め設定されたデフォルトサーフェスに戻るスクリプトが挿入されます。
デフォルトサーフェスは初期状態では下記のように設定されています。

$デフォルトサーフェス0【タブ】0
$デフォルトサーフェス1【タブ】10

この状態では、全てのトークの先頭に \0\s[0]\1\s[10] が挿入されることになります。
ただし、スクリプトの最初に \s[ID] などサーフェス変更スクリプトが使われていた場合(トークの最初に(5)とかがあった場合)はそちらが優先され、デフォルトサーフェスへの変更は行われません。

この機能をOFFにするには、特殊変数の$会話時サーフェス戻しを使用します。
このコマンドで無効を指定した時点からサーフェスの自動変更が停止します。

$会話時サーフェス戻し【タブ】無効 

(1)(2)を個別に有効・無効の設定はできません。
つまり、無効にすると(2)トーク後に一定時間経過した時にもサーフェスが戻らないため、次のトークが来るまでずっと前回最後のサーフェスのままになります。これをなんとかしたい場合は、イベントOnSurfaceRestoreを使い、自分で組みましょう。
キャラクター数が3人以上になる場合は適宜 \p[n]((デフォルトサーフェスn)) を追加すればOK。

*OnSurfaceRestore
\0((デフォルトサーフェス0))\1((デフォルトサーフェス1))\e

起動時にサーフェスが表示されない

上記の$会話時サーフェス戻しに関連する問題と思われます。
これは「トークの最初にサーフェス指定していない時、デフォルトサーフェスに戻すスクリプトを挿入する」機能ですが、里々が内部で”最初にサーフェス指定していない判定”に失敗した場合は自動挿入が行われないため、サーフェスが何も指定されない状態になっていると思われます。
とりあえずサーフェス指定をいれてみましょう。

もう一つあり得るケースとしては、辞書が正しく読み込まれていない状況が考えられます。
括弧の閉じ忘れ、全角半角の混在によって起動関連の記述がまるごと動かなかった可能性もあるので、要チェック。

意図しないタイミングでバルーンが消えてしまう

何かのタイミングで、意図しない(マウスクリックも、タイムアウトもしていない)のにバルーンが勝手に消えてしまう場合、何らかのイベントが通知されている可能性があります。
例えば、mciaudior.dllを使っていると、曲が終了した時にOnMAAPlayFinishが通知され、バルーンが消える…といった具合です。
これを防ぐ方法は、通知されているイベントを特定し、そのイベントに「$スクリプトの一番頭【タブ】\C」又は「$今回は喋らない【タブ】有効」を記述するのが有効です。

シェルやバルーンに関すること

シェルのインストールや切替時にもバルーンが消えたりする事例が報告されています。
SHIORI イベントリストOnShellChangedOnShellChangingなどに注目。 また、これらのシェルやバルーン関連のイベントはトークを書いてない場合でも上書きで発生するという特性があります。例えば、

*
:バルーンを切り替えるよ。\![change,balloon,○○]
バルーンを○○に変更したよ。

と書いても、\![change,balloon,○○]を実行した時点で新たにイベントOnBalloonChangeが発生するため、「バルーンを○○に変更したよ」と喋る前に上書きされてしまうのです。当然、トークがない場合はただバルーンが消えてしまう。
シェルをインストール→インストールしたシェルに変更、でトークをしてくれないケースも基本的にはこれと同じ。ここでは文の中で連続で喋らせる事は諦め、OnBalloonChangeなど変更後に発生するイベントの中で続きのトークを書くように(バルーンを消したくない場合は「$スクリプトの一番頭【タブ】\C」などを活用)しましょう。

*
$特殊バルーン切り替え【タブ】○○
:バルーンを切り替えるよ。\![change,balloon,○○]

*OnBalloonChange
>○○に特殊切り替え【タブ】(特殊バルーン切り替え)==○○

*○○に特殊切り替え
#変数の削除。【タブ】の右側は何も書かない
$特殊バルーン切り替え【タブ】
$スクリプトの一番頭【タブ】\C
:バルーンを○○に変更したよ。

特殊変数「次のトーク」が機能しない

次のトークは、里々が自発的にトークした時か、()の展開時(←中身のない全角括弧のペア)にのみ処理される。
ランダムトークを呼び出す時、()を呼んでいるか確認してみよう。
里々の自発トーク時には以下が処理される。
辞書内にない場合は、勝手にこれと同等の処理が補われる。

*OnTalk
>(R1)【タブ】(R0)
()

(R0)に予約トークの有無、(R1)に予約トーク名が入るが、これは里々がランダムトークを行った場合のみセットされる。
「>OnTalk」や「(OnTalk)」などで無理矢理呼び出した場合は正しくセットされず、おかしな状態を参照することになり、動作が変になる可能性がある。
OnTalkを直接呼んでいないか確認してみよう。

上記に問題がない場合、以下が該当するかもしれない。

たまに
$次のトーク【タブ】
が動作しないというのを見るのですがこの後に
$手動セーブ【タブ】実行
を行い、かつ*OnSatoriBootや*OnSatoriLoadで
$トーク予約のキャンセル【タブ】*
を記入しているとトークの予約を消されてしまうことが分かった

新もどき板 里々質問用スレッド2 No.65より引用

対策はOnDestroyでトーク予約のキャンセルとか。

関数使ってない場所で「引数の個数が〜」って言われるしれしばでも異常がみつからない

OnTranslateでトーク全文に対して関数で処理をしようとしていないだろうか?
関数の区切り字と同じ文字がトーク中に出現すると、このエラーがでる。
またOnTranslateはれしばに拾われない。
尚、トーク中に選択肢が含まれる場合、トーク中にバイト値1が存在する可能性が高いので注意しよう。

参考:引数区切り問題

バグ報告されたけど、作者の環境では起こらない

辞書ファイルを削除したりしていないだろうか?
ベースウェアには、作者の環境をユーザに同期させる機能はない。
作者環境で削除したファイルも、ユーザのもとには残り続けてしまう。
ユーザ環境で不要ファイルを消去できるdelete.txtを作り、ネットワーク更新で配布するようにしよう。
参考:delete.txt

こんな事をしたいTIPS系

初回起動のテストをしたい

*aが押された
>初回起動

みたいなものを作っておけばaキーを押すだけでトークを確認できるが、これだと初期状態のキャラクター表示が実際の動作と異なる場合があるので、最終的にはちゃんとテストすること。

ちなみにキー操作に反応させる為には

*OnKeyPress
>(R0)が押された

という記述が別途必要となる。ポストと狛犬を改造して作っているのなら最初から書いてある。

カッコを無効化したい

(笑)とか(wとかしゃべらせたいのに、括弧が出てこない!
そういうときはφ(ふぁい)を使います。
φ(と記述してカッコを始めることで、置き換え等の特殊機能を抑制し、単なるカッコとして出力することができます。
また、カッコ内で閉じカッコを表示したい場合は φ) で可能。
もちろん、置き換え対象が無い場合はそのままカッコつきで出力されます。

#「(w」「(笑)」としゃべらせたい時

@例1
φ(w

@例2
φ(笑φ)

スコープ切り換え時の自動ウェイトをなんとかしたい

satori_conf.txtに記述されている$スコープ切り換え時を変更してみよう。

$スコープ切り換え時【タブ】\n[half]

$スコープ切り換え時【タブ】\n[half]\w8

にするとか。

要らない時は随時

$スコープ切り換え時【タブ】\n[half]
:ここの切り換えは!
:即時に!
$スコープ切り換え時【タブ】\n[half]\w8

と。
(さくらスクリプトでトークを書いている人は「$さくらスクリプトによるスコープ切り換え時」)

他には、$自動挿入ウェイトタイプ$自動挿入ウェイトの倍率の値を変えるなどもしてみよう。 初期値は以下。

$自動挿入ウェイトの倍率【タブ】100
$自動挿入ウェイトタイプ【タブ】里々

$自動挿入ウェイトの倍率を値を変えることで、ウェイトの長さが変わる。
指定するのはパーセント単位の倍率。

改行が勝手に入るのをなんとかしたい

スクリプトで対処出来る場合

以下のように、括弧を使った処理と、「$」や「>」を混ぜて処理を書くと、括弧の行数だけ改行が入ってしまいます。

*OnBoot
(call,好感度変更,2)
>重要イベント【タブ】(起動回数)>=10&&(重要イベントフラグ)==0
>高好感度起動【タブ】(好感度)>=300
>通常起動

@好感度変更
(whenlist、(好感度)+(A0)
	、>1000、(set,好感度,1000)
	、<0、(set,好感度,0)
	、(set,好感度,(好感度)+(A0))
)

上記の例では、\1側に必ず1行改行が入ってしまいます。
括弧はトーク部分とみなされるため、改行で\nが入ってしまいます。
そこで、「$」を使って変数に格納する形にして、改行が出ないようにします。
「$」で変数へのセットが行われる場合は改行が発生しません。

*OnBoot
$ダミー【タブ】(call,好感度変更,3)
>イベント【タブ】(起動回数)>=10&&(イベントフラグ)==0
>高好感度起動【タブ】(好感度)>=100
>通常起動

上記の「$ダミー」はゴーストで使うことはありませんが、記述を変数代入の形にすることで、改行が発生しないようにしています。

スクリプトに改行が発生する要素がないのに改行される場合

里々バージョンMc159-4では発生しませんが、違うバージョンの里々では発生することがあるようです。
行末をφでエスケープしても改行されたり、\1側でトークが始まる前に改行されていたりする現象です。 トークを記述した文「*」の連続
里々では、ベースウェアが表示するトークを記述しているかどうかで処理が変わってきます。

*
(例1)(例2)

*例1
$ほげ【タブ】4
$好感度=(好感度)+1

*例2
:トーク

見ての通り、(例1)は処理系だけの文、(例2)はトークを書いた文です。
この例でランダムトークを実行した時は大丈夫。
(例1)にあるような、$や>だけで構成された文は、里々が自動でトークを表示しな//いものとして判断するので、続く文(例2)にあるトークと競合せず、正しく表示されます。
ところが、もし(例1)内にトークを書いてしまうと、スコープなどが混同して、文(例2)が始まる時に勝手に改行が挟まれたりしてしまう。
ここらへんの処理の流れは、里々を相当理解していないと難しいです。 よって解決法…というより予防法は

  • 文*を一度に複数呼び出す場合、トークを書くのはその中の一つだけにする
  • 一行で収まるものは単語群@を活用する(こちらは行末に改行がつかないため) などが有効です。 他にも、@の中で関数やSAORIを使い、さらに@を呼び出した時にも発生します。
    また、トーク中に()で文や単語群を呼び出し、そこからさらに呼び出しを重ねるなどをしても発生することがあるようです。
    この時は、単語群を多重に呼び出さない、$や>を極力setやifなどの関数で代用し、処理的に改行の挟む余地をなくすなどをしてみると解決するかも……

中身のない変数を使った場合
「中身のない変数を使う」ことでもこの改行現象が発生します。
↓ケースバイケース例。

*
$好感度合計=(好感度合計)+(好感度)
>機嫌悪いトーク【タブ】(好感度)<10
>ふつうのトーク【タブ】(好感度)<50
>トーク(機嫌)【タブ】(変数「だるいフラグ」の存在)
>ご機嫌なトーク
  • (好感度合計)または(好感度)の中身が空 → 改行発生
  • (だるいフラグ)だけが空 → OK
  • (機嫌)の中身は空で、その右の条件式も成立している → 改行発生
  • (機嫌)の中身は空で、その右の条件式が成立していない → OK(!)

基本的には「>」の中だとか「$」の中だとかお構いなしです。
逆に、文字列でも数字でもなんでもいいからその変数に何か入っていれば改行を防げます。
このケースに関してはsatori_conf.txt内の「*初期化」にて変数の初期値を設定して防ぎましょう。


発生しても表示させない方法
ここまでは発生を抑える対策ですが、以下は発生したものは仕方ないとして諦め、表示させない手段を紹介します。

  • トークする直前に\cか、\_l[0,0]を入れて強制的に戻す
    • 一元化するのに苦労しますが、確実です。
  • さくらスクリプトの \![raise,○○] を使う
    • トークと直前の処理系が分かれているケース限定。
    • 処理系が終了後にraiseでトークを呼び出す事で、全ての表示座標が0,0に戻ります。
    • イベント上では一度区切ることになるため、トークとトークの合間に使うのは難しい(\Cなどを活用すれば可能)
  • スクリプトログなどを参照し、特定のものをreplace_after.txtなどで置換する
    • ダミーの表示されないスクリプトなどを埋め込み、まとめて置換する方法。
    • 本命のトークを呼び出す直前に特定用のコードを入れ、replace_after.txtには \1(特定用コード)\1\n を \1 に置換させる。スクリプトログを汚したくない人向け。

ユーザー入力やファイル名など外部から取得した文字列の中の()が展開されてしまう

まず里々でユーザー入力やファイル名等で外部から(){全角丸括弧}入りの文字列が入ってきた場合の挙動が分かり難いので纏めます。

まず、OnFileDrop や OnUserInput イベントで取得したリファレンス(R?)の中に(){全角丸括弧}が入っていても、リファレンス(R?)を直接表示等を行う分には括弧展開されません。

*OnFileDrop2
:\_q\_!(R0)\_!\_q
*OnUserInput
:(R1)

次にリファレンス(R?)を、変数に【タブ】や set 関数を使って代入して、その変数を使っても括弧展開されません。(セーブデータを見ると括弧の前にφが自動挿入されて無効化しているのが分かります)

*OnUserInput
$ユーザ名【タブ】(R1)
:(ユーザ名)

ただし、リファレンス(R?)を変数に=を使って代入すると括弧展開されてしまいます、文字列を=で代入するのはやめておきましょう。

*OnUserInput
$ユーザ名=(R1)
:(ユーザ名)

次に(){全角丸括弧}が入ってるリファレンス(R?)や変数を、関数を使って文字列操作した場合に関数返り値は括弧展開されてしまいます。

*OnFileDrop2
$,【タブ】(バイト値,2)
$引数区切り追加【タブ】(,)
:\_q\_!(replace(,)(R0)(,)\(,)/)\_!\_q

ただし関数の配列返り値(S0)だと括弧展開されません。

*OnFileDrop2
$,【タブ】(バイト値,2)
$引数区切り追加【タブ】(,)
:\_q\_!(nop(,)(split(,)(R0)(,)\))(for,0,(Sの数)-1,(lp))\_!\_q

@lp
(if,(C0)!=0,/)(S(C0))

以上が基本的な挙動です、ユーザー名など変数に保存して使うだけで、文字列処理系の関数を使って文字列操作したりするのでなければ特別な処理は必要ありません。変数に=を使って代入だけしない様に注意して下さい。

以上の挙動を理解した上で括弧展開しない様に何とか対策を立てることは可能です。

まずyaya as saori で、ファイルリスト取得(FENUM関数)やテキストファイル読出(FREAD関数)などは関数返り値で値を渡すのでファイル名やファイル内に()があると括弧展開されてしまいます… yaya as saori 側の関数を配列返り値(S0)で返す様に改造して対応する事が出来ます。→改造例

最後に、外部から取得した()入りの文字列を関数を使って操作したい場合はどうするか…

  1. 関数返り値に(){全角丸括弧}があると括弧展開されてしまうので配列返り値で返す様に関数を改造する、ssuの文字列操作系関数は改造できないので yaya as saori で返り値を配列返り値(S0)で返すようにssuと同等の関数を改造&自作する。(ムリダナ…) yaya as saori で ssu と同等の動作ををする aym モジュールを作った人がいる→RabbitBike みち氏
  2. (){全角丸括弧}を別の文字(例えば半角の丸括弧)に変換して括弧展開されない様にする。(ここまでならssuのreplace関数で可能)
    ただしファイル処理等正確な文字列が必要な場合には元に戻さないといけませんが、戻すときにreplace関数を使うと関数返り値は括弧展開されてしまいます…→yaya as saori のユーザー関数で何とかする
  3. 里々を捨てて他の栞に乗り換える→「一生呪われろー!!貴様には一生里々が使えなく無くなる呪いをかけてやるぅーっ!!」

里々(文字列処理)の道は茨の道。さりとて、戻ることはかなわぬのです。

なんかもうさっぱりです

掲示板で質問してみる? 質問の際はできるだけ詳しい情報を添えて。
質問はこちらまで⇒伺か的なフォーラム»開発»里々での開発相談

気分が落ち込んで……

散歩してきなさい。


トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2017-06-04 (日) 21:19:35 (111d)