日付入力に関しての質問No.05342
nofu さん 00/03/16 07:57
 
おはようございます。nofuと申します。秀丸を毎日使っていて、本当に、お世話にな
っています。そこで、早速質問なんですが、分かっている方、情報など有ったら教え
ていただきたいのです・・・・
日付を入力するときに、よく今日より以前、以後の日付を入力する機会が結構多くあ
り、その度にカレンダーを見て曜日を確かめたり、ソフトを立ち上げて曜日を確認し、
何月何日何曜日という風に入力しています。日付を入力するさいに簡易なカレンダー
か何か表示できて、選択する事により任意の日付と曜日が出てくるようなマクロはない
でしょうかね。情報などございましたら教えてください。よろしく、お願いします。

[ ]
RE:05342 日付入力に関しての質問No.05345
ENCODINGSHIFTJIS さん 00/03/16 11:07
 
>日付を入力するさいに簡易なカレンダーか何か表示できて、
>選択する事により任意の日付と曜日が出てくるようなマクロはないでしょうかね。
>情報などございましたら教えてください。よろしく、お願いします。

冗談モードでは
カレンダーは少量の行ですむので、1年分の日の行を作りファイルにしておき
参照するというのがあります。 「多様な日付表示形式」には対応できないが。
------ calendar.txt
2000年3月16日 (木)
2000年3月17日 (金)
....

カーソルの使える閲覧モードがあると便利かな。

__E__




[ ]
RE:05342 日付入力に関しての質問No.05346
かかし さん 00/03/16 13:15
 
かかしです。

>日付を入力するときに、よく今日より以前、以後の日付を入力する機会が結構多くあ
>り、その度にカレンダーを見て曜日を確かめたり、ソフトを立ち上げて曜日を確認し、
>何月何日何曜日という風に入力しています。日付を入力するさいに簡易なカレンダー
>か何か表示できて、選択する事により任意の日付と曜日が出てくるようなマクロはない
>でしょうかね。情報などございましたら教えてください。よろしく、お願いします。

べたべたな方法ですが、以下の方式が考えられます。
カレンダーを入力するモジュールを作ればなんとかなりそうですが
いろいろと面倒なのでとりあえず、ここまで・・・

//カレンダー表示挿入マクロ
//ins_cal.mac
//

    while(1){
        $cal[0] = "→";
        $cal[1] = "←";
        $cal[2] = "2000/3/1";
        $cal[3] = "2000/3/2";
        $cal[4] = "2000/3/3";
        $cal[5] = "2000/3/4";
        $cal[6] = "2000/3/5";
        $cal[7] = "2000/3/6";
        $cal[8] = "2000/3/7";
        $cal[9] = "2000/3/8";
        $cal[10] = "2000/3/9";
        $cal[11] = "2000/3/10";
        $cal[12] = "2000/3/11";
        $cal[13] = "2000/3/12";
        $cal[14] = "2000/3/13";
        $cal[15] = "2000/3/14";
        $cal[16] = "2000/3/15";
        $cal[17] = "2000/3/16";
        $cal[18] = "2000/3/17";
        $cal[19] = "2000/3/18";
        $cal[20] = "2000/3/19";
        $cal[21] = "2000/3/20";
        $cal[22] = "2000/3/21";
        $cal[23] = "2000/3/22";
        $cal[24] = "2000/3/23";
        $cal[25] = "2000/3/24";
        $cal[26] = "2000/3/25";
        $cal[27] = "2000/3/26";
        $cal[28] = "2000/3/27";
        $cal[29] = "2000/3/28";
        $cal[30] = "2000/3/29";
        $cal[31] = "2000/3/30";
        $cal[32] = "2000/3/31";


        menuarray $cal, 33;
       
        #a = result;
        if(#a == 0){
            break;
        }else if(#a == 1){
            message "次の月を表示";
        }else if(#a == 2){
            message "前の月を表示";
        }else{
            insert $cal[#a-1];
            break;
        }
    }

endmacro;



---かかし

[ ]
RE:05345 日付入力に関しての質問No.05350
ENCODINGSHIFTJIS さん 00/03/16 16:24
 
> 「多様な日付表示形式」には対応できないが。全角半角など切りがない

// youbi.mac ----------------------------
// 日付に曜日を付ける WSH の日付関数使用
//
$yymmdd=input("00 12 31 の形で入力する");// とりあえず最小2000
if(!result)endmacro
if(!selecting){insert " ";beginsel left;}// >CON 地点を作成
run "Cscript //B C:\\Windows\\Temp\\youbi.js "+$yymmdd+" >CON";
//2000年2月14日 (月)

// youbi.js 曜日計算  ---------------------------------
var weekd  =new Array("日","月","火","水","木","金","土");
var stdout  =WScript.StdOut;    //標準出力
var intYear =WScript.Arguments.Item(0)+2000;
var intMonth=WScript.Arguments.Item(1);
var intDay  =WScript.Arguments.Item(2);
var objDate=new Date( intYear,intMonth-1,intDay );
// 私のWin ではsubstr が必要だった、不要に違いない。
stdout.WriteLine(intYear.substr(1)+"年"+intMonth+"月"+intDay+"日 ("+
                                  weekd[objDate.getDay()]+")");

早くはなかった。

__E__

[ ]
RE:05350 日付入力に関しての質問No.05361
nofu さん 00/03/17 08:25
 
>// youbi.mac ----------------------------
>// 日付に曜日を付ける WSH の日付関数使用
>//
>$yymmdd=input("00 12 31 の形で入力する");// とりあえず最小2000
>if(!result)endmacro
>if(!selecting){insert " ";beginsel left;}// >CON 地点を作成
>run "Cscript //B C:\\Windows\\Temp\\youbi.js "+$yymmdd+" >CON";
>//2000年2月14日 (月)
>
>// youbi.js 曜日計算  ---------------------------------
>var weekd  =new Array("日","月","火","水","木","金","土");
>var stdout  =WScript.StdOut;    //標準出力
>var intYear =WScript.Arguments.Item(0)+2000;
>var intMonth=WScript.Arguments.Item(1);
>var intDay  =WScript.Arguments.Item(2);
>var objDate=new Date( intYear,intMonth-1,intDay );
>// 私のWin ではsubstr が必要だった、不要に違いない。
>stdout.WriteLine(intYear.substr(1)+"年"+intMonth+"月"+intDay+"日 ("+
>                                  weekd[objDate.getDay()]+")");
ENCODINGSHIFTJIS様、早速の対応ありがとうございます。
やってみたのですが文法エラー11というのがでます。ちなみに、上記の文をyoubi.
macというファイル名で登録して実行してみました。初心者なので、良く分かりませ
ん。もし、追加する操作方法などありましたら教えて頂きたいのですが・・・ nofu


[ ]
RE:05346 日付入力に関しての質問No.05362
nofu さん 00/03/17 08:29
 
>
>べたべたな方法ですが、以下の方式が考えられます。
>カレンダーを入力するモジュールを作ればなんとかなりそうですが
かかし様 早速の対応ありがとうございます。こういう方法もあるのですね
色々と試してみたいと思います。マクロに関しては初心者で自分で作ることが出来な
いのでこういうものをすぐ作れる人はすごいなーと思います。まずは、お礼まで・・
 nofu


[ ]
RE:05361 日付入力に関しての質問No.05363
ENCODINGSHIFTJIS さん 00/03/17 09:40
 
WSH2.0日本語版が公開されました(1999年11月)。
一応最新版のつもりです。Win95 IEが5.0なら自動的に入っているはず?
 9:04 C:\Windows\TEMP> cscript/?
Microsoft (R) Windows Script Host Version 5.1 for Windows
Copyright (C) Microsoft Corporation 1996-1999. All rights reserved.
使い方: CScript scriptname.extension [オプション...] [引数...]

insert str(version);endmacro 305

番号の出る文法エラーですから JavaScript のほうですよね?
たいてい ソースの行、文字位置も同時に出ているはずですが。
可能性高いのは最終の文字列式ですかね?1項毎にしますか?
substr(1) を除いて

 intYear
+"年"
+intMonth
+"月"
+intDay
+"日 ("
+weekd[ objDate.getDay() ]
+")"

あとは、起動時オプション //B を //I にすれば追加のメッセージが
見えるかも、 Cscript を Wscript にも替えてみる。

WSH のデバッグは秀丸起動でなくとも、DOS窓からでもできます。

とりあえず、これで。さらにダメなら後ろからソースをコメントアウト
してゆき文法エラー11の出る行を突き止める、少ないからすぐ終わる。

// 日付入力は半角文字

[ ]
RE:05361 日付入力に関しての質問No.05364
きいろいまふらあ さん 00/03/17 10:39
 
よこから、きいろいまふらあです。

>>// youbi.js 曜日計算  ---------------------------------

この行以降はyoubi.jsという名前のファイルにして、c:\windows\tempという
フォルダに置いておかなきゃいけないです。

[ ]
RE:05364 日付入力に関しての質問No.05368
nofu さん 00/03/17 12:54
 
>よこから、きいろいまふらあです。
>
>>>// youbi.js 曜日計算  ---------------------------------
>
>この行以降はyoubi.jsという名前のファイルにして、c:\windows\tempという
>フォルダに置いておかなきゃいけないです。

きいろいまふらあ様
ありがとうございました。
上記のようにやってみたところ、とりあえず
エラーがなく進んでするようですが、曜日を出力まではしてきません。
WSHとかいうもののせいでしょうかね?
一応win98なのですが、とりあえずWSHについて調べて見ます。
まずは、ご報告まで・・・

[ ]
RE:05362 日付入力に関しての質問No.05371
かかし さん 00/03/17 13:32
 
かかしです。

ENCODINGSHIFTJISさんのをヒントに(曜日だけ求めればいいという点)
ざーっと作ってみました。
そんなもんで不正入力は、なるべくしないで下さい。

#むしろ、自分で使いやすいようにいじって結構です。
#入力方法、出力結果など、好みに合わせてご使用下さい。

##日付を計算する部分って、汎用性あるかなあ?


//  日付を挿入するモジュール
//           ins_cal.mac
//  Kakashi   2000.3.17
//
// 入力したい位置にたとえば2000年3月17日の日付を入力したかったら
//  000317|
//        ↑カーソル位置
//  と入力してこのマクロを実行する。

    disableinvert;
    beginsel;
    wordleft;
    while( !(48 <= code && code <= 57) ){
        right;
    }
    $Inputchar = gettext(seltopx,seltopy,selendx,selendy);
    beginsel;
    wordright;
    delete;
    if(strlen($Inputchar) != 6){
        message "年月日は、\"000101\"の形で入力して下さい。 ";
        endmacro;
    }
    #Inputnum = val($Inputchar);
    #year = val(leftstr($Inputchar,2));
    #month = val(midstr($Inputchar,2,2));
    #day = val(rightstr($Inputchar,2));
//  message str(#year);
//  message str(#month);
//  message str(#day);
   
    // 最低限のエラーチェック
    // 2/31とかも指定できちゃいます。
    if(#year > 99 || #month > 12 || #day > 31 ||#month*#day == 0){
        message "年月日が正しく入力されていません。";
    }
//----ここから、日数を計算している。    
    #year = #year + 2000;
    #month = #month -1;
   
    #month_t[0]  = 31;
    #month_t[1]  = 28;
    #month_t[2]  = 31;
    #month_t[3]  = 30;
    #month_t[4]  = 31;
    #month_t[5]  = 30;
    #month_t[6]  = 31;
    #month_t[7]  = 31;
    #month_t[8]  = 30;
    #month_t[9] = 31;
    #month_t[10] = 30;
    #month_t[11] = 31;
   
    $week_t[0] = "(月)";
    $week_t[1] = "(火)";
    $week_t[2] = "(水)";
    $week_t[3] = "(木)";
    $week_t[4] = "(金)";
    $week_t[5] = "(土)";
    $week_t[6] = "(日)";
   
    #uruu = (#year%4 == 0);//百年も使わないでね。
   
    // 前年までの2000/1/1からの日数の取得
    if(#year != 2000){
        #totaldays = (#year - 2000)*365 + ((#year - 2000)/4)+1;
    }
   
    // 今年に入ってから先月までの日数の取得
    #temp_month = 0;
    #yeardays = 0;
    while((#month-1) >= #temp_month){
   
        if(#temp_month != 1){
            #totaldays = #totaldays + #month_t[#temp_month];
        }else{
            #totaldays = #totaldays + #month_t[#temp_month] + #uruu;
        }
        #temp_month = #temp_month+1;
    }
    // 今月の日数の取得
    #totaldays = #totaldays + #day;
   
//  message "2000/1/1から" + str(#totaldays)+" 日目";
//  message  $week_t[(#totaldays+4) % 7];
    insert str(#year) + "/" + str(#month+1) + "/" + str(#day) + $week_t[(#to
taldays+4) % 7];
   
endmacro;

--かかし

[ ]
RE:05368 日付入力に関しての質問No.05372
ENCODINGSHIFTJIS さん 00/03/17 14:01
 
>一応win98なのですが、とりあえずWSHについて調べて見ます。

// kakunin.js 曜日計算確認 -----------------------------
var weekd  =new Array("日","月","火","水","木","金","土");
var stdout =WScript.StdOut;    //標準出力
var                      objDate=new Date( 2000,2,14 ); // 3月14日
stdout.WriteLine(        objDate.getDay()  );           // 2 です
stdout.WriteLine(  weekd[objDate.getDay()] );       // 火 です

13:53 C:\Windows\TEMP> cscript kakunin.js
Microsoft (R) Windows Script Host Version 5.1 for Windows
Copyright (C) Microsoft Corporation 1996-1999. All rights reserved.

2


すぐ確認。

[ ]
RE:05342 日付入力に関しての質問No.05381
山紫水明 さん 00/03/17 17:12
 
    nofuさん こんにちは。

》日付を入力するときに、よく今日より以前、以後の日付を入力する機会が結構多
》くあり、その度にカレンダーを見て曜日を確かめたり、ソフトを立ち上げて曜日を
》確認し、何月何日何曜日という風に入力しています。

 以下のものお気に召すかどうか,一度試してみてください。

 では, (^^)/~
                                        山紫水明
// ----- Insertdate.mac ---------------------------------------------- //
//              日付を挿入,そのままリターンで当日の日付が入る

$today = rightstr(year, 2) + month + day;
$date = input("6桁で日付入力 (例" + $today + ")", $today);
if(!result)endmacro;
if(result == 0) $date = $today;
#year = val(leftstr($date, 2));
#month = val(midstr($date, 2, 2));
#day = val(rightstr($date, 2));
if(#month > 12 || #month < 1 || #day < 1 || #day > 31){
    message"日付に誤りがあります\n" + $date;
    endmacro;
}
if(#year < 50) #year = #year + 2000;
else #year = #year + 1900;
#preyear = #year - 1;
#you = (#year + #preyear/4 + #preyear/400 - #preyear/100)%7;
                                        // 元日の曜日計算
if(#year%4 == 0 && (#year%100!= 0 || #year%400 == 0)){
    $ym = "31 29 31 30 31 30 31 31 30 31 30 31";
    }else{
    $ym = "31 28 31 30 31 30 31 31 30 31 30 31";
}
#m = 1;
#yeardays = 0;
while(#m < #month){
    #month[#m] = val(midstr($ym, (#m - 1)*3, 2));
    #yeardays = #yeardays + #month[#m];
    #m = #m + 1;
}
#yeardays = #yeardays + #day;
#you = (#you + #yeardays - 1)%7;  // 曜日計算
$youbi = midstr("日月火水木金土", #you * 2, 2);
insert str(#year) + "年" + str(#month) + "月" + str(#day) +
    "日" + "(" + $youbi + ")";
endmacro;
// ----------------------------------------------------------- //


[ ]
RE:05381 日付入力に関しての質問No.05382
ENCODINGSHIFTJIS さん 00/03/17 17:31
 
カレンダをWeb検索すると山のように出てきました。
while で回すのはいくら何でも。

// DayofWeek.mac    Zellerの公式 で計算 (有理式の味わい)
// 日=0 〜 土=6
#y=2000; #m=3; #d=17;

if(#m<3){#y=#y-1; #m=#m+12; }
#DoW=(#y+#y/4-#y/100+#y/400+(13*#m+8)/5+#d) % 7;
menu str(#DoW);
// 年の切れ目を3月1日にして、1,2月を前年の13,14月
// として計算するところがミソ。数学趣味を楽しんで下さい。

これを書くのが面倒で WSH を使ってしまった。
__E__

[ ]
RE:05381 日付入力に関しての質問No.05383
かかし さん 00/03/17 17:35
 
かかしです。

> 以下のものお気に召すかどうか,一度試してみてください。

すでにあったんですね、そんなマクロが・・・(--;
拝見させていただきました。
で、ですね、

>                                        山紫水明
>// ----- Insertdate.mac ---------------------------------------------- //
>//              日付を挿入,そのままリターンで当日の日付が入る
>
>$today = rightstr(year, 2) + month + day;

ここの、year,month,dayというキーワードが、私の秀丸(v3.01)では
動作しないのですが、これはそれ以降にマクロキーワードに追加されたものなのでし
ょうか?

>if(!result)endmacro;
>if(result == 0) $date = $today;
 :
>$youbi = midstr("日月火水木金土", #you * 2, 2);
>insert str(#year) + "年" + str(#month) + "月" + str(#day) +
>    "日" + "(" + $youbi + ")";
>endmacro;

残りの処理がとっても似てて思わず微笑んでしまった。
まあ、カレンダーを扱おうと思ったらそうするしかないのですが・・。

---かかし

[ ]
RE:05383 日付入力に関しての質問No.05390
山紫水明 さん 00/03/17 21:09
 
    かかしさん こんばんは。

》>$today = rightstr(year, 2) + month + day;

》ここの、year,month,dayというキーワードが、私の秀丸(v3.01)では動作しない
》のですが、これはそれ以降にマクロキーワードに追加されたものなのでしょう
》か?

 そうです。Ver3.05から追加されました。
 まだ,date を使った方が汎用性があったようですね。

 いずれにしても,カレンダーのまくろはいろいろ書き方があるようです。

 では, (^^)/~
                                        山紫水明


[ ]
RE:05371 日付入力に関しての質問No.05395
nofu さん 00/03/18 11:13
 
かかしさん。ありがとうございました。私の秀丸でも動きました。
すごい、ほんとに山紫水明さんもマクロを組んでくれて二つとも試して見ました。感謝、
感謝です。私も、すこし、マクロというものに興味を持ち始めました。まずは、お礼ま
で・・・ nofuでした。

[ ]
RE:05381 日付入力に関しての質問No.05396
nofu さん 00/03/18 11:16
 
山紫水明さん こんにちは Insertdate.mac 動きました。かかしさんにも、お礼を
述べたのですが、本当にありがとうございました。自分でも、なんかやってみたい
(マクロについて)気持ちになってきました。まずは、お礼まで・・・・nofuでした。

[ ]
RE:05372 日付入力に関しての質問No.05397
nofu さん 00/03/18 11:18
 
ENCODINGSHIFTJISさん こんにちは、いろいろとありがとうございました。
みなさんのおかげで、また秀丸がさらに使いやすい環境になりました。お世話になり
ました、・・ まずは、お礼まで  nofuでした。

[ ]
RE:05382 日付入力に関しての質問No.05402
山紫水明 さん 00/03/19 21:33
 
    ENCODINGSHIFTJISさん こんばんは。

》while で回すのはいくら何でも。
 私みたいな初心者には,ふさわしいのです。(^^;
 マクロの練習にもなりますし,わかりやすいし。上級者には,いかにもどろくさ
いというところでしょうが,大目に見てください。m(__)m

 Zellerの公式,たしかにこれでいけそうですね。今後は利用することにしましょ
う。ご教示ありがとうございました。

 では, (^^)/~
                                        山紫水明

[ ]
RE:05396 日付入力に関しての質問No.05403
山紫水明 さん 00/03/19 21:33
 
    nofuさん こんばんは。

》自分でも、なんかやってみたい(マクロについて)気持ちになってきました。
 私のマクロ,日付のチェック,手抜きしています。(^^;
2月や4月も31日が入ってしまいます。さしあたり挑戦されてみたらいかがでしょ
う。

 では, (^^)/~
                                        山紫水明


[ ]