2010年11月13日土曜日

第160回目 QXマクロ、30行上下の漢字またはカタカナ文字列を抽出

○第160回目 QXマクロ、30行上下の漢字またはカタカナ文字列を抽出

 文章をうっていくと、同じ用語が頻繁に出てくることがあります。文字数が少なければそうでもないのですが、多くのキータッチを必要とするものについては、面倒くさくなってしまいます。これを何とかしようという発想です。
 通常の操作では、重複している部分を除いて入力して、後でコピーしてくる、というのではないでしょうか。
 今回考えるマクロでは、すでに入力した文字列を取得し、一覧表の形で表示しその中から選択して、文章に入れてしまおうというものです。
 これまで入れた文章を見てみると、"重複"という漢字が、入力しにくそうですね。これをもう一度入れなければならないという時に、威力(?)を発揮します。
 後で起き替えたい場所には数字をうっておきます。そしてマクロを動かします。すると、次のようになります。
 「この1では、」
  ↓
 「この重複では、」

 さて、取得する文字列としては、漢字系、カタカナ系、数字系が考えられます。特に、人名などのカタカナは再入力が面倒くさいものではないでしょうか。
 数字系については、イメージがつきずらいと思いますが、こういうことです。
 QXマクロの中には、この式を計算するというマクロがあります。
 計算式を入れていき、計算をさせます。その結果を後の行で使いたいというときに、使用します。
20*5=100
30*6=180
 この合計はというときに、100と180を持ってくることができるのです、通常は桁数が大きく、数字がランダムなのとても便利です。
 また、1カタカナ系では、人名のように、途中に・があったり=があったりしますので、その部分を含めて取得します。
 "ヴィンセント・ヴァン・ゴッホ"の場合は、まとめて、"ヴィンセント・ヴァン・ゴッホ"を取得とするという意味です。カタカナ系には、英文字も含めていますので、プログラムの中での変数名のつなぎとして使っている記号(_)も含めて取得する必要があります。tate_hensaなどが例です。
 ニーズにもよりますが、カッコで囲まれた部分という取得の仕方もあります。
 さらに別機能として、選択した文字列をファイルに保持しておくというのもあります。
 したがって、いままでに選択したものから選ぶか、文書中の文字列から選ぶかの選択ができるということです。これは便利な機能です。
 
 基本的に考えてみると、このマクロの目的は、いかに早く文字を打てるか、ということになると思います。そう考えると、一番の方法は、キータッチの能力を上げることということになります。
 試してみると、四文字程度の文字列の場合はメリットがありますが、2文字程度のものは直接打ってしまった方が速いと思います。
 マクロの起動、置き換えたい場所への移動、文字列一覧からの選択という操作が必要となりますので、意外と時間がかかり、何でもかんでもこの方法でやるというのは、メリットはそれほど大きくなく、かえって時間がかかるということではないかと思います。
 選択した文字列をファイル化するというのは、ハイパーコピデルでやったことなのでこの機能は省略します。
 
 今回のマクロのポイントは、
 1.文字列の初めと終わりを何で判断するのか
 2.一度にどのくらいの文字列数を取得するのか
 3.文字列の取得の方向(上に向かって取得するのか、下に向かって取得するのか)
 4.取得する文字列の字数の条件(何文字以上とか)
 5.同一文字列の取得を避ける
 6.選択文字列(別に保管される)の重複を避ける
 
 1.文字列の初めと終わりを何で判断するのか
 一行単位でテキスト取得し、一文字ずつ調べていきます。
 普通は、初めて漢字が出てきた場合が始まりで、漢字以外のものになった時に終了と考えます。
 しかしながら、
 輸入・輸出
 ヴィンセント・ヴァン・ゴッホ
 平成20年度
 神聖ローマ帝国
 テキスト取得
 2009年
 ルイ16世
 2007
 上記の例では、どのような文字列を取得しますか。
 "輸入"と"輸出"の二つ
 "ヴィンセント・ヴァン・ゴッホ"の一つ
 "平成20年度"の一つ
 "神聖ローマ帝国"の一つ
 "テキスト取得"の一つ
 "2009年"の一つ
 "ルイ16世"の一つ
 "2007"だけでは取得しない
 とするのが普通でしょうか。
 
 初めの判断は、初めて漢字がでてきた場合、または、初めてカタカナが出てきた場合、または、初めて数字が出てきた場合となります。
 終わりの判断は漢字系とカタカナ系で違います。
 特殊記号の取り扱いですが、漢字で始まった場合は、特殊記号(この例では"・")が出てきたら、それは終わりと判断します。カタカナで始まった場合は、まだ継続すると判断します。特殊記号には「」、句読点、・、カッコ、+-*/、小数点、等号などがありますので、それぞれでとあり扱いを区分することが必要です。
 漢字で始まった場合は、特殊記号が出てきたら、終了。カタカナで始まった場合は、ある特殊記号が出てきても継続とするという感じでしょうか。
 
 2.一度にどのくらいの文字列数を取得するのか
 最初は、40個の文字列を取得して、それ以上のものは、再取得機能を付けて、取得するということにしていましたが、長い文章だと、かなり前にあるものは何回も再取得をしなければならなく、面倒になったので、1回限りの800個としました。
 また、同様に保管する文字列の個数も800個としました。800個を越えた場合は、一番古いものをなくしていきます。
 
 3.文字列の取得の方向
 上方向、下方向を切り替えることができるという機能を付けるというのも考えられますが、上方向だけでいいのではないでしょうか。

 4.取得する文字列の字数の条件(何文字以上とか)
 二文字以上としました。これはマクロの中をちょっと変えることで、三文字以上でも、四文字以上でも可能になります。
 
 5.同一文字列の取得を避ける
 この機能は、当然必要でしょうね。
 
 6.選択文字列(別に保管される)の重複を避ける
 この機能は、当然必要でしょうね。
 
 
 

0 件のコメント: