秀丸で、日付をファイル名にして自動的に保存するマクロ。

コードのコメントにも書いたのだが、一応説明しておくと、このマクロは、秀丸で書いた文章にファイル名を日付(yyyymmddx.txt)で付けて保存し、ウィンドウを閉じる(ファイル名最後の「x」は、その日で保存した順に、a、b、c、…とついていく)。保存先のディレクトリは、コードの中で指定して欲しい。 このコードは 1996年に作ったものだから、かれこれ 10年くらい使ってるコードです(笑)。
// 秀丸 ファイル名自動作成&保存マクロ
//
// Copyright (c) 1996-2006 twinkle.cc All Rights Reserved.
// 改変、配布は自由
// →でも修正したら連絡いただけると嬉しいです:perltips@gmail.com
//
// ○このマクロについて
//
//    このマクロは、秀丸で書いた文章にファイル名を日付で付けて保存し、終了します。
//    以下の 2点で自動化します。
//
//    1)  書いた文を、指定されたディレクトリに日付をファイル名として保存。
//        ファイル名は yyyyddmmx.txt というフォーマット。
//        yyyymmdd は 2006/12/24 などのフォーマット。
//        x は、その日で保存した順に、a、b、c、…とついていきます。
//        つまりファイル名は 20061224a.txt、20061224b.txt... などの名前に
//        なります(ファイル名を考えなくてすむので便利)。
//    2)  タブを空白に変換します (97行目)。
//
//
// ○ 設定方法
//
//    1)  秀丸エディタの設定メニューから、
//        その他|動作環境|環境|マクロファイル用のフォルダ
//        で、マクロを保存するディレクトリを指定。
//    2)  下の、[保存するディレクトリの指定] のところで、
//        書いたメールを保存するディレクトリを指定。
//        ディレクトリの区切り記号 \ は \\ と2つ重ねる。
//    3)  このマクロを save_txt.mac などの名前で、
//        1) で設定したディレクトリに保存。
//    4)  秀丸のメニューから、マクロ|マクロ登録|ファイル名で
//        3) で指定したファイル名を選択。タイトルを設定。
//    5)  必要なら、秀丸でキーカスタマイズとツールバーを
//        カスタマイズすればボタンひとつでマクロを走らせることが可能。

// [保存するディレクトリの指定]
// ネットワークにある PC に保存するとき
// \\your_computer_name\data\mail\2006 に保存する場合
// (2006 などの年ごとのディレクトリは毎年作ってください)
$savedir = "\\\\your_computer_name\\data\\mail\\" + year + "\\";

// ローカルに保存するとき
// $savedir = "c:\\data\\mail\\logs\\" + year + "\\";


// ここから先はプログラム
#index = 0;                             // 行を表す

// 最初の空白行は無視
gofiletop;                              // ファイルの先頭に移動
while(!linelen2) {
    delete;                             // 改行を削除
}

// 日付をファイル名として保存
gofileend;                              // ファイルの終わりで作業
insert "\n";
insert year;
insert month;
insert day;
insert "a.txt";                         // yyyymmdd.txt という名前を付ける
copyline;                               // 行をコピー
beginclipboardread;                     // クリップボードの選択を開始
$filename = getclipboard;               // ファイル名をクリップボードから取得

// ファイルが存在するかどうか
if (filename != "" ) {

    // filename の初期化
    if (leftstr(filename, 3) == "\\\\\\")
        $filename = rightstr(filename, strlen(filename) - 1);
    else
        $filename = filename;           // 既存のファイル名をつける。

} else {

    while (existfile($savedir + $filename)) {

        $index = midstr($filename,8,1); // 現在の index を取得 (初期値 a)
        $index = char(ascii($index)+1); // index を更新(a,b,c, ...)
        golinetop;                      // 行の先頭に移動
        right 8;                        // index 位置に移動
        insert $index;                  // index を付加
        delete;                         // 更新前の index を消す
        copyline;                       // できたファイル名をコピー
        beginclipboardread;             // クリップボードの選択を開始
        $filename = getclipboard;       // ファイル名をクリップボードから取得
    }
}

$filename = $savedir + $filename;       // ファイル名をフルパスで生成

// ファイル名の後処理
selectline;                             // 1行選択
cut;                                    // カット
backspace;                              // 最初に付けた \n を削除

// 作成した内容をクリップボードにコピー
selectall;                              // 全ての範囲を選択
tospace;                                // タブ→空白変換
copy;                                   // クリップボードへコピー
escape;                                 // 選択を解除

// ファイル名を付けて保存
saveas $filename;

// 秀丸を終了
exit;
コードのコメントにも書いたのだが、一応説明しておくと、このマクロは、秀丸で書いた文章にファイル名を日付(yyyymmddx.txt)で付けて保存し、ウィンドウを閉じる(ファイル名最後の「x」は、その日で保存した順に、a、b、c、…とついていく)。保存先のディレクトリは、コードの中で指定して欲しい。 このコードは 1996年に作ったものだから、かれこれ 10年くらい使ってるコードです(笑)。
// 秀丸 ファイル名自動作成&保存マクロ
//
// Copyright (c) 1996-2006 twinkle.cc All Rights Reserved.
// 改変、配布は自由
// →でも修正したら連絡いただけると嬉しいです:perltips@gmail.com
//
// ○このマクロについて
//
//    このマクロは、秀丸で書いた文章にファイル名を日付で付けて保存し、終了します。
//    以下の 2点で自動化します。
//
//    1)  書いた文を、指定されたディレクトリに日付をファイル名として保存。
//        ファイル名は yyyyddmmx.txt というフォーマット。
//        yyyymmdd は 2006/12/24 などのフォーマット。
//        x は、その日で保存した順に、a、b、c、…とついていきます。
//        つまりファイル名は 20061224a.txt、20061224b.txt... などの名前に
//        なります(ファイル名を考えなくてすむので便利)。
//    2)  タブを空白に変換します (97行目)。
//
//
// ○ 設定方法
//
//    1)  秀丸エディタの設定メニューから、
//        その他|動作環境|環境|マクロファイル用のフォルダ
//        で、マクロを保存するディレクトリを指定。
//    2)  下の、[保存するディレクトリの指定] のところで、
//        書いたメールを保存するディレクトリを指定。
//        ディレクトリの区切り記号 \ は \\ と2つ重ねる。
//    3)  このマクロを save_txt.mac などの名前で、
//        1) で設定したディレクトリに保存。
//    4)  秀丸のメニューから、マクロ|マクロ登録|ファイル名で
//        3) で指定したファイル名を選択。タイトルを設定。
//    5)  必要なら、秀丸でキーカスタマイズとツールバーを
//        カスタマイズすればボタンひとつでマクロを走らせることが可能。

// [保存するディレクトリの指定]
// ネットワークにある PC に保存するとき
// \\your_computer_name\data\mail\2006 に保存する場合
// (2006 などの年ごとのディレクトリは毎年作ってください)
$savedir = "\\\\your_computer_name\\data\\mail\\" + year + "\\";

// ローカルに保存するとき
// $savedir = "c:\\data\\mail\\logs\\" + year + "\\";


// ここから先はプログラム
#index = 0;                             // 行を表す

// 最初の空白行は無視
gofiletop;                              // ファイルの先頭に移動
while(!linelen2) {
    delete;                             // 改行を削除
}

// 日付をファイル名として保存
gofileend;                              // ファイルの終わりで作業
insert "\n";
insert year;
insert month;
insert day;
insert "a.txt";                         // yyyymmdd.txt という名前を付ける
copyline;                               // 行をコピー
beginclipboardread;                     // クリップボードの選択を開始
$filename = getclipboard;               // ファイル名をクリップボードから取得

// ファイルが存在するかどうか
if (filename != "" ) {

    // filename の初期化
    if (leftstr(filename, 3) == "\\\\\\")
        $filename = rightstr(filename, strlen(filename) - 1);
    else
        $filename = filename;           // 既存のファイル名をつける。

} else {

    while (existfile($savedir + $filename)) {

        $index = midstr($filename,8,1); // 現在の index を取得 (初期値 a)
        $index = char(ascii($index)+1); // index を更新(a,b,c, ...)
        golinetop;                      // 行の先頭に移動
        right 8;                        // index 位置に移動
        insert $index;                  // index を付加
        delete;                         // 更新前の index を消す
        copyline;                       // できたファイル名をコピー
        beginclipboardread;             // クリップボードの選択を開始
        $filename = getclipboard;       // ファイル名をクリップボードから取得
    }
}

$filename = $savedir + $filename;       // ファイル名をフルパスで生成

// ファイル名の後処理
selectline;                             // 1行選択
cut;                                    // カット
backspace;                              // 最初に付けた \n を削除

// 作成した内容をクリップボードにコピー
selectall;                              // 全ての範囲を選択
tospace;                                // タブ→空白変換
copy;                                   // クリップボードへコピー
escape;                                 // 選択を解除

// ファイル名を付けて保存
saveas $filename;

// 秀丸を終了
exit;

Perl で、ビット処理する方法

たとえばテキストファイルに「a」などと書かれており、これが4ビットのビット列「1010」を表す場合、4ビットの2進数で表される値は、以下のようになるだろう。
0: 0000
1: 0001
2: 0010
3: 0011
4: 0100
5: 0101
6: 0110
7: 0111
8: 1000
9: 1001
a: 1010
b: 1011
c: 1100
d: 1101
e: 1110
f: 1111
これら 0~f までの文字列を Perl で処理するには以下のようにする(以下のロジックでは、4ビットの場合、ビットの番号は、左から 4、3、2、1 としているので、各人の仕様で調整してください)。
#!/usr/bin/perl

our $data = 'a';
our $BIT_LENGTH = 4; # ビットの長さ

$data = hex($data);
$data = pack("C", $data);

my @data = unpack("C", $data);
my $mask = 0x00000001; # マスク

for(my $i = 1;  $i <= $BIT_LENGTH; $i++) {

#   if(~$data[0] & $mask) { # (注: on: 0 / off: 1 のとき、~$data[0] とする)
    if( $data[0] & $mask) {

        # ここに(マスクにヒット)ビットが立っているときの処理を書く
print "bit $i: 1\n";

    } else {

        # ここにビットが立っていないときの処理を書く
print "bit $i: 0\n";

    }
    $mask = $mask << 1;
}
たとえばテキストファイルに「a」などと書かれており、これが4ビットのビット列「1010」を表す場合、4ビットの2進数で表される値は、以下のようになるだろう。
0: 0000
1: 0001
2: 0010
3: 0011
4: 0100
5: 0101
6: 0110
7: 0111
8: 1000
9: 1001
a: 1010
b: 1011
c: 1100
d: 1101
e: 1110
f: 1111
これら 0~f までの文字列を Perl で処理するには以下のようにする(以下のロジックでは、4ビットの場合、ビットの番号は、左から 4、3、2、1 としているので、各人の仕様で調整してください)。
#!/usr/bin/perl

our $data = 'a';
our $BIT_LENGTH = 4; # ビットの長さ

$data = hex($data);
$data = pack("C", $data);

my @data = unpack("C", $data);
my $mask = 0x00000001; # マスク

for(my $i = 1;  $i <= $BIT_LENGTH; $i++) {

#   if(~$data[0] & $mask) { # (注: on: 0 / off: 1 のとき、~$data[0] とする)
    if( $data[0] & $mask) {

        # ここに(マスクにヒット)ビットが立っているときの処理を書く
print "bit $i: 1\n";

    } else {

        # ここにビットが立っていないときの処理を書く
print "bit $i: 0\n";

    }
    $mask = $mask << 1;
}
Posted on 2006-09-06 by yas |

Movable Type で、角丸枠をスタイルシートで設定する方法

残念ながらこの方法は Mozilla (Firefox) 独自の仕様なので、それにしか使えないが、-moz-border-radius の値に角丸の大きさを指定してやるとブラウザが角丸枠を描いてくれる。ドットの線(border: 1px dotted...)は無視されてしまうようだ。 #blockquote { -moz-border-radius: 10px; border: 1px dotted #a3b8cc; }
残念ながらこの方法は Mozilla (Firefox) 独自の仕様なので、それにしか使えないが、-moz-border-radius の値に角丸の大きさを指定してやるとブラウザが角丸枠を描いてくれる。ドットの線(border: 1px dotted...)は無視されてしまうようだ。 #blockquote { -moz-border-radius: 10px; border: 1px dotted #a3b8cc; }

Perl で、RADIUS クライアントを作る。

Radius サーバに接続するためには、そのホスト名とシークレットが必要である。シークレットは Radius サーバへのパスワードみたいなもの。以下のコードでは $r に Radius クライアントのオブジェクトが入り、その後で $USENAME と $PASSWORD を使って $HOST にアクセスしている。 使用するモジュール use Authen::Radius;
#!/usr/bin/perl

use Authen::Radius;

our $HOST     = '1.1.1.1';
our $USERNAME = 'perltips';
our $PASSWORD = 'password';
our $SECRET   = 'testing123';

# First Trial
$r = new Authen::Radius(Host   => $HOST,
                        Secret => $SECRET,
                        Debug  => 1,
                        TimeOut=> 10);

# 前座。ユーザー名とパスワードのチェックをしてみる。
print "auth result=", $r->check_pwd($USERNAME,
                                    $PASSWORD,
                                    $HOST), "\n";
# Authen::Radius->load_dictionary();

# 本番。ユーザー名とパスワードのチェックを設定する。
$r->add_attributes (
                { Name => 'UserName',       Value => $USERNAME },
                { Name => 'Password',       Value => $PASSWORD },
#               { Name => 'NAS-IP-Address', Value => '1.1.1.2' }
#
# RFC 2865 https://www.ietf.org/rfc/rfc2865.txt calls this attribute
# User-Password. Check your local RADIUS dictionary to find
);

# ユーザー名とパスワードの組み合わせ (アトリビュート:属性) を、ACCESS_REQUEST で送る。
# そうすると返事が返って来るので recv_packet で受け取る。
$r->send_packet(ACCESS_REQUEST) and $type = $r->recv_packet();
print "server response type = $type\n";

# サーバから送られてきたアトリビュートを表示してみる。
for $a ($r->get_attributes()) {
        print "attr: name=$a->{'Name'} value=$a->{'Value'}\n";
}
Radius サーバに接続するためには、そのホスト名とシークレットが必要である。シークレットは Radius サーバへのパスワードみたいなもの。以下のコードでは $r に Radius クライアントのオブジェクトが入り、その後で $USENAME と $PASSWORD を使って $HOST にアクセスしている。 使用するモジュール use Authen::Radius;
#!/usr/bin/perl

use Authen::Radius;

our $HOST     = '1.1.1.1';
our $USERNAME = 'perltips';
our $PASSWORD = 'password';
our $SECRET   = 'testing123';

# First Trial
$r = new Authen::Radius(Host   => $HOST,
                        Secret => $SECRET,
                        Debug  => 1,
                        TimeOut=> 10);

# 前座。ユーザー名とパスワードのチェックをしてみる。
print "auth result=", $r->check_pwd($USERNAME,
                                    $PASSWORD,
                                    $HOST), "\n";
# Authen::Radius->load_dictionary();

# 本番。ユーザー名とパスワードのチェックを設定する。
$r->add_attributes (
                { Name => 'UserName',       Value => $USERNAME },
                { Name => 'Password',       Value => $PASSWORD },
#               { Name => 'NAS-IP-Address', Value => '1.1.1.2' }
#
# RFC 2865 https://www.ietf.org/rfc/rfc2865.txt calls this attribute
# User-Password. Check your local RADIUS dictionary to find
);

# ユーザー名とパスワードの組み合わせ (アトリビュート:属性) を、ACCESS_REQUEST で送る。
# そうすると返事が返って来るので recv_packet で受け取る。
$r->send_packet(ACCESS_REQUEST) and $type = $r->recv_packet();
print "server response type = $type\n";

# サーバから送られてきたアトリビュートを表示してみる。
for $a ($r->get_attributes()) {
        print "attr: name=$a->{'Name'} value=$a->{'Value'}\n";
}