ChaichanPapa-World !

燈明日記(2007/11

◆ インデックス

◆ 2007年11月

2007-11-30 PerlでCSV(テキスト)からXLS(エクセル)への最速変換

たとえば、Perl側で普通にセル単位に処理すると約45分かかるCSVからXLS変換がありました。

つまり、約45分掛かっていた処理が約15秒になったのです。すごい!

#!/usr/local/bin/perl -w
use strict;
    my $csvFile = 'C:\test_book.csv'; # CSVファイル
    my $xlsFile = 'C:\test_book.xls'; # EXCELブックファイル

    &csv2xls($csvFile, $xlsFile);

sub csv2xls {
    my ($csvFile, $xlsFile) = @_;

    use Win32::OLE;
    # 指定タイプライブラリのコンスタントが参照可能
    use Win32::OLE::Const 'Microsoft Excel';
    # エラー時に本処理を中止し、Perlがエラーメッセージを出力し、本プロセスが終了する
    Win32::OLE->Option(Warn => 3);
    
    my $Excel;

    # EXCEL使用可能かチェック
    eval {
            Win32::OLE->GetActiveObject('Excel.Application');
    };
    if ($@) {
            die "Excelが入っていません。$@";
    }
    # EXCELオブジェクト取得
    eval {
            $Excel = Win32::OLE->GetActiveObject('Excel.Application')
                  || Win32::OLE->new('Excel.Application', 'Quit');
    };
    if ($@) {
            die "EXCELオブジェクト取得エラーです。 $@";
    }
    # Csvファイルオープン
    eval {
           $Excel->Workbooks->OpenText({Filename => "$csvFile"});
    };
    if ($@) {
            die "Csvファイルオープンエラーです。 $@";
    }
    $Excel->ActiveSheet->Cells->{NumberFormatLocal} = "@"; # すべてセルを文字列属性にする。
    $Excel->{DisplayAlerts} = 0; # 上書きのAlertダイアログを出さない。
    eval {
           $Excel->ActiveWorkbook->SaveAs({Filename => "$xlsFile", Fileformat => xlWorkbookNormal});
    };
    if ($@) {
            die "xlsファイル書き込みエラーです。 $@";
    }
    $Excel->ActiveWorkbook->Close();
    $Excel->Quit();
}
留意点:

とにかくEXCELが想定外のデータ変換をすることがあるのでデータのチェックは念入りにね。

2007-11-29 Perlでのファイル存在チェック

Perlでのファイル存在チェックは、ファイルテスト演算子『-e』を使用します。

ファイルが存在していれば真(true)で、していなければ偽(false)を返します。

if (-e "err.log") {
    print "err.logファイルは存在する。", "\n";
}
else {
    print "err.logファイルは存在しない。", "\n";
}

ネタは沢山あるのですが、気力と時間が少なくなっています。

2007-11-28 Perlでのカンマ演算子とドット演算子

print文で表示する値をカンマ演算子で繋ぐ人とドット演算子で繋ぐ人がいますね。

これ、微妙に違います。以下でテストをしてみました。


テストソース
@aaa = (111, 222, 333);
@bbb = ("aaa", "bbb", "ddd", "eee");
print @aaa , @bbb , @aaa , "\n";
print @aaa . @bbb , @aaa , "\n";
print @aaa , @bbb . @aaa , "\n";
print @aaa . @bbb . @aaa , "\n";
実行結果
111222333aaabbbdddeee111222333
34111222333
11122233343
343

よって、カンマ演算子はリストコンテキストで、ドット演算子はスカラーコンテキストで解釈される。

2007-11-27 Perlでの小括弧・中括弧・大括弧

Perlでの括弧を整理してみました。抜けや間違い等がありましたら、ご指摘ください。


Perl本体系

正規表現系

2007-11-26 ヒアドキュメントの記述の仕方

一般的な記述の仕方
print = <<"EOH";
ダブルクォーテーションだから変数展開が可能
$aaa
EOH

尚、終端文字列指定の仕方に3通りがあり、普通printと比べると。

print <<"EOH"は、print "・・・" と同じ。

print <<EOHは、print "・・・" と同じ。

print <<'EOH'、はprint '・・・' と同じ。


また、print文だけでなくスカラー変数へのヒアドキュメントも可能です。

my $scalar = <<"EOH";
ダブルクォーテーションだから変数展開が可能
$aaa
EOH

留意点として、終端文字(EOH)の後ろには改行が必要です。しかし、セミコロンは不要です。

2007-11-25 霊園奉仕

今日は、久々に霊園奉仕に行って来ました。

霊園は、西武線玉川上水駅の傍にある佼成霊園です。

埋葬と年回供養で10件の受け付けをこなしてきました。結構忙しかったですよ。

忙しい合間にちゃいちゃんのお墓参り(この霊園にある)にも行って来ました。

誰かが先に来たのか、お墓には、お花が沢山あがっていました。ありがたい。

そして、奉仕の終わりに終礼あり、そこで霊園長さんからお話しを頂きました。

人のためによいことを沢山した後、期待はしていなくても、その人からお礼を言ってもらえないと、不満に思うことがありますね。

しかし、それを口に出さないでいられることが、法華経を行じている功徳なのかな・・・と思えるようになりました。

そして、あることに気がつきました。それは・・・。


人のためによいことを沢山した後に不満に思うようなことがなくなった状態が、本当の幸せではないのか・・・。

つまり、気が付かない内によいことを沢山して、そういう状態のまま人生が終えれば幸せではないのかと・・・。

なんとなく、同感ができました。

2007-11-25 HTMLのth要素nowrap属性について

たとえば、HTMLテーブルのthセルにデータを表示する時に、英語の単語は途中で改行されることがないのですが、日本語の単語だと適当なところで改行されてしまいます。

これを防ぐには、th要素にnowrap属性を指定すれば、回避ができます。

しかし、nowrap属性は、非推奨です。

なので、CSS(スタイルシート)で以下のように指定します。

style='white-space:nowrap'

実は、このwhile-spaceプロパティは、IE6以前(以前なのでIE6は含まない)は、サポートされていませんでした。

今回使えてよかった・・・時代はいつの間にか、IE7になりつつありますね。

2007-11-24 CHEMISTRY 最期の川

悲しいバラード…

D

2007-11-24 MS-WORDで21以上を丸数字にするには

丸数字は、WINDOWS-XPでは、1〜20 までです。

21以上の丸数字を使いたい場合もあると思います。


MS-WORDでは、以下の方法で99まで可能です。

2007-11-24 PerlからExcelVBAのOpenTextの引数を指定するには

たとえば、以下のようなExcelVBAがあったとします。

これをPerlで表現するにはどうしたらよいでしょうか?

ExcelVBA
Workbooks.OpenText Filename:="C:\test_data.txt", _
                   StartRow:=3, _
                   DataType:=xlDelimited, _
                   Space:=True, _
                   FieldInfo:=Array(Array(1, xlYMDFormat), _
                                    Array(2, xlGeneralFormat), _
                                    Array(3, xlTextFormat), _
                                    Array(4, xlSkipColumn))
Perlでは
use strict;
use Win32::OLE;
use Win32::OLE::Const 'Microsoft Excel';
Win32::OLE->Option(Warn => 3);

my $Excel;
my $Book;
eval {
    $Excel = Win32::OLE->GetActiveObject('Excel.Application')
          || Win32::OLE->new('Excel.Application', 'Quit');
};
if ($@) {
    die "エラー $@";
}
$Book = $Excel->Workbooks->OpenText({Filename => 'C:\test_data.txt',
                                     StartRow => 3,
                                     DataType => xlDelimited,
                                     Space => 1,
                                     FieldInfo => [[1, xlYMDFormat],
                                                   [2, xlGeneralFormat],
                                                   [3, xlTextFormat],
                                                   [4, xlSkipColumn]]});

VBAからPerlへのソース変換ポイントは、まず、OpenTextの引数全体を無名ハッシュで受け(『:=』は『=>』で受け)ます。

つぎに、FieldInfoは、配列の配列のハッシュのになり、Arrayは無名配列で受け、要素は配列リファレンス、その中のArrayも同じく無名配列で受け、要素はやっとデータ実体です。

尚、xlDelimitedやxlYMDFormat等のベアワードは、『use Win32::OLE::Const 'Microsoft Excel'』でインポートされています。

2007-11-23 ふり返る

以下は、某小誌からの引用です。

なぜなら、失敗から学ぶという積極性があると、一見、マイナスと思える出来事のなかにも、大切な宝物を見つけることができるのです。

失敗しない人間はいません。

だれでにも過ちはあります。

そのあとにどう対処するか、それを生かすか否かで違いがでてきます。

忙しい現代人にとって、むしろ「何もしない時間」を持つことが大切であると思います。

それによって、わが身をふり返る心の余裕もできます。

ご宝前(仏壇)に静かに座ってみると、働けること、家族がいること、生かされていることなど、当たり前のことが、じつはありがたいことなのだと気づかされます。

50才代で現役プログラマ。

いつ、リストラされてもおかしくない状況で、働けること・・・、あぁありがたい。

毎日、家族がいて、みんなで助け合ってふれあって生きていける・・・、あぁありがたい。


ついでに家族に近況です。

ちゃいちゃんママは、鬱病から徐々に脱出、でも一進一退を繰り返しています。

長男(大4)ヒロちゃんは、ミュージシャンをめざして頑張っております。12月にはライブがあるらしい。

次男(高2)やっくんは、部活(バスケット)に頑張っております。スピード&スマートでカッコイイよ!

三男(中1)マチャは、Hey! Say! Jumpの知念くんにそっくりで、カワイイよ!


そうそう、そろそろ『よかった探しリース』の季節やね。でも、結城先生は新しい本の作成に忙しそうですね。

2007-11-23 SQLネタ4連発!!

最近、PerlノートとVB-TIPSの技術ネタが貯まっています。

なかなか、ネットする時間が取れないのですが、合間を見て放出します。

2007-11-23 MicrosoftSQLServer2005でログイン認証を変更するには

MicrosoftSQLServerでのサーバー認証モードは、以下のように2つあります。

上記は、インストール時に選択しますが、いざ、運用し始めると変更を余儀されなくなることもありますね。

しかし、再インストールは、したくないし・・・。

そんな時は、以下で再インストールしなくてもログイン認証を変更することができます。

サーバー認証モードを変更した後、SQLで as ログインを有効にする。

2007-11-23 SQLのWhere文条件で、シングルクォーテーション『'』をエスケープするには

SQLでの文字列は、シングルクォーテーションで囲みます。

では、文字列中にシングルクォーテーションがある場合は、どうしたらよいでしょうか?


答え、『'』を2つ重ねます『''』。

ちなみに、ワイルドカード『%』や『_』をエスケープするには、以下の感じです。

where 列名 like 'AAA\%XXX%' escape '\'

上記は、文字列『AAA%XXX』の前方一致で検索される。


またちなみに、

2007-11-23 MicrosoftSQLServerのSQLの制約名について

制約名(constraint)は、データベース内で一意であればよいらしい。

マイクロソフトからは、特に提示されていない模様。

したがって、命名規則を会社なり、プロジェクトなりで決めればよいでしょう。

ちなみに、制約名とは、たとえば

alter table xxxTBL
add constraint unq_xxxTBL_xxxRow_on unique (xxxRow)

のunq_xxxTBL_xxxRow_onのこと。

2007-11-23 MicrosoftSQLServerのテーブル名にドット(ピリオド)文字はOKか

答えから言うとOKです。

しかし、テーブル名にドット文字を使用しない方が無難です。


MicrosoftSQLServerでの命名でドットは、通常、オブジェクト階層の区切り文字として使用されています。

これをテーブル名に使用するとそれとの区別がつかなくなります。

ですので、区別するにはテーブル名を常に大括弧で囲みます。


ちなみに、ビュー名やサーバー名では、ドット文字は禁止されています。

まぁ、テーブル名でも使用しない方が無難でしょう・・・。

2007-11-22 変数のメインパッケージ内宣言とrequire内宣言の参照関係

メインパッケージで宣言された変数とパッケージ宣言なしのrequireされた変数は、別レキシカルスコープになる模様。

したがって、my宣言した変数は相互に参照ができない。

しかし、our宣言した変数はグローバルスコープなので相互に参照ができる。


require.plソース
use strict;
our $xxx = "xxx";
our $aaa = "aaa";
require 'tst_require.pl';
print "main--> ", $xxx, "\n"; # 111が表示(xxxでないのは、tst_require.pl内で変更されている)
tst_require.plソース
use strict;
our $xxx = "111";
print "sub---> ", $main::aaa, "\n"; # aaaが表示(strictでなければメインパッケージ修飾は不要)
return 1;
実行結果
C:\Documents and Settings>perl require.pl
sub---> aaa
main--> 111

2007-11-21 Perlでは、なぜリファレンスが必要なのか?

いきなり、『Perlでは、なぜリファレンスが必要ですか?』と質問されても……。

それは、複雑なデータ構造を実現するために必要なのです。

Perl というプログラミング言語の、5.0 以前のもので最も欠けていた一つの機能とは複雑なデータ構造でした。言語による直接のサポートがなくても、一部の英雄的なプログラマー達は複雑なデータ構造をエミュレートしていました。しかし、それはとても大変な作業でした。あなたは(多次元配列をエミュレートするために) awk から借りてきた $m{$AoA,$b} という記法を使うことができましたが、これは実際にはそのキーを "$AoA$b" のような連結された文字列にしているので、分解やソートが困難でした。

http://perldoc.jp/docs/perl/5.8.8/perldsc.pod

引用には、リファレンスというワードは、出で来ないけど、たぶんそうだと思うよ。

そう、逆に言うとリファレンスによって複雑なデータ構造を実現するのです。

2007-11-20 WINDOWS標準圧縮ツール『iexpress.exe』をクワイエットモードで使用するには

WINDOWS-XPには標準で『iexpress.exe』という圧縮ツールが付属しています。

自己解凍もサポートされていますが、解凍先フォルダを指定するオペレーションが入ります。

これをクワイエットモードのワンクリックで行うには、まずは、iexpress.exeで『圧縮したファイル.exe』を作成し、以下のオプションを指定します。

圧縮したファイル.exe /Q /C /T:インストール先の完全なパス

iexpress.exeの基本的な操作説明は、以下を参照のこと。

留意点:フォルダの圧縮は出来ないようです。

意外点:実はバッチファイル(BAT)やWSH(VBS)をEXEファイルにラッピングする機能があるのです。

この機能を使えば、BATやVBS等の生のスクリプトを見えなくするので、使えるかもです・・・。

2007-11-19 ベアワード(Bareword)とは

Bareとは、"剥き出しの"という意味で、Barewordとは、$,@,%,&,* などが先頭に付かないワードです。

通常、ベアワードな文字列、引数のないシステム関数、ファイルハンドル、ハッシュキーなどがベアワードとなります。

この内、ベアワードな文字列は、use strict にすると防げます(コンパイルエラーになる)。

2007-11-19 スカラー(Scalar)とは

スカラーとは、大きさだけを持つ量のことで、Perlでは、数値、文字列の総称を云う。

そして、$が先頭に付く変数のことをPerlでは、スカラー変数と云う。

スカラー変数は、確かに、数値、文字列が区別なく格納することができますね。

2007-11-18 コーラス『千の風』

今日(11/18)、普門館大ホール(杉並)で普門合唱フェスティバルがありました。

ちゃいちゃんママも出場するので行って見てきました。


そこで、『千の風』を何回も聞きました。

そして思ったのは、この曲は、ソロよりコーラス向きだと言うことです。

早速、ユーチューブで探したらありましたので、どうぞお聞きください。

D


『旅立ちの日に』もどうぞ!

D

2007-11-18 PerlからEXCEL-VBAのマクロを起動するには

EXCELブック(test_book.xls)にマクロ(MacroX)が予めコーディングされているとして、そのマクロを起動するには以下の感じです。

#!/usr/local/bin/perl -w
use strict;
    my $ExcelFile = 'C:\test_book.xls'; # EXCELブックファイル
    &Macro_Kidou($ExcelFile);

sub Macro_Kidou {
    my ($FilePath) = @_;

    use Win32::OLE;
    # 指定タイプライブラリのコンスタントが参照可能
    use Win32::OLE::Const 'Microsoft Excel';
    # エラー時に本処理を中止し、Perlがエラーメッセージを出力し、本プロセスが終了する
    Win32::OLE->Option(Warn => 3);

    # EXCEL使用可能かチェック
    eval {
            Win32::OLE->GetActiveObject('Excel.Application');
    };
    if ($@) {
            die "Excelが入っていません。$@";
    }

    # EXCELオブジェクト取得
    my $Excel = Win32::OLE->GetActiveObject('Excel.Application')
        || Win32::OLE->new('Excel.Application', 'Quit');
    my $Book = $Excel->Workbooks->Open($FilePath);

    # マクロ起動
    eval {
            $Excel->Run("MacroX");
    };
    if ($@) {
            die "マクロ起動の失敗です。$@";
    }

    $Book->Close();
    $Excel->Quit();
}

尚、PerlからWin32::OLEで、データをEXCELのセルへ格納するロジックは、スピードがめちゃくちゃ遅いです。

それは、マシンのスペックにもよりますが、30列10000行で約40分掛かります。

しかし、それをVBA(マクロ)で処理すると1分掛かりません。

ですので、Perlから一度CSV(テキスト)で出力し、それをVBA(マクロ)でセル格納処理するとスピードアップすることが出来ます。

実は、もっと速い方法がありますが、それは、そのうちにアップする予定でいます。

2007-11-17 PerlでVBの構造体配列処理を表現するには

たとえば、VB2005での以下のような構造体配列処理は、Perlでは以下の下のような感じになります。


VB2005での構造体配列処理
Module Module1
    Private Structure StrucTest
        Public straaa As String
        Public intbbb As Integer
    End Structure
Sub main()
    Dim i As Integer
    Dim a(10) As StrucTest
    For i = 0 To 10 Step 1
        a(i).straaa = "xxx" & i
        a(i).intbbb = i
    Next i
    For i = 0 To 10 Step 1
        Debug.Print(a(i).straaa)
        Debug.Print(a(i).intbbb)
    Next i
End Sub
End Module

Perlでの構造体配列風の処理
use strict;
my @a = ();
for (my $i = 0; $i <= 10; $i++) {
    $a[$i]{straaa} = "xxx" . $i;
    $a[$i]{intbbb} = $i;
}
for (my $i = 0; $i <= 10; $i++) {
    print $a[$i]{straaa}, "\n";
    print $a[$i]{intbbb}, "\n";
}

ご覧の通り、Perlでは、『構造体配列』を『配列のハッシュ』で処理します。たぶん。

2007-11-16 PerlにてNet::SMTPでメール送信時、『Can't call method "mail" on ...』が出たら

モジュールNet::SMTPでメール送信時、以下のメッセージが出たら、アンチウィルスソフトでブロックされている可能性があります。

Can't call method "mail" on an undefined value at ソースファイル名 line 行数.

2007-11-15 EXCELマクロ(VBA)で、シートの印刷プレビューをするには

シートの印刷は、以下の通りです。

ActiveWorkbook.Sheets("納品書").PrintOut

では、印刷プレビューをするには…、そう、以下の通りです。

ActiveWorkbook.Sheets("納品書").PrintPreview

2007-11-14 Perlで『=~』は、なんという?

$aaa =~ s/\*/%/g;

if ($aaa =~ m/%/) {

等の『=~』は、なんですか?

と、問われた時に、答えられませんでした。


調べました。

『=~』は、パターン結合演算子というらしい…。


ちなみに、

『s///』は、置換演算子。

『m///』は、検索演算子。

『tr///』は、変換演算子。

2007-11-13 タスクバーのインジケータが出ないときは

タスクバー(WINDOWS-XP)の右側のインジケータが、なぜか出ない場合があります。

そんなときは、以下の設定を確認してみてください。

2007-11-12 Location で _top するには

HTMLフレーム内のリンクをクリックすると、普通は、フレーム内に表示されます。

これをフレーム解除して表示したい場合は、a要素のtarget属性を _top にします。


では、ボタンがクリックされた時に、JavaScriptのLocationでフレーム解除をしたい場合は、どうしたらよいでしょうか?


答え、ボタンがクリックされたら以下の関数をコールします。

function sub_top() {
    window.top.location.href="http://xxx.yyy.zzz";
}

2007-11-11 10月分更新(Perlノート、VB-TIPSメモ)

PerlノートVB-TIPSメモへ10月分を更新しました。

2007-11-11 戻るボタンを擬似的に制御する

ブラウザの戻るボタンは、たぶん普通、JavaScript等では制御できません。

しかし、戻るボタンを無効にしたいケースは、結構ありますね。

たとえば、ログインが必要なサイトからログアウトした後に、戻るボタンを押されるとログインできてしまうとか。

そんな時は、『戻りたくないページ』に以下のJavaScriptを入れておきます。

<script type="text/javascript">
history.forward();
</script>

すると、あたかも戻るボタンが無効になったようになるのです。


説明すると、『戻りたくないページ』が初回に表示したときは、forwardのページがまだないので、このスクリプトは無視されます。

そして、『戻りたくないページ』から『他のページ』に移ったあと、『他のページ』から戻るボタンを押すとforwardされます。

このforwardは、その『他のページ』自身にforwardされるので、あたかも戻るボタンが無効になったようになるのです。

2007-11-10 Perlで実行せずに構文チェックだけするには

Perlのスクリプト(例:aaa.pl)を実行せずに構文チェックだけするには、コマンドプロンプトから以下を入力します。

Perl -c aaa.pl

そう、cオプションを指定します。


すいません。今日はこれだけです。

ネタは、沢山(すでに今月分)あるのですが、時間がなく、今もこれから社員旅行で伊豆方面に行ってきます。

ではまた!

2007-11-09 Perlでハッシュのキー値の存在チェック

ハッシュ変数(例では%sub)があり、その中のキー値(例ではkey)がすでに存在しているかは、exists関数で判断します。

if ( exists $sub{'key'} ) {
    print "hashのKeyが存在する\n";
}
else {
    print "hashのKeyが存在しない\n";
}

2007-11-08 リモートデスクトップ接続が出来ない時は…

WINDOWS-XPでリモートデスクトップ接続が出来ない時は、以下の設定を確認してみて下さい。

あと、ファイヤーウォール(コンパネから)の設定にもリモートデスクトップ使用のチェックがあります。

2007-11-07 localtimeの使い方

まず、普通の使い方

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time); 

localtime関数のように沢山の値がリストで帰ってくる場合、必要な値だけを取得するにはどうしたらよいでしょうか?

($mday,$mon,$year) = (localtime(time))[3,4,5]; 

上記のようにスライスを使うと必要な値だけを取得することが出来ます。

ちなみに、localtimeの引数を省略しても、timeのリターン値と同じものが使用される。

($mday,$mon,$year) = (localtime)[3,4,5]; 

追記:

kitsさん、間違えのご指摘、ありがとうございます。

いつも、ウォッチして頂いて、ありがとうございます。

kitsさん、もしかして、2001年ぐらいからの長い間のお付合いですね。

私は、長い間、拙い文章を書きつづけていますが…、見捨てられなくてよかった…。ありがとう!

2007-11-07 いつでも微笑みを Mr.Children

YouTubeで見つけたよ!

D

2007-11-06 ドラッグ&ドロップでコピー&ペースト

ファイルをドラッグ&ドロップした場合、同じドライブ内だと、コピー&ペーストでなく、カット&ペーストになってしまいます。

このような時は、コントロールキーを押しながらドラッグ&ドロップするとコピー&ペーストになります。


ちなみに、逆に異なるドライブにカット&ペーストをする場合は、シフトキーを押しながらドラッグ&ドロップする。


尚、間違ってドラッグした場合は、エスケープキーでキャンセルができ、ドロップした後はコントロールキー+zキーで本操作がキャンセルできる。

2007-11-05 system関数のリターン値で終了コードを取得するには

system関数は、既存の実行ファイルを起動します。

起動後、処理が完了すると制御が戻ってきます。

その時、終了コードが設定されている場合があり、それを取得するには、以下の通り。

use strict;
my $rc = system("test_kizon.exe");
$rc = $rc >> 8; # 1バイト分を右にシフト
print $rc;      # test_kizon.exeでセットされたステータス値

終了コードは、$rcの2バイト目に格納される。

したがって、1バイト(8ビット)分を右にシフトして、終了コードを取得します。

2007-11-04 燈明日記10月分更新

本日記の10月分の記事を元に以下のページを作成いたしました。

上記は、本日記を毎月この時期にCSV形式でダウンロードして、前月の記事をWebページに変換し作成します。

これは、秀丸(テキストエディター)のマクロと正規表現置換を駆使して行います。

はじめのうちは、一時間以上掛かっていましたが、今は30分もかかりません。

秀丸は、便利ですね!

2007-11-04 VBでプログラム終了コードを返すには

VBでプログラム終了コードを返すには、APIのExitProcessを使用します。


VB6系
Declare Sub ExitProcess Lib "Kernel32.dll" (ByVal uExitCode As Long)
ExitProcess(終了コード)
VB.NET系
Declare Sub ExitProcess Lib "Kernel32.dll" (ByVal uExitCode As Integer)
ExitProcess(終了コード)

尚、上記の使用ケースは、たとえば、PerlスクリプトやDOSバッチから起動されて、任意処理後、終了コードを返す場合です。

2007-11-03 いつでも微笑みを Mr.Children

ネットで見つけたよ!

YouTubeには、まだないね!

2007-11-03 Perlでの__LINE__の使い道

Perlでの__LINE__には、プログラムソースの実行ステップ行の値が保持されている。

デバックやエラーメッセージの補助情報等で、重宝する特殊シンボルです。

2007-11-02 配列変数の初期化

値の入った配列変数を初期化するには、以下のようにします。

@hairetu = ();

すると空の配列が作成されます。

そう、初期化していない配列変数を使い回すと、痛い目に遭いますね。

2007-11-02 PerlでIIS-CGIからのdie

IISでCGIプログラムから『die "メッセージXXX";』をすると、CGIErrorページが標準出力されます。

CGIErrorページには、『メッセージXXX at プログラムパス名 line 行数』が表示されます。

そう、エラー時にdieすれば、dieしたプログラム名とdieの行数がわかるのです。

2007-11-01 FTP(ファイル転送)されたファイルのセキュリティ

WINDOWS-XPの場合、FTPされたファイルのセキュリティ『アクセス許可ユーザ』は、FTPされたフォルダの『アクセス許可ユーザ』を継承する。

ただし、そのフォルダに CREATOR OWNERユーザがあるとCREATOR OWNERは継承せず、代わりにFTPのログインユーザとなる。


実はコレ、普通のファイルコピーの場合と同じかな…。

2007-11-012 Mr.Children - 旅立ちの唄

D