行の絞込No.03172
haru さん 02/06/01 22:00
 

サンプル �bP
データ
サンプル �bQ
データ
サンプル �bR
データ
サンプル �bS
データ
サンプル �bT
データ
サンプル �bU
データ
サンプル �bV
データ

 以上のようなデータがあります。データは英数字、日本語で半角
も全角も混在しています。複数行になるときもあります。

 サンプル �bフ開始番号fromと終了番号toを半角数字で入力して、
その範囲のデータを削除したり、残したりしたいのですが。

 例えば、入力された開始番号と終了番号が2と4なら

 残すときは、
サンプル �bQ
データ
サンプル �bR
データ
サンプル �bS
データ

 となり、
 削除なら

サンプル �bP
データ
サンプル �bT
データ
サンプル �bU
データ
サンプル �bV
データ

 としたいのですが。
 なお、from、toが何もないときはそれぞれファイルの最初、最後
までを対象に処理したいと思います。

 検索コマンドを使ってやろうとしましたが、うまくいきません。
 よろしくお願いします。

[ △ ]
RE:03172 行の絞込No.03173
haru さん 02/06/01 23:20
 
 補足します。
 投稿してから気が付いたんですが、サンプルは7個だけでなく、
複数個、少なくとも3桁にはなります。余裕を持って、5桁位は必
要です。
 因みに、サンプル �bフ後の数字は全角です。

[ △ ]
RE:03173 行の絞込No.03174
encodingshiftjis さん 02/06/02 08:42
 
サンプル3 の行頭で1文字選択反転しておいて
サンプル5 を検索、反転範囲が伸びている状態で
Shift+→ でサンプル6の行頭までカーソルを動かす。
手操作ならこんなものです。(キーがWindows標準として)

[ △ ]
RE:03173 行の絞込No.03175
山紫水明 さん 02/06/02 09:51
 
 haruさん,こんにちは。

 手作業でもできそうですが,マクロでやるとすれば,次のようなものでどう
でしょう。

//---------------------------------------//
$from = input("開始番号");
if( $from == "" ) $from = "1";
$to = input("終了番号");
call HanToZen $from;
$from = $$return;
$to = str(val($to) + 1);
call HanToZen $to;
$to = $$return;
menu "&1 残す","&2 削除";
#r = result;
gofiletop;
if(#r == 2) goto Delete;

//残す
searchdown "��" + $from + "$", regular;
golinetop;
beginsel;
gofiletop;
delete;
if( $to == "1" ) endmacro;
searchdown "��" + $to + "$", regular;
golinetop;
beginsel;
gofileend;
delete;
endmacro;

Delete://削除
call HanToZen $from;
searchdown "��" + $from + "$", regular;
golinetop;
beginsel;
if( $to == "1" ) gofileend;
else {
    searchdown "��" + $to + "$", regular;
    golinetop;
}
delete;
endmacro;

HanToZen:   //半角数字→全角数字
##n = strlen( $$1 );
while( ##i < ##n ) {
    $$a = midstr( $$1, ##i, 1 );
    $$a = char( ascii( $$a ) +0x821f );
    $$b = $$b + $$a;
    ##i = ##i + 1;
}
return $$b;
//---------------------------------------//

     では, (^^)/~
                                        山紫水明

[ △ ]
RE:03172 行の絞込No.03176
きいろいまふらあ さん 02/06/02 21:37
 
何点か確認をば。

番号は必ず1から始まるのか?
番号が飛ぶことはあるのか?
番号は必ず昇順に並んでいるのか?
データが「サンプル �avで始まることはないという前提でよいか?

> 検索コマンドを使ってやろうとしましたが、うまくいきません。

アプローチは大きく分けて二通り

上から順番に残すデータかどうかチェックしながら降りていく

あるいは

残さない領域を一気に選択して削除する

というとこだと思います。

[ △ ]
RE:03176 行の絞込No.03177
haru さん 02/06/03 11:18
 
 encodingshiftjisさん、山紫水明さん、きいろいまふらあさん、
こんにちは。
 うまく行きました。ありがとうございます。
 確かに、サンプル�bェちょうどないときとか、以下の例外的なケー
スがあると良くないときがあります。

>何点か確認をば。

>番号は必ず1から始まるのか?
 最初はそうですが、削除、残す処理を何回か繰り返すうちにそう
でなくなる可能性があります。

>番号が飛ぶことはあるのか?
 上記により、あります。

>番号は必ず昇順に並んでいるのか?
 これは必ずそうなります。

>データが「サンプル�avで始まることはないという前提でよいか?
 データは必ず「サンプル�av以外の文字で始まります。

[ △ ]