行の絞込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以外の文字で始まります。

[ ]