行末の空白削除マクロって!!No.00891
ドラゴン さん 98/04/23 16:02
 
行末の空白削除マクロって、何処かで見た記憶が無きにしもあらずでチョット自身が
ないんですが、たぶんあった様な気がします。
どなたかご存知でしたら教えて下さい。


[ ]
RE:00891 行末の空白削除マクロって!!No.00893
番頭++ さん 98/04/23 17:26
 
こんちわ ...

あります ...

//  行末    ファイル全体
    $str_fe = "[\x20\x81\x40\t]+$"; //  line end
    replaceallfast $str_fe, "", regular;
endmacro;

//  行末    範囲指定
    $str_fe = "[\x20\x81\x40\t]+$"; //  line end
    replaceallfast $str_fe, "", regular, inselect;
endmacro;

//  行頭    ファイル全体
    $str_ft = "^[\x20\x81\x40\t]+"; //  line top
    replaceallfast $str_ft, "", regular;
endmacro;

//  行頭    範囲指定
    $str_ft = "^[\x20\x81\x40\t]+"; //  line top
    replaceallfast $str_ft, "", regular, inselect;
endmacro;

//  行頭、行末  ファイル全体
    $str_ft = "^[\x20\x81\x40\t]+"; //  line top
    $str_fe = "[\x20\x81\x40\t]+$"; //  line end
    $str_fa = $str_ft + "|" + $str_fe;  //  line all
    replaceallfast $str_fa, "", regular;
endmacro;

//  行頭、行末  範囲指定
    $str_ft = "^[\x20\x81\x40\t]+"; //  line top
    $str_fe = "[\x20\x81\x40\t]+$"; //  line end
    $str_fa = $str_ft + "|" + $str_fe;  //  line all
    replaceallfast $str_fa, "", regular, inselect;
endmacro;

メニューは、まだもっていません。

番頭++ は、明日は人間ドッグでお休みです。
どなたかフォローをお願いします ...

[ ]
RE:00891 行末の空白削除マクロって!!No.00896
杉浦 まさき さん 98/04/24 00:37
 
ドラゴン さん、はじめまして(多分(^^;)。
 杉浦 まさき と申します。

>行末の空白削除マクロって、何処かで見た記憶が無きにしもあらずでチョット自身が
>ないんですが、たぶんあった様な気がします。
>どなたかご存知でしたら教えて下さい。

マクロの方は既に番頭++さんがコメントされてますが、
 別にマクロを使わなくても「置換」だけでいけます。
 #番頭++さんのマクロも、中でやってるのは結局「置換」ですし。

んで、とりあえずお尋ねの件だけ置換の例を書いときます。
 #他の例は番頭++さんのマクロを解析するか、
  「秀丸エディタQ&A集」を参照するかしてみて下さい。

 行末の空白削除の置換を使った例:

  検索文字列:「[  \t]+$」("[" と "]" の間には
               半角スペース/全角スペース/"\t"(タブ)
               が入っています。)
  置換文字列:「」(何もない)


[ ]
RE:00891 行末の空白削除マクロって!!No.00902
秀丸担当 さん 98/04/24 14:12
 
>行末の空白削除マクロって、何処かで見た記憶が無きにしもあらずでチョット自身が
>ないんですが、たぶんあった様な気がします。
>どなたかご存知でしたら教えて下さい。

さらに余談ですが、その他→設定→その他の「保存するときに行末の空白を除去す
る」
をONにしておくと、保存するときに自動的に除去します。

[ ]
RE:00896 行末の空白削除マクロって!!No.00907
496r5035 さん 98/04/25 01:07
 
杉浦様、初めまして、496r5035@ふうりゅうてんしともうします。
さて、ドラゴンさんの質問とも関連しますが、

>ドラゴン さん、はじめまして(多分(^^;)。
> 杉浦 まさき と申します。
>
>>行末の空白削除マクロって、何処かで見た記憶が無きにしもあらずでチョット自身が
>>ないんですが、たぶんあった様な気がします。
>>どなたかご存知でしたら教えて下さい。
>
>マクロの方は既に番頭++さんがコメントされてますが、
> 別にマクロを使わなくても「置換」だけでいけます。
> #番頭++さんのマクロも、中でやってるのは結局「置換」ですし。
>
>んで、とりあえずお尋ねの件だけ置換の例を書いときます。
> #他の例は番頭++さんのマクロを解析するか、
>  「秀丸エディタQ&A集」を参照するかしてみて下さい。
>
> 行末の空白削除の置換を使った例:
>
>  検索文字列:「[  \t]+$」("[" と "]" の間には
>               半角スペース/全角スペース/"\t"(タブ)
>               が入っています。)
>  置換文字列:「」(何もない)

以下の史料の中で空白をなくしたいのです。
七 年 春 , 北 漢 結 契 丹 入 寇 , 命 出 師 禦 之 . 次 陳 橋 驛 , 軍 中
知 星 者 苗 訓 引 門 吏 楚 昭 輔 視

日 下 復 有 一 日 , K 光 摩 盪 者 久 之 . 夜 五 鼓 , 軍 士 集 驛 門 ,
宣 言 策 點 檢 為 天 子 , 或 止 之 , ? 不 聽 . 遲 明 , 逼 寢 所 , 太 宗
 入 白 , 太 祖 起 . 諸 校 露 刃 列 于 庭 , 曰 : 「 諸 軍 無 主 , 願 策
太 尉 為 天 子 . 」 未 及 對 , 有 以 ? 衣 加 太 祖 身 , ? 皆 羅 拜 , 呼
萬 ? , 即 掖 太 祖 乘 馬 . 太 祖 攬 轡 謂 諸 將 曰 : 「 我 有 號 令 , 爾
 能 從 乎 ? 」 皆 下 馬 曰 : 「 唯 命 . 」 太 祖 曰 : 「 太 后 、 主 上 ,
 吾 皆 北 面 事 之 , 汝 輩 不 得 驚 犯 ; 大 臣 皆 我 比 肩 , 不 得 侵 凌
; 朝 廷 府 庫 、 士 庶 之 家 , 不 得 侵 掠 . 用 令 有 重 賞 , 違 即 孥
戮 汝 . 」 諸 將 皆 載 拜 , 肅 隊 以 入 . 副 都 指 揮 使 韓 通 謀 禦 之 ,
 王 ? 昇 遽 殺 通 於 其 第 .

それでですね。[  \t]+$」("[" と "]"を置換機能を使って消去するのですよね?
でもうまくいきません。書式の定義の仕方が間違っているのでしょうか?
以前も秀丸のFAQ集を見てやってみたのですが、どうもうまくいきません。よろしけ
れば、ご教授して下さい。お願いします。

[ ]
RE:00907 行末の空白削除マクロって!!No.00910
noro さん 98/04/25 08:59
 
496r5035@ふうりゅうてんしさん こんにちは(^^) noro です。
横から失礼します<(_ _)>

全部の空白を削除してよいなら、
置換ダイアログの検索文字列に半角スペースを入れ、置換文字列に何も入れな
いで、正規表現のチェックボックスを OFF にして全置換を実行すればできる
と思うのですが、どうでしょうか?全置換ではまずい場合は、それぞれ上検索
や下検索をうまく使って下さい。

検索文字列を [  \t]+$ にして、正規表現のチェックボックスを ON にして
置換する場合、[  \t]+$ は、「半角、全角のスペース、タブのいずれか(の
繰返し)が、行末にある箇所」にヒットしますので、行末ではない文中に含ま
れた空白文字にヒットさせることができません。

#00907の発言中のデータを見るかぎり、削除する対象は半角スペースだけのよ
うですので、前述の方法で対応可能だと思います。不安がある場合は、まず別
の名前でファイルを保存した複製で試してみるといいです(^^)

[ ]
RE:00910 行末の空白削除マクロって!!No.00912
杉浦 まさき さん 98/04/25 13:01
 
496r5035@ふうりゅうてんし さん、noro さん、こんにちは。
 杉浦 まさき です。

>全部の空白を削除してよいなら、
>置換ダイアログの検索文字列に半角スペースを入れ、置換文字列に何も入れな
>いで、正規表現のチェックボックスを OFF にして全置換を実行すればできる
>と思うのですが、どうでしょうか?全置換ではまずい場合は、それぞれ上検索
>や下検索をうまく使って下さい。

フォローどうもでっすm(_ _)m。> noro さん


>検索文字列を [  \t]+$ にして、正規表現のチェックボックスを ON にして

あ、この前の発言で「正規表現をONにして」というのが抜けてましたね。
 どうもすみませんでした&再びフォローどうもですm(_ _)m。> noro さん


[ ]
RE:00912 行末の空白削除マクロって!No.00916
496r5035 さん 98/04/26 00:25
 

noro さん、杉浦 まさきさん、こんにちは。ふうりゅうてんしです。

さっそくご指示のとおりやってみたところ、半角スペースはなくなって無事、文章が
連結されました。
これで、史料入力が楽になりました。本当にありがとうございました。これからもよ
ろしくお願いしま
す。
よかったら、私のHPに遊びに来て下さい。URLは
http://www2s.biglobe.ne.jp/~koba-p/kobayasi.htm
です。ではでは。

[ ]
RE:00912 行末の空白削除マクロって!No.00917
496r5035 さん 98/04/26 00:26
 

noro さん、杉浦 まさきさん、こんにちは。ふうりゅうてんしです。

さっそくご指示のとおりやってみたところ、半角スペースはなくなって無事、文章が
連結されました。
これで、史料入力が楽になりました。本当にありがとうございました。これからもよ
ろしくお願いしま
す。

[ ]
RE:00912 行末の空白削除マクロって!No.00918
496r5035 さん 98/04/26 00:28
 

noro さん、杉浦まさきさん、こんにちは。ふうりゅうてんしです。ご教示の通り操
作してみたところ、無事半角スペースが削除されました。
おかげさまで、史料入力が楽になりました。ありがとうございました。これからもよ
ろしくお願いします。ではでは。

[ ]
RE:00893 行末の空白削除マクロって!!No.00924
番頭++ さん 98/04/27 14:33
 
幾つかのコメントが付いていますが、
けじめは、つけておきます ...

・ Pctools, Sourcer, Brief - 1990/mm

Brief の undo, redo, マクロの手続きに感動した !

・ FD, Vz, (Pctools) - 1992/mm

すでにマクロはいっぱい存在しカスタマイズして利用させて頂きました。
その昔、Vz で KZSAPCE.DEF を作成した記憶があります。1993/??
Vz では 「 ' ' #16 」 の機能を使用しました。結構気に入ってた #16 でした。
その当時、友達が SED, AWK, GREP を送ってくれました。
DOS/V, V-Text (Hi Text ?) - 1993/??

FD の [F11], [F12] になじめず、作者にメールを送ったら、作者から修正個所
情報のメールを頂きました。感動 ! でもそのメールは今はありません。そこで
binary editor を使用して、そして差分を作成しました。

・「卓駆★」、「秀丸エディタ」 - 1994/mm

「予の辞書」では、taxtuku, hidemaru はそのように変換されます。

KZSPACE.DEF と同じようなマクロを、KZHMSSC1.MAC として「秀丸エディタ」に
移植して、まとめました。自分の作成したマクロを移植してくれる人は、普通は、
自分しか居ませんよね。1994/07

Windows 3.x の DOS 窓との戦いには終わりを告げました。わけあって  Wz の出
現を待てなかった一人です。1991 には英語版の Windows 3.0 に出会ったわけで
すから、移行に何年掛かったわけでしょう。カスタマイズした FD, Vz に置き換
わるものが必要だったんです。Pctools, Brief の日本語化も遅すぎました。
Windows 95 OSR 2.x のインストールにさえ、FD, Vz は必要です。

KZHMSSC1.DOC 1.10 からの引用ですが ...

>・概要
>
>この秀丸エディタ用マクロは、 DOS text の再利用、または整形の前処理の為に
>作成したものです。次のような処理が出来ます。 ...
>ワープロ等から DOS text を取り出した時、不要なスペース文字や文字列、不要
>な改行が時として(いっぱい)あるものです。整形前に、取り除きたいですよね。
>
>・さいごに
>
> ... または、他のマクロ
>として分解・合成して利用して下さい。整形に関してはかなり個人の趣味に依存
>する事と思います。出来るだけ、修正のために見やすくコーディングしたつもり
>です。 何時かは空白/整形の命令か関数が「秀丸」に強化される日を夢みていま
>す。...

その KZHMSSC1 に「空白/整形処理」と名付けました。文章と書式から構成され
る (構造体など) ワープロのデータから文章を取り出すのが目的でした。F 社の
ワープロ専用機のテキスト加工が主な目的でした。

KZHMSSC1 に正規表現が用いられなかったのは、SED になじめない作者のスキル
不足と、Vz 信者ならではの「秀丸エディタ」への違和感であったのかもしれま
せん。「人間」って「学習」するんですよね、「慣れ」と「違和感」ですね。

検索、置換の機能に ...all, inselect の機能が強化されたのを知ったのはホン
の数ヶ月前と言い訳を言っといて、KZ_SSP2.mac は 「秀丸エディタ」V 2.xx 対
応に無理矢理しました。まだ必要な人もいるでしょう。1998/04 ...

    "(&1) 行末 空白削除  [tab]      ";
    "(&2) 両端 空白削除  [tab]      ";
    "(&3) 全角 空白削除             ";
    "(&4) 全角/半角 空白削除        ";
    "(&5) 全角 --> 半角 2 空白      ";
    "(&6) 全角/半角 --> 半角 1 空白 ";
    "(&7) 行末 CR/LF 削除     - [S] ";  //  範囲指定
    "(&8) 空行 CR/LF 削除     - [F] ";  //  ファイル全体

この組み合わせをマクロにすればなんとかワープロの文章が取り出せたわけです。
「範囲指定」が出来ることが、どうしても必要でした。 inselect の強化により、
初代「空白/整形」は不要となりました。この処理は「マクロの素」です。個人
的には「MICRO」と呼んでいます。これは正しい英単語ではありません。マクロ
は「分解・合成して利用...」が基本だと思います。「秀丸エディタ」の機能を
「マクロ」で手続きにして 使用しています。それは「ハード」と「ソフト」の
関係に類似しています。

個人的に「機能」と「手続き」の関係を整理したいものです。「抵抗、コンデン
サ、コイル ... 」と「回路」の関係です。「ムカデ」との関係です。すべての
デジタル回路は、AND, OR, NOT で解析出来たはず ...

・23 年前、初めて PF Key にであったときは感動した !
 - という事は、その数年前には存在した機能かな ???

「 Program Function Key 」(Programed, Programable ???)

マシンへの operator command を簡単な「手続き」として登録出来た。機能が拡
張され、ただでさえ、長くなるコマンドをオペレータコンソールのキーに登録で
きた。パネルからコマンドを 16 進数で入れた記憶もまだある。

そして ...

「まくろ屋」の「番頭++」でした。本当は「対馬屋」だったんだけど ツブレた ...

[ ]
RE:00924 行末の空白削除マクロって!!No.00925
番頭++ さん 98/04/27 14:35
 
//*1 *** Macro for 「秀丸エディタ」***
//*1 【マクロ名】 KZ_SSP2.mac - Ver. 02.00 β - 1998/04/27
//*1 【作者】 K.Nakatake / 番頭++ / E-mail:xxxxxxxx@niftyserve.or.jp
//*1 【機能】
//*1 ・空白文字の整理/削除を行う処理。
//*1 ・CR/LF の整理/削除を行う処理も付いています。
//*1 ・「ファイル全体」、または「範囲指定」されたブロックが処理の対象です。
//*1 ・一部の処理では [tab] も処理の対象としています。 // tab
//*1 ・[F] : 「ファイル全体」の処理しかできません。
//*1 ・[S] : 「範囲指定」の処理しかできません。論理行単位で選択してください。
//*1 ・マクロの不備を考慮して Undo, Redo をメニューに追加しました。Debug 用です !
//*1 【注意】
//*1 ・「ファイル全体」の処理の後、最後の行は改行だけの行にします。
//*1 個人の趣味、こだわり !
//*1 ・「空行 CR/LF 削除」の処理で、多くの改行だけの行があると整形されません。
//

 if( version < 216 ){ // inselect
 message "すみません、version のチェックを行なっています !"; about;
 endmacroall;
 }

// endmacroall;
// disableinvert;
// disabledraw;

 $searchbuffer = searchbuffer; #searchoption = searchoption;
 #sw_sel = selecting; // 範囲選択
 if( #sw_sel ){
 #seltopx = seltopx; #seltopy = seltopy;
 #selendx = selendx; #selendy = selendy;
 } else {
 #x_start = x; #y_start = y;
 }
 #code_ff = 0xFF; // end of block.

pp_entry1:
 $kz_title1 = "KZ_SSP2 - 【 空白/整形処理 】";
 call pk_get_today1;
 title basename2 + " : " + $kz_title1 + " - " + $$return + " " + time;
 call pp_init1; // title 0;

 $tbl_menu1[00] = "【 空白/整形処理 】 02.00 β ";
 $tbl_menu1[01] = "(&1) 行末 空白削除 [tab] ";
 $tbl_menu1[02] = "(&2) 両端 空白削除 [tab] ";
 $tbl_menu1[03] = "(&3) 全角 空白削除 ";
 $tbl_menu1[04] = "(&4) 全角/半角 空白削除 ";
 $tbl_menu1[05] = "(&5) 全角 --> 半角 2 空白 ";
 $tbl_menu1[06] = "(&6) 全角/半角 --> 半角 1 空白 ";
 $tbl_menu1[07] = "(&7) 行末 CR/LF 削除 - [S] "; // 範囲指定
 $tbl_menu1[08] = "(&8) 空行 CR/LF 削除 - [F] "; // ファイル全体
 $tbl_menu1[09] = "(&R) Redo - (更新) を Redo する";
 $tbl_menu1[10] = "(&U) Undo - (更新) を Undo する";
 #tbl_menu1 = 10 + 1;

 if( #menu1 <= 00 ){
 mousemenuarray $tbl_menu1, #tbl_menu1;
 #menu1 = result - 1;
 #sw_shift = iskeydown(0x10); // [Shift]
 }

 if( #menu1 <= 00 ){ // [Esc]
 escape; endmacro;
 } else if( #menu1 >= 01 && #menu1 <= 08 ){
 $kz_title2 = basename2 + " : KZ_SSP2 - " + midstr($tbl_menu1[#menu1],5,99);
 title $kz_title2;
 call pp_check1;
 title $kz_title2;
 call pp_proc1;
 } else if( #menu1 == 09 ){
 call pp_test_redo1;
 endmacroall;
 } else if( #menu1 == 10 ){
 call pp_test_undo1;
 endmacroall;
 } else {
 }

pp_exit1:
// gofiletop;
 enableinvert;
 enabledraw;
 beep;
 title 0;
 setsearch $searchbuffer, #searchoption;
 escape;
endmacro;

// process 1
pp_proc1:
 if( #menu1 == 08 ){
 $tbl_menu2[00] = $tbl_menu1[#menu1];
 $tbl_menu2[01] = "(&0) すべて削除";
 $tbl_menu2[02] = "(&1) 1 行 残す";
 $tbl_menu2[03] = "(&2) 2 行 残す";
 #tbl_menu2 = 03 + 1;
 mousemenuarray $tbl_menu2, #tbl_menu2;
 #menu2 = result - 1;
 if( #menu2 <= 00 ){ // [Esc]
 escape; endmacro;
 } else if( #menu2 == 01 ){
 $tbl_s1f[08] = "^\\n";
 $tbl_s1t[08] = "";
 } else {
 $tbl_s1f[08] = "^\\n[\\n]+";
 $tbl_s1t[08] = leftstr("\n\n",(#menu2-1));
 }
 }
 $str_s1f = $tbl_s1f[#menu1]; $str_s1t = $tbl_s1t[#menu1];
 if( ! #sw_sel ){
 escape; gofiletop;
 disableinvert; disabledraw;
 if( #menu1 == 08 && #menu2 >= 02 ){ // spec. or bug ???
 call pp_proc1_08;
//R replaceallfast $str_s1f, $str_s1t, regular;
 } else {
 replaceallfast $str_s1f, $str_s1t, regular;
 }
 gofileend;
 if( x != 0 ){
 insertreturn; // 最後は改行だけの行にします!
 }
 gofiletop;
//R moveto #x_start, #y_start;
 } else {
 disableinvert; disabledraw;
 if( #menu1 == 08 && #menu2 >= 02 ){ // spec. or bug ???
 call pp_proc1_08s;
 } else {
 replaceallfast $str_s1f, $str_s1t, regular, inselect;
 }
 moveto #seltopx, #seltopy;
 }
return;

// "(&7) 行末 CR/LF 削除 - [S] "; // 範囲指定
pp_proc1_07s: // test 1
 #seltopx = seltopx; #seltopy = seltopy;
 #selendx = selendx; #selendy = selendy;
 escape;
 moveto #selendx, #selendy;
 $wk1 = "[0-9A-Za-z.]$*\\n[0-9A-Za-z]"; // words
 searchup $wk1, regular;
 while( result && y >= #seltopy ){
 ##i = ##i + 1;
 escape; right; delete; insert "\x20";
 findup;
 }
 escape;
 moveto #seltopx, #seltopy;
 beginsel; moveto #selendx, #selendy - ##i;
endmacro;
return ##i;

// "(&8) 空行 CR/LF 削除 ";
pp_proc1_08:
 gofileend;
 replaceup $str_s1f, $str_s1t, regular;
 while( result ){
 replaceup $str_s1f, $str_s1t, regular;
 }
return;

pp_proc1_08s:
 escape;
 moveto #selendx, #selendy;
 replaceup $str_s1f, $str_s1t, regular, inselect;
 while( result && y >= #seltopy ){
 ##i = ##i + 1;
 replaceup $str_s1f, $str_s1t, regular, inselect;
 }
 if( y < #seltopy && ##i ){ undo; } // 必要かな !
 escape;
return;

// check 1
pp_check1:
 if( false && basename != "" && updated ){
 $wk1 = "ファイルは (更新) されています !";
 question $wk1 + "\n\nファイルを保存しますか ?";
 if( result ){
 saveas filename2;
 if( ! result ){
 $wk1 = "保存に失敗しました !";
 message $wk1 + "\n\nマクロを中止します !";
 endmacro;
 }
 }
 }
 if( strstr($tbl_menu1[#menu1],"[F]") != -1 ){
 if( #sw_sel ){
 $wk1 = "範囲指定の処理は出来ません。";
 question $wk1 + "\n\nファイル全体の処理を継続しますか ?";
 if( ! result ){ endmacro; }
 escape; #sw_sel = 0;
 #x_start = #seltopx; #y_start = #seltopy;
 moveto #seltopx, #seltopy;
 } else {
 question "ファイル全体を処理しますか ?";
 if( ! result ){
 endmacro;
 call pp_check1_q1;
 }
 }
 } else if( strstr($tbl_menu1[#menu1],"[S]") != -1 ){
 if( ! #sw_sel ){
 call pp_check1_q1;
 }
 } else {
 if( ! #sw_sel ){
 question "ファイル全体を処理しますか ?";
 if( ! result ){
 //R endmacro; // シツコイ !
 call pp_check1_q1;
 }
 }
 }
 if( ( #menu1 == 07 || #menu1 == 08 ) && #sw_sel && ( #seltopx + #selendx ) != 0 ){
 $wk1 = "論理行単位で選択してください !";
 message $wk1 + "\n\nマクロを中止します !";
 endmacro; escape;
 }
 if( false && #sw_shift ){ // [Shift]
 if( strstr("/1/2/4/6/",str(#menu1)) != -1 ){
 $wk1 = $tbl_s1f[#menu1];
 $wk2 = input("正規表現の文字列を変更してください !",$wk1);
 if( ( ! result ) || $wk2 == "" ){
 $wk1 = "変更は行なわれませんでした。";
 message $wk1 + "\n\nマクロを中止します !";
 endmacro;
 }
 $tbl_s1f[#menu1] = $wk2;
 }
 }
return;

// check 1
pp_check1_q1:
 question "範囲指定を行ないますか ?";
 if( ! result ){ endmacro; }
 $wk1 = $kz_title2;
 $wk1 = $wk1 + " 範囲選択をして、[Enter] を押してください !";
 $wk1 = $wk1 + " [Esc] で中止します !";
 inputpos $wk1;
 if( iskeydown( 0x1B ) ){ // [Esc]
 escape; endmacro;
 }
 #sw_sel = selecting; // 範囲選択
 if( ! #sw_sel ){
 $wk1 = "範囲選択は行なわれませんでした。";
 message $wk1 + "\n\nマクロを中止します !";
 endmacro;
 }
 #seltopx = seltopx; #seltopy = seltopy;
 #selendx = selendx; #selendy = selendy;
return;

// init.
pp_init1:
 $str_ltop = "^[\x20\x81\x40\t]+"; // line top // tab
 $str_lend = "[\x20\x81\x40\t]+$"; // line end // tab
 $str_lor = $str_ltop + "|" + $str_lend; // line top or end // tab
 $tbl_s1f[00] = "";
 $tbl_s1f[01] = $str_lend; // tab
 $tbl_s1f[02] = $str_lor; // tab
 $tbl_s1f[03] = "\x81\x40";
 $tbl_s1f[04] = "[\x20\x81\x40]+";
 $tbl_s1f[05] = "\x81\x40";
 $tbl_s1f[06] = "[\x20\x81\x40]+";
 $tbl_s1f[07] = "\\n";
 $tbl_s1f[08] = "^\\n[\\n]+";
 $tbl_s1t[00] = "";
 $tbl_s1t[01] = "";
 $tbl_s1t[02] = "";
 $tbl_s1t[03] = "";
 $tbl_s1t[04] = "";
 $tbl_s1t[05] = "\x20\x20";
 $tbl_s1t[06] = "\x20";
 $tbl_s1t[07] = "";
 $tbl_s1t[08] = "";
return;

// test redo - reset updated file
pp_test_redo1:
 while( updated ){
 question "Redo ? - " + str(##i);
 if( ! result ){ endmacroall; }
 redo;
 if( ! result ){
 message "redo failed !"; endmacroall;
 call pp_test_undo1;
 }
 ##i = ##i + 1;
 }
return;

// test undo - reset updated file
pp_test_undo1:
 while( updated ){
 undo;
 if( ! result ){
 message "undo failed !"; endmacroall;
 call pp_test_redo1;
 }
 }
return;

//*6MICRO pk_get_today1
//*6_Desc. yyyy/mm/dd 形式で今日の日付を得る Ver. 02.00 β
//*6 call pk_get_today1;
//*6 $$return : "yyyy/mm/dd"
//*6 global area : N/A
endmacroall;
pk_get_today1:
 ##i = val(leftstr(date,2));
 $$today1 = midstr("19,20",(!(##i<80)-1)*3,2) + leftstr(date,8);
return $$today1;
//*6MICRO_END

endmacroall;
// end of macro.

[ ]