時間の置き換えNo.26564
cent さん 09/05/15 14:34
 
お世話になります。

時間表記の置き換えを教えてください。

2009,6,26,7:05pm
2009,6,10,11:00am

上記を下記に変換。

2009/6/26 19:05
2009/6/10 11:00

マクロの記述を教えてください。

よろしくお願いいたします。


[ ]
RE:26564 時間の置き換えNo.26565
秀丸担当 さん 09/05/15 16:08
 

もしamだけだとしたら、マクロを使わなくても正規表現を使った置換でできるの
ですが、pmの計算をするということになると、マクロを使わないとできなさそう
です。

試しに、あまり効率は良くないかもしれないですが、作ってみました。
もし会議室の投稿の都合上、行の途中に改行が入ってしまっているようでしたら、
編集して繋げていただけたらできると思います。

---------------------------
disabledraw;
$s=searchbuffer;
$r=replacebuffer;
#f=searchoption;
gofiletop;
$search="([0-9][0-9][0-9][0-9]),([0-9][0-9]?),([0-9][0-9]?),([0-9][0-9]?):
([0-9][0-9]?)(am|pm)";
$searchAmpm="([0-9][0-9][0-9][0-9]),([0-9][0-9]?),([0-9][0-9]?),([0-9][0-
9]?):([0-9][0-9]?)(am|pm)(?\\6)";
$searchHour="([0-9][0-9][0-9][0-9]),([0-9][0-9]?),([0-9][0-9]?),([0-9][0-
9]?):([0-9][0-9]?)(am|pm)(?\\4)";
$searchMin="([0-9][0-9][0-9][0-9]),([0-9][0-9]?),([0-9][0-9]?),([0-9][0-
9]?):([0-9][0-9]?)(am|pm)(?\\5)";
while(1){
 searchdown2 $search, regular;
 if( result == false ) break;
 #xHit=foundtopx;
 #yHit=foundtopy;
 moveto #xHit,#yHit;
 searchdown2 $searchAmpm, regular;
 $ampm=gettext(foundtopx,foundtopy,foundendx,foundendy);
 if( $ampm == "am" ) {
  moveto #xHit,#yHit;
  replacedown $search,"\\1/\\2/\\3 \\4:\\5", regular;
 } else if( $ampm == "pm" ) {
  moveto #xHit,#yHit;
  searchdown2 $searchHour, regular;
  $hour=gettext(foundtopx,foundtopy,foundendx,foundendy);
  moveto #xHit,#yHit;
  searchdown2 $searchMin, regular;
  $min=gettext(foundtopx,foundtopy,foundendx,foundendy);
  moveto #xHit,#yHit;
  replacedown $search,"\\1/\\2/\\3 ", regular;
  insert str(val($hour)+12)+":"+$min;
 }
}
setsearch $s,#f;
setreplace $r;
endmacro;

---------------------------


あるいは、pmの部分は力ずくで以下のようにしてしまったほうが手っ取り早いか
もしれません。
次にこういうことが必要になった場合でも、複雑なマクロを考える必要が無いの
で比較的楽に作ることができるのではないかと思います。

amの場合は、正規表現で、タグ付き正規表現の置換ででき、pmもその応用でして
しまうと効率は悪いですが作るのが楽かもしれません。
正規表現とタグ付き正規表現については、秀丸エディタのヘルプの、
目次− 検索系コマンド− 正規表現−一般的正規表現互換のタグ付き正規表現
のページを参照していただけると分かりやすいかもしれません。


---------------------------
disabledraw;
$s=searchbuffer;
$r=replacebuffer;
#f=searchoption;
replaceallfast "([0-9][0-9][0-9][0-9]),([0-9][0-9]?),([0-9][0-9]?),([0-9][0-
9]?):([0-9][0-9]?)am", "\\1/\\2/\\3 \\4:\\5", regular;
replaceallfast "([0-9][0-9][0-9][0-9]),([0-9][0-9]?),([0-9][0-9]?),(0?0):([0
-9][0-9]?)pm", "\\1/\\2/\\3 12:\\5", regular;
replaceallfast "([0-9][0-9][0-9][0-9]),([0-9][0-9]?),([0-9][0-9]?),(0?1):([0
-9][0-9]?)pm", "\\1/\\2/\\3 13:\\5", regular;
replaceallfast "([0-9][0-9][0-9][0-9]),([0-9][0-9]?),([0-9][0-9]?),(0?2):([0
-9][0-9]?)pm", "\\1/\\2/\\3 14:\\5", regular;
replaceallfast "([0-9][0-9][0-9][0-9]),([0-9][0-9]?),([0-9][0-9]?),(0?3):([0
-9][0-9]?)pm", "\\1/\\2/\\3 15:\\5", regular;
replaceallfast "([0-9][0-9][0-9][0-9]),([0-9][0-9]?),([0-9][0-9]?),(0?4):([0
-9][0-9]?)pm", "\\1/\\2/\\3 16:\\5", regular;
replaceallfast "([0-9][0-9][0-9][0-9]),([0-9][0-9]?),([0-9][0-9]?),(0?5):([0
-9][0-9]?)pm", "\\1/\\2/\\3 17:\\5", regular;
replaceallfast "([0-9][0-9][0-9][0-9]),([0-9][0-9]?),([0-9][0-9]?),(0?6):([0
-9][0-9]?)pm", "\\1/\\2/\\3 18:\\5", regular;
replaceallfast "([0-9][0-9][0-9][0-9]),([0-9][0-9]?),([0-9][0-9]?),(0?7):([0
-9][0-9]?)pm", "\\1/\\2/\\3 19:\\5", regular;
replaceallfast "([0-9][0-9][0-9][0-9]),([0-9][0-9]?),([0-9][0-9]?),(0?8):([0
-9][0-9]?)pm", "\\1/\\2/\\3 20:\\5", regular;
replaceallfast "([0-9][0-9][0-9][0-9]),([0-9][0-9]?),([0-9][0-9]?),(0?9):([0
-9][0-9]?)pm", "\\1/\\2/\\3 21:\\5", regular;
replaceallfast "([0-9][0-9][0-9][0-9]),([0-9][0-9]?),([0-9][0-9]?),(10):([0-
9][0-9]?)pm", "\\1/\\2/\\3 22:\\5", regular;
replaceallfast "([0-9][0-9][0-9][0-9]),([0-9][0-9]?),([0-9][0-9]?),(11):([0-
9][0-9]?)pm", "\\1/\\2/\\3 23:\\5", regular;
setsearch $s,#f;
setreplace $r;
endmacro;

[ ]
RE:26565 時間の置き換えNo.26566
cent さん 09/05/15 16:54
 
>
Era perfecto. Gracias.

[ ]