|
単なる置換で処理できると思います。意味がわかりませんがとりあえず ...
// >これに 0 を入れたいのが一つです。
//*5 d1.mac
if( code == 0x09 ){ endmacro; } // 個人的な理由 !
replaceallfast "^[0-9][0-9][0-9],\\f.+$", "\\00\\1", regular, inselect;
endmacro;
こんな要望でしょうか ???
//*5 d2.mac
if( code == 0x09 ){ endmacro; } // 個人的な理由 !
replaceallfast "^[^,]+,[^,]+,\\f[^,]+\\f,.+$",
"\\0\\1 \\2", regular, inselect; // 3 space
endmacro;
それともこんな意味ですか ???
, ではなく [Tab] の処理ですが、そのうち発表する未完マクロです。1999/11/01 未
定 ...
//*5 d3.mac 前処理
if( code == 0x09 ){ endmacro; } // 個人的な理由 !
replaceallfast "^[^,]+,[^,]+,\\f[^,]+\\f,.+$",
"\\0\\1\\t\\2", regular, inselect; // とりあえずタブにして !!!
config "w250"; // これを超えると正常な処理にはなりません !!!
selectall;
setclipboard "30,s3,100"; // [Ctrl] + V でコピー
execmacro "KZ_CSVFIX1.mac";
// call pp_KZ_CSVFIX1;
replaceallfast "\x20+$", "", regular, inselect;
gofiletop;
endmacro;
//*1 *** Macro for 「秀丸エディタ」 ***
pp_KZ_CSVFIX1:
//*1 【マクロ名】 KZ_CSVFIX1.mac - Ver. 03.01 - 1999/04/06
//*1 【作者】 K.Nakatake / 番頭++ / E-mail:xxxxxxxx@nifty.ne.jp
//*1 【機能】
//*1 ・CSV ( セパレータ , Tab ) データを固定長に編集する処理。
//*1 ・「カーソル行の以下全体」、
//*1 ・- または「範囲選択」された論理行が処理の対象です。
//*1 ・- 「範囲選択」は、論理行単位で指定してください。
//*1 ・編集の位置パラメータを入力してください。
//*1 ・- " n, : 左詰 -n, : 右詰 0, : 削除 sn, : 空白 n 文字"
//*1 ・- (英小文字で指定してください。)
//*1 ・- (シビアな入力チェックはしていません。)
//*1 ・- パラメータ数の制限があります。(現在は 016 です。)
//*1 ・編集の位置パラメータを指定しないで、[ OK ] を押すと、
//*1 ・- カーソル行から、編集の位置パラメータのパターンを取得して、
//*1 ・- Clipboard にコピーして、マクロを終了します。
//*1 ・この逆処理を行なうマクロは作りません、
//*1 ・- replaceallfast "\x20[\x20]+", "\t", regular, inselect; // です !
//*1 ・自由に変更してご使用下さい !
//*1 【注意】
//*1 ・このマクロ、テストデータは Tab 4 で参照してください。
//*1 ・処理しない、行の後部は削除されます !
//*1 ・Clipboard の内容は変更されます !
//*1 ・searchdown; で、セパレータを探すと速くなるのですが、
//*1 ・- 現実的な使用方法では、
//*1 ・- このマクロを細かく修正するので right; にしてあります。
//*1 ・- searchdown "[^\\t\\n]*[\\t\\n]", regular;
//*1 ・お世辞にも、速い処理マクロとは言えません !
//*1 ・多量なデータ処理には、不向きです !
//
//*D ・(例 1) : 編集の位置パラメータを指定する。
//*D s4,8,s2,-6,s,12,s14,
//*D aa 11111 bbbb
//*D 'aaaaaaaa' "11,1"1 "bbbbbbbb"
//*D 'a "bbbbbbbb
//*D ・(例 2) : 編集の位置パラメータのパターンを取得する。
//*D 次の行は 「3,s1,2,s2,-2,s1,2,s2,-3,s1,」 になります。
//*D aaa bb 11 cc 999
//*D a b 1 c 99
if( ( ! selecting ) && ( code == eof || code == '\x0D' ) ){ endmacro; }
disabledraw; disableinvert;
#sw_sel = selecting; // 範囲選択
if( #sw_sel ){
#seltopx = seltopx; #seltopy = seltopy;
#selendx = selendx; #selendy = selendy;
#x_start = #seltopx; #y_start = #seltopy;
} else {
//R gofiletop;
golinetop2; // 趣味の問題 !!!
#x_start = x; #y_start = y;
}
if( #sw_sel && ( #seltopx + #selendx ) != 0 ){
$wk1 = "範囲選択は論理行単位で指定してください !";
message $wk1 + "\n\nマクロを中止します !";
endmacro; // escape;
}
$wk2 = "8,8,8,8,";
$wk1 = "編集の位置パラメータを入力してください !";
$wk1 = $wk1 + "\n\n n, : 左詰 -n, : 右詰 0, : 削除 sn, : 空白 n 文字";
$wk1 = input($wk1,$wk2);
if( ! result ){ endmacro; }
if( iskeydown( 0x1B ) ){ endmacro; } // [Esc]
if( $wk1 == "" ){
call pp_csv_parm_get1;
endmacro;
//T execmacro "KZ_CSVFIX1.mac";
//T endmacroall;
}
$wk2 = $wk1;
if( rightstr($wk2,1) != "," ){ $wk2 = $wk2 + ","; }
setclipboard $wk2;
#j = 0; #k = 1;
while( strlen($wk2) != 0 ){
#i = strstr($wk2,",");
$wk3 = leftstr($wk2,#i);
$wk2 = midstr($wk2,#i+1,strlen($wk2));
$t_parm1[#j] = $wk3;
#t_parm1[#j] = val($wk3);
if( leftstr($t_parm1[#j],1) == "s" ){ // 空白 n 文字
#m = val(midstr($t_parm1[#j],1,999));
if( #m <= 0 ){ #m = 1; } // 空白 1 文字
#t_parm1[#j] = #m;
if( $t_parm1[#j] != "s" && $t_parm1[#j] != ( "s" + str(#m) ) ){
message "パラメータの s フォーマットが違います ! \n\n" + $t_
parm1[#j];
endmacro;
}
} else {
if( $t_parm1[#j] != "" && $t_parm1[#j] != str(#t_parm1[#j]) ){
message "パラメータの n フォーマットが違います ! \n\n" + $t_
parm1[#j];
endmacro;
}
#m = #t_parm1[#j];
if( #m < 0 ){ #m = ( 0 - #m ); }
}
if( #k < #m ){ #k = #m; }
#j = #j + 1;
if( #j > 016 ){ // 制限する、特別な理由はありません !!!
message "パラメータの数が多すぎます ! \n\n" + str(#j-1);
endmacro;
}
}
$t_parm1[#j] = "[eof]"; // 終了
#t_parm1[#j] = 0;
$space = " ";
while( #k ){
$space = $space + " ";
#k = #k - 1;
}
//T menuarray $t_parm1, #j+1;
if( width < 0250 ){
config "w0250"; // max. w1000 - 「秀丸エディタ」Ver. 3.00 以上
}
escape; moveto #x_start, #y_start;
#i = 0; #j = 0;
while( code != '\x0D' ){
if( code == '\t' ){
#i = #i + 1;
} else if( code == ',' ){
#j = #j + 1;
} else {
}
right;
}
golinetop2;
#sep = 00;
if( ( #i + #j ) == 0 ){
//R message "この行には、セパレータ ( , Tab ) がありません !";
//R endmacro;
$wk3 = "この行には、セパレータ ( , Tab ) がありません !";
$wk3 = $wk3 + "\n\n セパレータを ( 1 文字) 指定してください !";
$wk2 = input($wk3,"|");
if( ! result ){ endmacro; }
if( iskeydown( 0x1B ) ){ endmacro; } // [Esc]
if( $wk2 == "" || strlen($wk2) != 1 ){ endmacro; }
#sep = ascii($wk2);
//T message char(#sep);
}
if( #sep == 00 ){
#sep = ',';
if( #i ){ #sep = '\t'; } // separator Tab.
}
while( code != eof ){
if( #sw_sel && ( y >= #selendy ) ){ break; }
call pp_csv_line1;
right;
}
moveto #x_start, #y_start;
enableinvert; enabledraw;
endmacro;
pp_csv_line1:
#k = 0;
while( $t_parm1[#k] != "[eof]" ){
#j = 0;
#m = #t_parm1[#k];
if( leftstr($t_parm1[#k],1) == "s" ){ // 空白 n 文字
insert leftstr($space,#m);
} else if( #m == 0 ){ // フィールドを削除
#q = 0;
if( code == '\"' || code == '\'' ){
#q = code; delete;
while( code != #q && code != '\t' && code != '\x0D' ){
delete;
}
}
while( code != #sep && code != '\x0D' ){
delete;
}
if( code == #sep ){ delete; }
} else if( #m > 0 ){ // 左詰
#x = x;
call pp_csv_field1;
#i = x;
if( ( #i - #x ) < #m ){
insert leftstr($space,(#m+#x-#i));
//T message str(#m+#x-#i);
} else if( ( #i - #x ) > #m ){
message "このカラムのデータは長すぎます !";
escape; endmacro;
} else {
}
if( code == #sep ){ delete; }
} else if( #m < 0 ){ // 右詰
#m = ( 0 - #m );
#x = x;
call pp_csv_field1;
#i = x;
if( ( #i - #x ) < #m ){
moveto #x, y;
insert leftstr($space,(#m+#x-#i));
moveto #x + #m, y;
} else if( ( #i - #x ) > #m ){
message "このカラムのデータは長すぎます !";
escape; endmacro;
} else {
}
if( code == #sep ){ delete; }
} else {
if( code == #sep ){ delete; }
}
#k = #k + 1;
}
if( code != '\x0D' ){ // 後続のデータは削除 !!!
beginsel; golineend2; delete;
}
return;
pp_csv_field1:
#q = 0;
if( code == '\"' || code == '\'' ){
#q = code; delete;
while( code != #q && code != '\t' && code != '\x0D' ){
right;
}
}
while( code != #sep && code != '\x0D' ){
right;
}
if( #q && ( x > #x ) ){
left;
if( code == #q ){
delete;
} else {
right;
}
}
return;
pp_csv_parm_get1:
golinetop2;
$$wk1 = "";
while( code != '\x0D' ){
##i = 0; ##c = code;
while( code != '\x0D' && code == ##c ){
##i = ##i + 1; right;
}
if( ##c == '\x20' ){
$$wk1 = $$wk1 + "s" + str(##i) + ",";
} else if( ##c >= '0' && ##c <= '9' ){
$$wk1 = $$wk1 + "-" + str(##i) + ",";
} else {
$$wk1 = $$wk1 + str(##i) + ",";
}
}
setclipboard $$wk1;
golinetop2;
message $$wk1;
//R endmacroall;
return;
endmacroall;
// end of macro.
今日は、風邪で死んでます、枕もとの 535E で 。。。
明日は回復するのやら ...
replaceallfast ",", "\\t", regular, inselect; // , ==> [Tab]
endmacro;
またねます 。。。
|
|