置換機能No.01691
YH さん 98/09/14 18:17
 
 先日,CSV形式(固定長入力)のファイルで,コンマとコンマの間に空白が2個ある
ケースが多数あったため,置換機能の全置換を用いて,  ,を,,に変換しました.詳し
い数字は覚えていませんが,少なくとも100以上の置換をおこない,正常終了したよ
うだったのでそのまま保存しました.ところが,その後の解析でまだ,  ,が残ってい
ることが判明しました.
 同様の異なるファイルでも,全置換をおこなった後に再び同じ置換で全置換をおこ
なって置換できたことから,全置換がcompleteでないことがわかりました.
 これがCSV形式だけの問題でなければゆゆしき事態と思い,書き込みを決意しまし
た.これは何らかの仕様によるものなのでしょうか,それとも固定長入力の問題なの
でしょうか?数回同じ作業を繰り返すと,  ,はありませんというメッセージが出て真
に全置換が終わったことがわかりますので,置換の時のオプションの問題ではないと
思うのですが・・・

[ ]
RE:01691 置換機能No.01692
番頭++ さん 98/09/14 19:35
 
テストデータです。空白をーにしました。しかも全角です。
ーAA、ー、ー、ー、aaー、ー、ーー、ーqーqー、ー、、ー|

if( ! selecting ) endmacro;
//「、ー、」を「、、」で置換する。
replaceallfast "、ー、", "、、", inselect;
endmacro;

ーAA、、ー、、aaー、、ーー、ーqーqー、、、ー|
となります。

if( ! selecting ) endmacro;
//「ーの 1 文字以上の繰り返しがある場合と、」文字列
//または「、とーの 1 文字以上の繰り返しがある場合」文字列
//を「、」で置換する。
replaceallfast "ー+、|、ー+", "、", regular, inselect;
endmacro;

ーAA、、、、aa、、、ーqーq、、、|
となります。

if( ! selecting ) endmacro;
//「ーの 0 文字以上の繰り返しがある場合と、とーの 0 文字以上の繰り返しがある場合」文字列を
//「、」で置換する。
replaceallfast "ー*、ー*", "、", regular, inselect;
endmacro;

ーAA、、、、aa、、、qーq、、、|
となります。

正規表現 (regular) による置換というそうです。

こう言う問題ですか、うちはまだ Hidemaru Ver 2.24 ですが ...

[ ]
RE:01692 置換機能No.01693
番頭++ さん 98/09/14 20:06
 
つまり、置換はそのターゲットを検索(模索)した後、そのターゲットを置換します。
次のターゲットは、置換された後の、次の文字列になります。
これが「秀丸エディタ」の仕様でしょう ...

[ ]
RE:01691 置換機能No.01699
秀丸担当 さん 98/09/17 11:18
 
> 先日,CSV形式(固定長入力)のファイルで,コンマとコンマの間に空白が2個ある
>ケースが多数あったため,置換機能の全置換を用いて,  ,を,,に変換しました.詳し
>い数字は覚えていませんが,少なくとも100以上の置換をおこない,正常終了したよ
>うだったのでそのまま保存しました.ところが,その後の解析でまだ,  ,が残ってい
>ることが判明しました.

折り返しの位置に全角文字の半分がきているようなとき、置換をすると
おかしくなる,または折り返した次の行にタブがあるようなとき、置換
がおかしくなるというバグがありました。

それと関係するかどうかわかりませんが、そのバグはV2.26で直っています。
もし古いバージョンを使っていたら新しいものにしてください。
既に新しいものを使っていたら、バグかもしれません。

[ ]