「ツリー表示の定義」で半角大文字が保存No.03645
naanfushi さん 09/09/06 18:21
 
【症状】
 アウトラインの「ツリー表示の定義」で、いつの頃から不明ですが、半角大文字を
指定しても、小文字になって記憶されているようです。

【再現手順】
1.「ツリー表示の定義」の見出しの定義で下記を設定する
 ・種類:文字列
 ・文字列:^ABC
 ・正規表現をチェック
2.[OK]ボタンを押す
3.「ツリー表示の定義」に戻ると、上記は「^abc」となっている。

 また、アウトライン解析では、「大文字/小文字の区別」の設定に関わらず、常に
これをOFFにした検索が行われているようです。

 再現しますでしょうか?

[ ]
RE:03645 「ツリー表示の定義」で半角大文No.03651
naanfushi さん 09/09/06 23:01
 
 自己レスになりますが、前言の挙動の再現性が確認できました。

【確認事項】
 「大文字/小文字を区別」がOFFの時に、「文字列」に入力した半角文字列が小文
字に変換され、保存されました。ここをONにすると、「文字列」に入力した文字列が
そのまま保存されました。

【誤認理由】
 正規表現は、デフォルトで「区別(ON)する検索」だと思い込んでおりました。しか
し、秀丸では「区別(OFF)しない」がデフォルト的な扱い(検索ダイアログでも「大
文字/小文字を区別」がOFFがデフォルト)だということで、この一連の挙動がおおよ
そ理解出来ました。

【不思議に感じた動作】
 ツリー表示の定義において「大文字/小文字を区別のする/しない」は、秀丸側の
内部的な処理です。一方、ユーザ側として「自分が入力した"ABC"が勝手に"abc"と変
換されて保存される」という仕様は、心情的に受け入れられ難いということと、実務
面では「区別のON/OFFによって保存される文字が変わる事に起因する混乱や誤作業」
を誘因しないか…と疑問に思いました。

【改善案】
 秀丸側の都合もあろうかと存じますが、「区別のON/OFFに関わらず、「文字列」に
入力された文字列をそのまま保存する」という仕様の方が、無難な気はします。
 (と言いつつ、簡単ではないのだろう…という認識も持っております)

※ 上記の「秀丸側の都合」と書かせて頂いたのには、検索ダイアログでの動作があ
ります。先ほど確認したところでは、検索ダイアログボックスでは、「ABC」と「ab
c」を連続して検索すると、「「大文字/小文字を区別」がOFFでもONでも、検索ヒス
トリには両方が残るわけではなく、いずれか最後の1つの「abc」が残る(ヒストリ
中の順番を再計算するため?)という仕様になっていることを初めて知りました。
 この当たりの仕様を継承していれば、上記の変換も仕方ないのかもしれません。

 と言うことで、参考意見程度に読み流して頂ければと存じます。

[ ]
RE:03651 「ツリー表示の定義」で半角大文No.03671
秀丸担当 さん 09/09/07 14:45
 

> 「大文字/小文字を区別」がOFFの時に、「文字列」に入力した半角文字列が小文
>字に変換され、保存されました。ここをONにすると、「文字列」に入力した文字列が
>そのまま保存されました。

「大文字/小文字の区別」がOFFのときは、小文字に変換されて保存されるように
なっています。
ツリーの定義だけでなく、強調表示や複数行ユーザー定義でも同様だと思います。
以前からそうだったと思います。
できたほうがいいと思いますが、いまさら形式を変えると問題が出ると思うので、
仕様ということにさせていただきたいと思います。申し訳ありません。

[ ]
RE:03671 「ツリー表示の定義」で半角大文No.03708
naanfushi さん 09/09/08 20:53
 
>以前からそうだったと思います。
 個人的には、良くも悪しくも秀丸に慣れ過ぎていて、こうした動作は頭の中で自動
補完して使っていたのだと思います。
 ところが今回、秀丸を初めて使う者達にβ試用してもらって、客観的な視点と言う
か、秀丸の動作を改めて初心に帰って再評価が出来たのは良かったと思っています。

 ちなみに、彼らが言うには「正規表現で[a-z]と[A-Z]が検索のデフォルトで同じ扱
いになることは理解し難い」と言います。そこで、「だから、一番上に[大文字/小文
字の区別]というオプションがあるでしょ」と説明しても、「それはむしろ正規表現
のオプション的存在では…」と、ある意味、それなりの(?)反応をします。
 一点、彼らの意見の中で使えるかも、と思った改善策が、「現行のままで行くなら、
[正規表現]をチェックした時点で[大文字/小文字の区別]にもチェックが付くように
して(秀丸の正規表現は、区別をデフォルトとする立場である、ことを示す意味で)、
区別しないオプション的な正規表現を行いたい人にはそのチェックを外すというワン
ステップを確認の意味で敢えて追加する、という仕様であれば、比較的納得できます
が…」と言うものでした。
(ちなみに、こういう意見は、ある程度、正当な正規表現を学んだ者が多く、ワープ
ロ中心の者は、区別優先の方が自然、と受け止める傾向があるように感じました)

>いまさら形式を変えると問題が出ると思う
 保存の形式については確かにその通りでしょう。
 ただ、秀丸初心者にすれば、「大文字/小文字の区別がOFFで勝手に小文字にされる
仕様は、受け入れがたい」そうで、「検索ヒストリの"hdlgwnd"から誰が"hDlgWnd"を
連想できますか?」との声もありました。

 もっとも、検索系ヒストリが全て小文字に変換されるのは、かなり、広範に影響が
出てしまう可能性が高く、危険性が高いと言うことのようで仕方ないでしょうが…。

 一応、下記に彼らなりに考えた、「検索文字列の保存の自然と感じる仕様」を貼り
付けておきます。せっかくなので…。

【検索系ヒストリのあるべき仕様】
・ユーザの入力した通りの文字列を保存
 (オプションに関わらず、入力文字通り)
・ヒストリ内の比較も入力通りの文字列で実施
 (「abc」と「ABC」等は別物として、それぞれヒストリに残る)
・実際の検索等では、検索オプションに準じて実行
 (ヒストリの「Dim」をどう検索するかはユーザのオプションへ一任)

 と、ごくごく当たり前の仕様だったりするわけですが…。
 長文失礼です。

[ ]
RE:03708 「ツリー表示の定義」で半角大文No.03726
秀丸担当 さん 09/09/09 11:04
 

設定関係の小文字変換は、設定を保存する形式を効率化しているための仕様とい
うことでお願いします。

正規表現は、V3.xxまでは「大文字/小文字の区別」はグレー状態となり区別で固
定でした。
しかしそれでは不便という意見があったためだと思いますが、V4.00から正規表現
においても「大文字/小文字の区別」できるようになりました。
面倒かもしれないですが、「大文字/小文字の区別」をONにして使っていただけた
らと思います。

検索ヒストリは小文字変換していないです。
ヒストリを大文字小文字の区別せず上書きするはV8での問題でした。
これは助かりました。
また別スレッド
turukame.3:03718| RE 03643 秀丸V7.11では「abc」も「ABC]もヒストリに存在?
でコメントします。

[ ]
RE:03726 正規表現のデフォルト設定についNo.04048
naanfushi さん 09/10/01 22:07
 
 なるほど。やはり、現行の仕様には、そういう経緯が隠されていたんですね!

 確かに普通に秀丸を使う一般ユーザにとっては、デフォルトで謂わば「拡張された
正規表現」になっている現行の仕様の方が、むしろ便利であり、問題はないとも思わ
れます。

 ただ、秀丸が情報系の専門学校とか大学・短大といった教育現場で使われる場合も
少なくない現状を考慮すると、ちょっと気になりました。現行の秀丸のままで正規表
現を学び始めた学生にとって、もしかして「[a-zA-Z][a-z]」等の正規表現検索が意
味不明なものになりはしないか、あるいは、秀丸の正規表現検索の特性(厳密な正規
表現ではない設定が、秀丸ではデフォルトである状態)を、おそらく事前に教員が説
明しなければならない、時間的ロスを教育現場に押しつける結果にならないか、など
と心配したりします。


 そこで(ちょっと大げさですが)未来の日本を背負う若者たちのために秀丸ができ
る仕事として、正規表現をONにした際にデフォルトとして設定される状態を設定でき
る「正規表現の適用レベル」といったオプション(以下の3種くらいの選択肢を用
意)を設けてることを考えてみました。

 「正規表現の適用レベル」の設定オプションの例を考えてみました。
・標準設定…現行の設定(デフォルト設定であり、応用性に富んだ柔軟な検索が可能)
・緩やかに適用…「大文字/小文字の区別」はオン、「あいまい検索」はオフがデフ
ォルト。ただし、ユーザーは検索ダイアログ上にあるチェックボックスで両設定とも
手動にて変更可能。
・厳密に適用…「大文字/小文字の区別」はオン、「あいまい検索」はオフに固定さ
れる。両設定とも(それぞれオン、オフ状態で)グレーアウトして(設定を手動にて
わざわざ意図的に変更しない限り)変更できない。

 設定場所は、次の2カ所のいずれかはどうだろうかと想像しました。
・[動作環境]→[検索]→[懸濁ダイアログボックス]に「正規表現の適用レベル」など
の設定を設けて、上記の3レベルを選択できるようにする。その設定状態は、検索ダ
イアログの「正規表現」の横に表示される。
・[検索]ダイアログの「正規表現」の横に「適用レベル」あるいは「設定」などの名
称をもつボタンを追加する。その設定状態は、検索ダイアログの「設定」ボタンの横
に表示される。

 やはり、一般的なユーザには問題はないものの、正規表現とは何かを全く知らない
情報教育の初歩的な段階にある学生ユーザには、まずしっかりと基本的な正規表現を
身につけてもらった方が良いのではないか、と考えた次第です。そして将来、UNIXを
はじめとする多様な環境でプログラム等に従事する現場で、きちんと身につけた一般
的な正規表現を無意識に駆使しながら仕事をこなしていく彼らの姿を想像するだけで、
このオプションの新設は秀丸にとっても大きな意義があるのでは…、と考えました。
(厳密に適用といっても、正規表現自体に完璧で一意的な標準仕様があるわけではな
いようなので、いわゆる標準的な…という範疇ではありますが…)
 
 以上、将来の日本の情報産業を担っていくであろう教育の過程にある若い方々への
配慮、という視点で考えてみましたが(相当にマジな気持ちを込めて)、ご検討頂け
れば幸いです。
(長文失礼でした)

[ ]
RE:04048 正規表現のデフォルト設定についNo.04050
Iranoan さん 09/10/01 22:54
 
 naanfushi さん今日は、Iranoan です。
> ・[動作環境]→[検索]→[懸濁ダイアログボックス]に「正規表現の適用レベル」など
> の設定を設けて、上記の3レベルを選択できるようにする。その設定状態は、検索ダ
> イアログの「正規表現」の横に表示される。
> ・[検索]ダイアログの「正規表現」の横に「適用レベル」あるいは「設定」などの名
> 称をもつボタンを追加する。その設定状態は、検索ダイアログの「設定」ボタンの横
> に表示される。
 これには反対。
 理由は、まず
→これって、情報系の生徒を相手とする教職にとってはありがたいけれど、そ
  れ以外の多くのユーザにとっては、何の意味も無い気が...
→だとすると、ただでさえ多い設定項目を増やすだけ

 更に、
> 秀丸の正規表現検索の特性(厳密な正規
> 表現ではない設定が、秀丸ではデフォルトである状態
と有りますが、そもそも「厳密な正規表現」などというものは
> (厳密に適用といっても、正規表現自体に完璧で一意的な標準仕様があるわけではな
> いようなので、いわゆる標準的な…という範疇ではありますが…)
ということで、存在し無いから。
 確かに、正規表現の土台ともいえる、UNIX の世界では、POSIX により標準
規格も定められ、それに準拠するものも増えてきているらしいですが、
Windows で動作する秀丸が POSIX に準拠する必要は全く無いですからね。

[ ]
RE:04048 正規表現のデフォルト設定についNo.04053
IKKI さん 09/10/02 08:09
 
おはようございます。ユーザの IKKI です。

この件に関連して、ちょっと私見を述べさせていただきます。
元の話題からは多少離れてしまうかもしれませんが、議論の材料になれば幸いです。

●結論
/[aA][bB][cC]/ のようなトリックを学生に教えることは、ほとんど無益です。

●理由1
事実上すべての現代的な処理系は、正規表現で大文字小文字を同一視する方法を提供
しています。

http://www.regular-expressions.info/refflavors.html によれば、JGsoft (誰?), .
NET Framework (C#, VB.NET など), Java, Perl, PCRE (PHP など), ECMA (JavaScri
pt), Python, Ruby, XPath は大文字小文字の同一視が可能です。
一方、POSIX BRE/ERE, GNU BRE/ERE, XML Schema は大文字小文字の同一視が不可能
です。これはバックエンドの正規表現エンジン単体では当該機能を持たないという意
味で、実際にはフロントエンドとなる個々のアプリケーション (例えば GNU grep, g
awk, GNU sed など) が大文字小文字を同一視するオプションを提供している場合が
多いです。

●理由2
/[aA][bB][cC]/ と /abc/i では後者の方が高速です。

秀丸エディタ v8.00β18 + HmJre v2.05 を使っている手元のマシンで、
--------
aAaAaAaAaAaAaAaAaAaAaAaAa
--------
という文書に対し、次の 2 種類のパターンを検索してみました。

// パターン1
searchdown "[aA]?[aA]?[aA]?[aA]?[aA]?[aA]?[aA]?[aA]?[aA]?[aA]?[aA]?[aA]?[a
A]?[aA]?[aA]?[aA]?[aA]?[aA]?[aA]?[aA]?[aA]?[aA]?[aA]?[aA]?[aA]?[aA][aA][aA]
[aA][aA][aA][aA][aA][aA][aA][aA][aA][aA][aA][aA][aA][aA][aA][aA][aA][aA][aA]
[aA][aA][aA]", regular;

// パターン2
searchdown "a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?a?aaaaaaaaaaaaaa
aaaaaaaaaaa", regular, nocasesense;

検索時間は前者が 6.037 秒、後者が 2.465 秒でした。
また、詳細は割愛しますが、cygwin 上の Perl 5.10.0 と Ruby 1.8.7 で試した結果
も同様でした。

●結論
処理系が大文字小文字を同一視する方法を提供しているならば、その方法を積極的に
使うべきであり、学生に対してもそのように教えるべきです。
今後社会に出て新しい処理系を扱う学生が /[aA][bB][cC]/ のような古い正規表現の
トリックを覚えることは、動作原理の理解には役立つかもしれませんが、それ以上の
実務的な意味を持ちません。
それよりも、正規表現に標準規格が存在しないことを知り、処理系ごとのマニュアル
をきちんと読む習慣をつけることが、将来にわたって実務に役立つと思います。

# 例外は、古い処理系を使わざるをえない哀れなシステムエンジニア (私もそうでし
た) と、正規表現エンジンを自ら開発しようとする野心的なプログラマぐらいでしょ
うか。:-P

●参考文献
[1] http://www.regular-expressions.info/
[2] http://en.wikipedia.org/wiki/Comparison_of_regular_expression_engines
[3] http://en.wikipedia.org/wiki/List_of_regular_expression_software
[4] http://swtch.com/~rsc/regexp/regexp1.html

[ ]
RE:04053 正規表現のデフォルト設定についNo.04058
naanfushi さん 09/10/02 10:56
 
 秀丸βを試用している私共のメンバーの中で、情報系の実務と知識を持つ者が一人
しかおらず、彼(ちっと…、いや、相当に古い情報教育で育ったような…)がぼやい
ていた言葉を発端に、(オッサン臭い?)本要望を提案した…という経緯がありまし
た。
 合わせてタイミング良く、秀丸の正規表現の変遷を秀丸担当様が説明されておられ、
「それなら、その時々の設定をオプションで選べるようにすれば」と発想したわけで
したが、まさにその変化は正規表現の変遷に合わせた変化と言う事で、改めて感動し
ております。


>正規表現に標準規格が存在しないことを知り、処理系ご
>とのマニュアルをきちんと読む習慣をつけることが、将
>来にわたって実務に役立つ

 これこそが、習得すべき情報技術の核心ですね!

 と言う所で、本提案を取り下げます。
(極めて有益な現状・情報をご紹介頂き、本当にありがとうございました)

[ ]
RE:04053 正規表現のデフォルト設定についNo.04065
秀丸担当 さん 09/10/02 11:40
 

Iranoanさん、IKKIさんコメントありがとうございます。
とても有益な情報で、参考になります。

[ ]