特定バイト目の文字置換についてNo.22753
ts さん 07/03/21 00:01
 
tsと申します。
よろしくお願いいたします。

早速ですが、次のような固定長データで、
4列目の1文字(1バイト)データを、
全て別の文字(1バイト)に置き換えたいのですが、
どのようにしたらよいのか、ご教示いただければと思います。

具体例(4バイト目の文字を全て0に置換)
(前)
123456789
654987126
003569879
951357467

(後)
123056789
654087126
003069879
951057467


よろしくお願いします。

HMJRE.DLL V1.69
秀丸エディタ V5.04
WinXP Pro SP2

[ ]
RE:22753 特定バイト目の文字置換についてNo.22754
Arimac さん 07/03/21 00:29
 
自分だったら

1.正規表現の置換を使って1桁目に0を入れる。
検索文字列:^
置換文字列:0

0123456789
0654987126
0003569879
0951357467

2.BOXカット&ペーストで4桁目に挿入

1230456789
6540987126
0030569879
9510357467

3.BOXカットで5桁目を削除

123056789
654087126
003069879
951057467

[ ]
RE:22753 特定バイト目の文字置換についてNo.22755
Arimac さん 07/03/21 00:42
 
タグ付き正規表現ならもっと簡単でした(^^;
検索文字列:^...\f.\f.*
置換文字列:\00\2

検索文字列の^は行の先頭からマッチ、...は3文字とマッチ、
\fは一致する範囲の区切り、.は1文字とマッチ、
.*はそれ以降の行の全ての文字とマッチ。
置換文字列の\0は最初の\fまでにマッチした文字列と置き換え、
0はそのまま置き換え、\2は2つ目の\f以降とマッチした文字列
と置き換え。
という意味です(^^;

[ ]
RE:22753 特定バイト目の文字置換についてNo.22756
白雲斎 さん 07/03/21 01:52
 
こんにちは“ts”さん、白雲斎です。

>早速ですが、次のような固定長データで、
>4列目の1文字(1バイト)データを、
>全て別の文字(1バイト)に置き換えたいのですが、
>どのようにしたらよいのか、ご教示いただければと思います。

※固定長データだから全て半角ですよね。

検索キーワード  : ^.{3}(.)(?\1)
置換え文字列    : 0
正規表現        : ON


●秀丸担当殿へ

上に示した置換え動作がどうも変です。
(秀丸エディタ 6.50β27)

-- sample data ----
123456789
123456789
123456789
-- sample data ----

ファイル先頭にカーソルを置いて件の置換えを開始します。
┌─┬──┬────────────────────────────┐
│  │結果│操作                                                    │
├─┼──┼────────────────────────────┤
│ 1│ ○ │「置換えの前に確認」を有効にして、すべて確認しながら置換│
│ 2│ ○ │「置換えの前に確認」を無効にして、全置換                │
│ 3│ × │「置換えの前に確認」を有効にして、全置換→全置換        │
└─┴──┴────────────────────────────┘
(3)は、最初にヒットした対象が置き換えられません。
ヒットした1個目を確認して置き換えた後、残りを全置換した場合でも、全置換
の最初にヒットした対象が置き換えられません。
また、ファイル頭に空行を挿入しても結果は同じでした。
再現しますでしょうか?

[ ]
RE:22753 特定バイト目の文字置換についてNo.22757
K'zawa さん 07/03/21 01:53
 
tsさん、こんにちは。
K'zawa/ユーザーです。

>4列目の1文字(1バイト)データを、
>全て別の文字(1バイト)に置き換えたいのですが、
>どのようにしたらよいのか、ご教示いただければと思います。

置換で、正規表現にチェックし、

検索: ^...\f.
置換: \00
または、
検索: ^(...).
置換: \10

ただ、この例では4列目だからよいのですが、
もっと後ろの列、例えば10列だと、
^.........\f. とか書くのは大変なので、

検索: ^.{9}\f.
置換: \00
または、
検索: ^(.{9}).
置換: \10
のようにします。

[ ]
RE:22753 特定バイト目の文字置換についてNo.22763
ts さん 07/03/21 14:35
 
Arimac 様
白雲斎 様
K'zawa 様

皆様、ご親切に処理方法をご教示ありがとうございました。

3者様の方法をそれぞれ確認させていただき、どれも
期待すような動きをすることが確認できました。

おかげさまで所要の操作を行うことが出来ました。
本当に有難うございました。

[ ]
RE:22756 特定バイト目の文字置換についてNo.22766
秀丸担当 さん 07/03/22 14:19
 

>(3)は、最初にヒットした対象が置き換えられません。
>ヒットした1個目を確認して置き換えた後、残りを全置換した場合でも、全置換
>の最初にヒットした対象が置き換えられません。
>また、ファイル頭に空行を挿入しても結果は同じでした。
>再現しますでしょうか?

手順通りにして再現させることができました。
ヒットした扱いのタグがあると、全置換開始位置がヒットした位置と違う位置に
あるため、最初の一つができてませんでした。
V6.50β28のほうで修正させていただきます。

[ ]