適する終了条件は何でしょうか?No.06061
可愛村のたかし さん 09/03/08 17:25
 
 下のように整形をしたいのです。お題を切り出すところまではできたのですが、

  1)お題を文章の先頭に持って行く方法
  2)題の切れ目を判定する方法

が見当がつきません。手動での記録を取ると、文頭に{setcompatiblemode 0x0F;}
が表示されますが、これがヘルプを読んでも理解できません。{copy;}の後で、{d
own; golinetop; paste; insert " ";}の繰り返しになるのですが、{while}文の
終了条件の設定が、句の数が4とは限らないので、これまた分かりません。
 どのような方法が最適なのでしょうか?


”原文

お題 「ちらつく」
幸せになればちらつく欲の神大竹保行(広島県東広島市)
優勝がちらついてから負け続け田中良典(大阪府泉佐野市)
女房の顔ちらついて腰が浮く稲本勝美(川崎市麻生区)
昇進をちらつかされて行く僻地原隼(大阪府枚方市)
お題 「派遣」
有能な派遣が辞めて危機を知り橋立英樹(新潟市西区)
派遣ほど同情引かぬ正規切り石井昭夫(福岡県新宮町)
派遣より先に切りたい人がいる田崎信(東京都三鷹市)
社員より派遣の意見聞く社長白川順一(東京都杉並区)


”整形

ちらつく 幸せになればちらつく欲の神大竹保行(広島県東広島市)
ちらつく 優勝がちらついてから負け続け田中良典(大阪府泉佐野市)
ちらつく 女房の顔ちらついて腰が浮く稲本勝美(川崎市麻生区)
ちらつく 昇進をちらつかされて行く僻地原隼(大阪府枚方市)

派遣 有能な派遣が辞めて危機を知り橋立英樹(新潟市西区)
派遣 派遣ほど同情引かぬ正規切り石井昭夫(福岡県新宮町)
派遣 派遣より先に切りたい人がいる田崎信(東京都三鷹市)
派遣 社員より派遣の意見聞く社長白川順一(東京都杉並区)


//お題の切り出し
disabledraw;
gofiletop;
replaceall "^.+\「\\f.+\\f\」$", "\\1", regular;
endmacro;

[ ]
RE:06061 適する終了条件は何でしょうか?No.06062
Iranoan さん 09/03/08 18:04
 
 可愛村のたかしさん今日は、Iranoan です。
> 文頭に{setcompatiblemode 0x0F;}
> が表示されますが、これがヘルプを読んでも理解できません。
・これまでのマクロとの互換性を維持
・逆に新しい機能をマクロで使う
・動作条件の切り替え
といった目的で使います。

> お題 「ちらつく」
> 幸せになればちらつく欲の神大竹保行(広島県東広島市)
> 優勝がちらついてから負け続け田中良典(大阪府泉佐野市)
> 女房の顔ちらついて腰が浮く稲本勝美(川崎市麻生区)
<snip>
> 派遣 社員より派遣の意見聞く社長白川順一(東京都杉並区)
に整形すれば良いわけですね。ブロック単位で処理していくしか無いでしょう。
最初にその情報を削除してしまうと、区切りが解らなくなります。
 そこでブロック単位に置換していくと良いでしょう
 細かく言葉で説明するのはかえって面倒なので、サンプルを付けておきます。
//------------------------------------------------------------
gofiletop;//取り敢えずファイル先頭に移動
while( 1 ){
  searchdown2 "^(お題 「)(.+?)(」)(?\\2)", regular;
  if( !result )break;
  $$return = gettext( foundtopx, foundtopy, foundendx, foundendy );
  selectline;
  delete;
  beginsel;
  searchdown2 "^お題 「.+?」", regular;//次を検索
  if( result )golinetop2;
  else gofileend;//次が見つからない時は、ファイル終端までを範囲とする
  endsel;
  call ChangeCharacter $$return, "\\", "\\\\";//正規表現を使うので、\ は変換
  replaceallfast "^", $$return + " ", regular, inselect;
}
endmacro;

ChangeCharacter://buffer 中の文字列を置換
//$$1:buffer
//$$2:検索文字列
//$$3:置換文字列
  ##change_char=strlen($$2);
  $$string = "";
  while(1){
    ##number = strstr($$1, $$2);
    if(##number == -1)break;
    else{
      ##long = strlen($$1);
      $$string = $$string + leftstr($$1, ##number) + $$3;
      $$1 = rightstr($$1, ##long - ##number - ##change_char);
    }
  }
  return $$string + $$1;

[ ]
RE:06062 ありがとうございましたNo.06063
可愛村のたかし さん 09/03/10 07:30
 
ありがとうございました。希望のように整形できました。

 私の理解力では、このマクロが読めません。ヘルプ片手に勉強させてもらいます。
また、分からないところがでたら、質問させていただきたいです。
 そのときは、よろしくお願いします。


[ ]