Re: バグ報告スレッド 8 [ No.163 ]
メンテ
 2010/03/12 21:20
 
7.
"\\" の取り扱いが妙なことになっています。

"\\" を代入した文字列変数を左辺書き換えのキーボード入力に渡したとき、0x01 の文字が2つ表示されます。
(ウディタ内部で使用されている表現? 以下、"\" が2つ並んだだけのものと区別するために 0x01 0x01 と書かせてください)
逆に、キーボード入力で "\" を入力すると "\\" が返りますが、"0x01 0x01" に置換されず、単に "\" が2つ並んだ状態になります。

その他、
・条件分岐(文字)の入力欄
・可変DB書込の文字列処理欄……(A)
・データベースへの参照……(B)
においても "\\" が置換されないようです。

このため、

■文字列操作:S0[] = キーボード入力 10文字
■文字列操作:S1[] = "あいうえおかきくけこ"
▼ ↓「数値処理または代入先指定」ではなく、「文字列処理」で "\s[0]"
■可変DB書込:DB[0:0:0] = "\s[0]"
■文字列操作:S1[] = "さしすせそたちつてと"
■文章:\cdb[0:0:0]

このような(名前入力などの)イベントで"\s[1]" と入力すると、"\\s[1]" が置換されないまま \s[0] に格納され、
DB書込時に "\\" は置換されず(A)"\s[1]" が置換され、
\cdb[0:0:0] には "\あいうえおかきくけこ" が格納されることになります。

■文字列操作:S0[] = キーボード入力 10文字
■文字列操作:S1[] = "あいうえおかきくけこ"
▼ ↓「文字列処理」ではなく、「数値処理または代入先指定」
■可変DB書込:DB[0:0:0] = S0[]
■文字列操作:S1[] = "さしすせそたちつてと"
■文章:\cdb[0:0:0]

このようなイベントの場合は、"\\s[1]" がまったく置換されないまま \cdb[0:0:0] に書き込まれ、最後の文章表示で "\さしすせそたちつてと" と表示(B)されます。

上記のどちらも、"\s[0]" と入力すると(おそらく無限ループが原因で)フリーズします。

その他、バグというより仕様のような気もする関連現象
・「S0[] = "\"」としたとき、「S0[] = "\s[0]\s[0]"」では "0x01 0x01" になりますが、「S0[] += S0[]」では単に "\" が2つ並んだ状態になります。
 ("\\" に限らず他の特殊文字でも同様のことは起こるみたいです)

・"0x01 0x01" から1文字切り出しするときそのまま切り出すらしく、"0x01" になってしまうようです。

・"0x01 0x01" を画面に表示すると "\" になりますが、文字列操作でファイルに出力する場合には "\" 2つになります。
 例えば "\s[0]" とだけ書かれたファイルを作れませんし、ファイル出力の時も "\" 1つでいいんじゃないでしょうか。

・逆にファイル内容読込のときは、"\" を問答無用で "0x01 0x01" に置換してしまっていいんじゃないでしょうか。
 現状では、"\s[0]" などと書かれたファイルを正しく画面に表示できないですし。

相変わらずまとまりのない文章で申し訳ないです。
長くなりましたが以上です。

# 追記
# 誤記を訂正しました。