改行コードの置換がうまくできませんNo.35549
aver951 さん 17/01/19 16:01
 
CR+LF、CR、LFの3つの改行コードが混在しているデータがあります。
CRの改行コードを<CR>に、LFの改行コードを<LF>に置換したいので下のようにマクロ
を作りました。

replaceallfast"\r\n","<CR+LF>",regular;
replaceallfast"\r","<CR>",regular;
replaceallfast"\n","<LF>",regular;
replaceallfast"<CR+LF>","\r\n",regular;

しかし、すべての改行が<CR+LF>になってしまいました
どのようにすれば良いのでしょうか?

[ ]
RE:35549 改行コードの置換がうまくできまNo.35550
秀丸担当 さん 17/01/19 16:31
 

改行コードは、基本的にはマクロの検索や置換ではCRとLFの区別は無いです。
"\n"や"\x0A"でどの改行でも検索されるようになっています。

もし混在を視覚的に表したいということだとしたら、設定で改行コードの表示の
見た目を変える方法があります。
[その他]→[ファイルタイプ別の設定]→[デザイン]→[表示]の「改行コードを区
別して表示」をONにすると、CR+LFは←↓という曲がった矢印、CRは←、LFは↓
といった表示になります。

違いを検索するための文として、findspecialという文があります。
CR+LF, LF, CR それぞれについて検索する場合、例えば以下のようなマクロでや
ることができます。

gofiletop;
while(1){
  findspecial 1, 0;//CR+LF
  if(result==false)break;
  insert "<CR+LF>";
}

gofiletop;
while(1){
  findspecial 1, 1;//LF
  if(result==false)break;
  insert "<LF>";
}


gofiletop;
while(1){
  findspecial 1, 2;//CR
  if(result==false)break;
  insert "<CR>";
}

置換でCRとLFが混在したものに置き換えることもできませんが、区別して置き換
えるとしたら、検索後にinsert文のパラメータ指定でできます。
insert文の第2パラメータに1を指定すると、区別して挿入されます。
例:
insert "\x0D\x0A", 1;
insert "\x0A", 1;
insert "\x0D", 1;

[ ]