ChaichanPapa-World !

燈明日記(2010/03

◆ インデックス

◆ 2010年3月

2010-03-31 ファイル名の大カッコ(角カッコ)には気を付けろ!

Windowsでのファイル名は、漢字でもスペースでもOKですが、若干NG文字もありますね。

たとえば、『\ / : , ; * ? " < > |』などは、システム的にも使えません。


しかし、システム的に使えてもNGな文字があるのです。

そう、タイトルにもなっている大カッコ(角カッコ)です。

ただし、Excelのブック名(ファイル名)においてです。


以下はそのテストサンプルのVBScriptです。

Option Explicit
Dim Excel
Dim Book

Set Excel = CreateObject("Excel.Application")
Set Book  = Excel.Workbooks.Open("C:\xBook1.xls")

Book.SaveAs "C:\Hiro.xls" 'ここのファイル名に [ か ]を入れる

Book.Close
Excel.Quit
Set Book  = Nothing
Set Excel = Nothing

Hiro文字列内に [ や ]を入れるとエラーになります。

これは、以下が関係していると思われます。

リンク元のブックが開いている場合は、そのブック名が角かっこ ([ ]) で囲まれ、次にワークシート名、感嘆符 (!)、リンク先のセルの順に表示されます。

=SUM('C:\Reports\[Budget.xls]Annual'!C10:C25)

http://office.microsoft.com/ja-jp/excel/HP051984241041.aspx

つまり、ファイル名に大カッコ([ ]) を使っていると、上記の場合と区別がつかなくなるので、結局、大カッコはNGなのでしょうね。


補足:

Excelの3つのバージョンでテストした結果、Excel2000ではNGではないです。

Excel2000は、大カッコ[]有りのファイル名でもOKでした。

Excel2003とExcel2007ではNGでした。

2010-03-30 失業が多いのか少ないのかイマイチ不明

今日の失業者数のヤフーニュース意味不明

失業数が多くなるのか少なくなるか、はっきりしろよ!


とにかく、日本は失業者が26万9790人レベル。

アメリカや中国だと桁違いですね。

アメリカが200万人。

中国が2億人。


中国は大丈夫か!

日本の人口の倍近く失業している!


しかし、中国のことなど考えている余裕は無いですね。

自分が失業させられないように頑張らないと!

2010-03-29 MSワードで目次のデフォルトフォントを変えるには?

文章を書いている時、ちゃんと、見出し行に見出し番号(段落番号)を付けていれば、目次は簡単に自動生成ができますね。

そして、自動生成した後に、目次のフォントを変えたとします。

しかし、新たな見出しが追加になった場合、また、目次を自動生成しますが、するとフォントが元に戻ってしまうのです。


そう、自動生成するとデフォルトフォントになってしまうのです。

ですので、デフォルトフォントを変えないといけないのです。

以下は、そのデフォルトフォントを変える手順です。


◆MSワード2003

◆MSワード2007

とにかく、MSワード2007の『目次の挿入』以降にフォント変更があるのが、直感的でないのでなんとかして欲しいものです。

って、それもそうだけど、なんでメニューをやめてしまったのだろうか……。

2010-03-28 中性脂肪が高い!

先日、健康診断で一日人間ドックに行って来ました。

検査は、午前中に終わるのですが、午後に食事をし、検査結果が3時頃になるのです。

主な検査は、以下の感じです。

検査結果では、中性脂肪が標準値よりやや高いとのことで、これ以外は標準値でした。

実は、毎年、中性脂肪が高いって言われています。で、結果発表の時に中性脂肪のことをいろいろとお聞きしました。


まず、食事は少し少な目にし、運動をするといいようです。

あと、睡眠時間や食事時間など、規則正しい生活がいいとのことでした(まぁ、当たり前!)。


運動は、中学で部活(野球)をしていた後は、高校・大学・社会人(通算約40年)と全く運動をしていないので、いまさらできるわけもなく…。そこで、考えました。


それは、「早や歩き」と「階段上り」です。

通勤時は、なるべく早や歩きし、横断歩道は使わず歩道橋を使うのです。


ということで、早や歩きで運動不足を補います!

来年は、中性脂肪を正常値にしたいと思います!


中性脂肪の長所も上げときます。

中性脂肪は、あまりいいイメージのない人も多いようですが、体にとって大切なはたらきもしています。ひとつは、エネルギーの貯蔵です。人が体を動かすときには、血中の糖分をエネルギー源として使います。しかし、時には糖分が足りず、エネルギー不足となってしまいます。そんなときに使えるのが、この中性脂肪です。

また、冬に体温を一定に保つための断熱材としての働きや、殴られたときなどの衝撃に対するクッションとしても中性脂肪は活躍します。

中性脂肪(TG)とは

有酸素運動が中性脂肪には効くらしい!

運動には、無酸素運動と有酸素運動があります。無酸素運動は、運動中に呼吸を止めて行うもの、有酸素運動は息を吸ったり吐いたりしながら行なうものです。中性脂肪を効果的に燃やすのは有酸素運動なので、ウォーキングにはある程度効果がみられるかと思われます。

中性脂肪と運動

2010-03-27 MSワードで2つの改行

普通に文章を書いている時に、文章が横幅に入りきれない時は、改行キーで改行して調整する場合があります。

まぁ、ワードが自動的に改行するので、このような場合は、あまりないのですが…、たまにありますね。


しかし、このような場合は、改行キーだけでなく、シフトキーを押しながら改行キーを押すといいらしいのです。


これは、改行キーだけだと、段落が別になってしまうのです。

シフトキーを押しながらの改行キーだと、段落内の改行になり、こちらの方がピッタと来る場合が多いのです。


たとえば、段落番号などが付いているタイトル行などは、改行キーだと別段落になって段落番号が自動採番され上手くいきません。

このような場合にこそ、段落内改行の『シフトキーを押しながらの改行キー』が有効なのです。


ということで、MSワードでは以下の2つの改行があるのです。

  1. 段落別改行 - 改行キーのみで改行
  2. 段落内改行 - シフトキーを押しながらの改行キーで改行

2010-03-26 小泉・竹中構造改革は日本を不幸にした!

まずは、以下の引用を

小泉純一郎に関しても、「郵政民営化と小泉は正しい」とあれだけマスゴミが総力を挙げて持ち上げて善人にすることに成功したが、結局は米国に日本の資金と資本(企業)を丸ごと提供するためだけの人物ということがバレた。 そのツケが今もなお積み重なっており、小泉が日本人にしたことは年間3万人を超える自殺者を生み出し、国民の資産や税金を盗むのに加担した「大泥棒」であり「殺人者」なのである。

悪人と喧伝される者は善人である|ライジング・サン(甦る日本)

1998年の橋本龍太郎首相から始まった緊縮財政を、2001年に首相なった小泉氏と竹中氏のコンビが継続して行い…。

丁度、1998年から今まで、給料減少と自殺者3万人超えが12年間続いています。


橋本首相と小泉・竹中コンビは、一億総中流だった日本を、この12年間で、一億総ビンボーにしてしまいました。

橋本首相と小泉・竹中コンビは、また、単純に計算して約36万人を自殺に追い込んだのですね。


小泉・竹中コンビの行った構造改革は、日本的な良いシステムを破壊し、アメリカ的な個人・拝金主義的なシステムにした結果、国民の資産や税金がアメリカに持っていかれて、給料が減少し、自殺者が3万人を超える報いが来たのだと思います。


小泉・竹中コンビの逆をやると言った亀井さんを応援します!

2010-03-25 ナンバーロックに気をつけろ!

普段は、自分のデスクのPCからリモートでサーバーにログインして使っているのですが…。

たまに、マシン室に行ってリモートでなく、そのサーバーにログインしようとしても、いつも使っているパスワードでログインが出来ません。なぜだーっ!


そう、ナンバーロックされていたのです!

このサーバー、なぜかログアウトすると、自動的にナンバーロックされるのですね!


分かってみれば、脱力系なのですが……、キーボードも各サーバーで共用で、使いなれていないし…。

ということで、こんなことで、はまりました。


それから、マシン室は、サーバーがラックに沢山入っていて、しかもサーバー名が同じ感じになっていて、裏側でネットワークケーブルを抜く時は、細心の注意が必要ですね。

まちがって、違うサーバーのケーブルを抜いたら、えらい事になりますね!

2010-03-24 祝!!ミリオンブログ

たぶん昨日の真夜中頃に、ブログのページビュー(PV)が100万を超えました!!(パチパチ)


ブログを始めたのが2005年の6月で、約5年間続いています。

始めの1年半ぐらいは、リストラや父の介護などで、まともな更新ができませでしたが…。

しかし、2006年9月頃から怒涛の更新が始まりましたね。


5年間(365*5)で1825日、1000000÷1825 = 548で、平均1日548PVになります。

しかし、今は1日約1900PVはアクセスがありますね!

無名の者のブログとしては、まぁまぁではないでしょうか…。


まぁ、ブログ更新が唯一の趣味なので、たぶん、今後も続けていけると思います。

本ブログは、まだまだ拙い文章や未熟な技術情報などですが、自分なりに成長できるように頑張りますので、皆さま、今後もよろしくお願い致します!

2010-03-23 Linuxでのftpの設定

UNIXなら始めから使えるファイル転送コマンドftpですが、Linuxでは始めからは使えませんね。

しかし、redhat系では、デフォルトでvsftpdがインストールは、されているようです。

なので、セキュリティはとりあえず考えなければ、以下のようにvsftpdをスタートさせるだけでftpが使えます。

/etc/init.d/vsftpd start

また、PASVモードでftpしたい場合は、/etc/vsftpd/vsftpd.confの以下をYESとします。

pasv_enable=YES

上記の様に変更した後は、リスタートします。

/etc/init.d/vsftpd restart

ちなみに、パッシブ(PASV)モードとは、サーバーから通知されたポートに対してクライアントからコネクトします。通常のアクティブモードでは、サーバーからクライアントにコネクトするので、ファイアーウォールやNAT(IPマスカレード)が中間にあるとブロックされたり、ポート番号が変更されたり、上手くコネクトができない場合があります。

2010-03-22 最近、気になったニュース2つ

また、北朝鮮(金正日)が拉致問題を棚上げにした許し難い体質が明らかになりました!

 朝鮮学校をめぐり、北朝鮮の金正日総書記から下された「民族教育強化」の方針のもと、在日本朝鮮人総連合会(朝鮮総連)から全国の学校幹部らに「高校授業料無償化を獲得する運動を展開するように」と指示が出されていたことが、朝鮮総連の内部文書から分かった。拉致被害者を返そうとせず、日本の税金をあてにする許し難い体質が明らかになった。

高校無償化、金正日が獲得命令!?「民族教育を強化せよ」 - Infoseek ニュース

そういえば、この間だデノミが失敗して、その責任者が銃殺されたニュースがあったばかりですね。

早く、この国、何とかならないものですかね…。


また、鳩山邦夫氏が、やってしまいました!

幕末の志士坂本龍馬になりきって、15日に自民党離党と新党結成への意欲を表明した鳩山邦夫衆院議員(61)が16日、四面楚歌(そか)に陥った。龍馬ファンの前原誠司国土交通相(47)は「極めて不快」とバッサリ。

“なりきりヒーロー”邦夫龍馬は四面楚歌 - 政治ニュース : nikkansports.com

そういえば、この間だスマップの草薙くんの酔っ払い騒ぎの時に、『最低人間発言』で大顰蹙を買っていましたが…今回はその比でないですね!

早く、この人、何とかならないものですかね…。

2010-03-21 Apacheのリスタートメモ

Windowsでは、Apacheをインストールすると、スタートメニューにApacheのリスタートがありますが、Linuxでは、それがありません。

Linuxでは、コマンドプロンプトから以下を入力します。


[root@xxx bin]# ./apachectl restart


追記

以下でもリスタートできますね。

/etc/init.d/httpd restart

2010-03-21 DateDiffメモ

VBScriptでのDateDiff関数は、日付の時間間隔を返します。

intervalに "y" or "d" を指定すると『date2 - date1』の日数を返します。

DateDiff(interval, date1, date2 [,firstdayofweek[, firstweekofyear)


・interval(他の引数については、参考URLを参照してください)
yyyy
q 四半期
m
y 年間通算日(日数)
d
w 曜日(曜日を表す数値)
ww 週(何週間か)
h
n
s

・サンプル
msgbox DiffADate("2010/3/22")

Function DiffADate(theDate)
   DiffADate = "日数: " & DateDiff("y", Now, theDate)
End Function

・参考URL

2010-03-20 漢字コードを指定したファイルコピー

ファイルをコピーするときに、コピー先のファイルの漢字コードを任意にしたい場合が結構あります。

コピー先のファイルは、ロジックで漢字コードが指定できますね。

しかし、コピー元のファイルの漢字コードが想定できない場合が結構あります。

そんな時のためのルーチンを組んでみました。


encCopy関数の仕様は、以下の通り。


use strict;
use warnings;
use Encode::Guess;
use Encode qw(from_to);

encCopy('euc-jp', 'txt_utf8.txt', 'txt.txt');

sub encCopy {
    my($encode, $f_form, $f_to) = @_;
    local $/ = undef;
    open(my $fh, '<', $f_form) or die('エラー情報' . "open error $f_form ($!)");
    my $fileBody = <$fh>;
    close($fh);

    my $enc = guess_encoding($fileBody, qw/euc-jp shiftjis 7bit-jis/);

    if (ref $enc) {
        from_to($fileBody, $enc->name, $encode);
        open($fh, '>', $f_to) or die('エラー情報' . "open error $f_to ($!)");
        print $fh  $fileBody;
        close($fh);
    }
    else {
        print "漢字コード推測できず!($enc\n";
    }
}
補足

『local $/ = undef;』のlocal関数は、グローバル変数『$/』を局所化します。

つまり、『$/』に対する変更が、このサブルーチン(encCopy)内だけ有効になるのです。

『$/』にundefを代入すると、1回の読み込みでファイル全体を一気に読み込みます。


補足の補足

kitsさんから、情報を頂きました。いつもありがとうございます。

local $/; だけでも $/ は未定義となります。

確かにそうなりました。

2010-03-19 分かってみれば、当たり前のこと

普段はWindows上が主戦場なのですが、今回少しだけで、linuxでのApacheのCGI設定をしました。

そして、CGI実行で、はまったのでメモしときます。

分かってみれば、当たり前のことなのですが、それが分かるまでに半日を潰してしまいました(T_T)。


ApacheのCGI設定自体は、結構順調に行きました。

ただ、Apache2系は、本来 httpd.conf に記述していた内容を /etc/httpd/conf.d/ というディレクトリに、『任意名前.conf』というファイルで置くことができますね。

つまり、httpd.confはさわらず、『任意名前.conf』ファイルを追加するだけでいいのです。


そして、単純なテスト用のPerlでのCGIは、すぐに動きました。

しかし、本番用のCGIが動かないのです。system関数でunzipコマンドを呼んでいるところでエラーするのです。

system関数実行後の$?は-1が帰りました。

また、Webからでなく、ログインしてコマンドプロンプトからこのCGIを起動すると問題なく動きます。


で、はじめは、unzipコマンドのパスが通っていないのかな…と思いフルパスにしましたがダメでした。

ちなみに、パスを以下で確認したら /usr/bin があり、パスは通っていました(/usr/bin/unzip)。

#!/usr/bin/perl
print "Content-type: text/html\n\n";
print join('<br>',%ENV);

またちなみに、デフォルトのPathは、すべてのユーザプロセスの祖先であるinitが自分自身のPATH環境変数を設定するらしいです。


でいろいろ試行錯誤していると、Apacheのエラーログ(/etc/httpd/logs/error_log)は見たか!…という天の声が聞こえてきました。

すると、ディレクトリのパーミッションでエラーしていることが分かる!


そう、unzipコマンドで展開する先のディレクトリのパーミッションにアザーの書き込み権がなかったのです!

いや〜、分かってみれば当たり前のことなのですが、はまると気がつかないものです。


私は、Apacheにコマンドの実行制御の設定があるのかなと思い、この系の調査のラビリンスに迷い込みました。

ということで、今回の教訓です。

という事でした!

2010-03-18 近況

ちょっと、仕事の方がいろいろと忙しく、ブログ更新が滞っています。

今日は、その仕事でデモのプレゼンあり、まぁまぁ上手く行きましたが、またいろいろと要求があり、作業が発生してしまいました。

当分は、忙しい感じです。

尚、明日は、健康診断で八王子の健康センターへ一日ドックに行ってきます。

では、また!

2010-03-16 ゆうちょ銀、米国債3000億円購入!

とりあえず、メモしときます。

ゆうちょ銀、米国債3000億円購入 民営化後で初

 日本郵政グループのゆうちょ銀行が2009年10〜12月期に、07年10月の郵政民営化後で初めて米国債を約3千億円購入していたことが分かった。同行は190兆円に上る資金運用の8割を日本国債が占めており、運用先の多様化を進めるのが狙いだ。ただ、鳩山政権下で民営化路線の修正が進む中で、為替リスクを伴う外債投資をどこまで進めるべきかは意見が分かれている。

 ゆうちょ銀行は民営化時に、株式や外債などリスク資産の保有をいったん減らした経緯がある。民営化後に郵貯残高の減少が続く中、利回りの向上を求めて円建て外債やユーロ建て国債など外債での運用も徐々に増やしてきた。米ドル建ての社債も保有しているとみられる。 (07:00)

NIKKEI NET(日経ネット):主要ニュース−各分野の重要ニュースを掲載

確かに、米国債は、日本国債より利回りがよいけれど、それだけリスクもあるということ…。

近い将来、ドル暴落になったら、紙屑かな…

2010-03-15 追記しました。

いつもコメント等でお世話になっているkitsさんからいろいろ教えて頂き、以下にそれを追記しました。


特に、以下が意外でした。


join '.', map {oct "0b$_"} $bin=~/(\d{8})(\d{8})(\d{8})(\d{8})/;

『$bin=~/(\d{8})(\d{8})(\d{8})(\d{8})/』は、カッコを使った記憶がリストで返るのですね。

知らなかったです。いつも$1,$2…等で処理していましたが…、得した気分です。

kitsさん、いつもありがとうございます!

2010-03-14 ネットワークアドレスを求める!

たとえば、IPアドレス(IPv4)は32ビットで、32ビット内がネットワークアドレスとマシンアドレスになっています。

そして、IPアドレスをサブネットマスクするとネットワークアドレスが求まりますね。

つまり、任意のマシンが、どのネットワークアドレスに属するかは、IPアドレスをサブネットマスクで論理積すれば、分かるのです。




一方、Perlではビット演算子の論理積『&』がありますね。

1と0の文字の論理積の場合は、文字列でもビット演算子の論理積『&』が使えるのです!


たとえば、サブネットマスク255.255.255.0のIPアドレス172.11.22.33のネットワークアドレスは、172.11.22.0ですね。

これをPerlで計算すると以下の感じになります。

use strict;
use warnings;

# IPアドレスのドットアドレスをビット列の文字列へ変換
print dec2bin4IP('255.255.255.0'), "\n";

# IPアドレスのビット列の文字列をドットアドレスへ変換
print bin2dec4IP(dec2bin4IP('255.255.255.0')), "\n";

# マスクしてネットワークアドレスを求める
print bin2dec4IP(dec2bin4IP('255.255.255.0') & dec2bin4IP('172.11.22.33')), "\n";

sub dec2bin4IP {
    my ($ip) = @_;
    my @aaa = split(/\./, $ip);
    my $bin = '';
    for (my $i = 0; $i < 4; $i++) {
        $bin .= unpack("B8",  pack("C", $aaa[$i]));
    }
    return $bin;
}


sub bin2dec4IP {
    my ($ip) = @_;
    $ip =~ /(........)(........)(........)(........)/;
    my $num1 = unpack("C",  pack("B8",$1));    
    my $num2 = unpack("C",  pack("B8",$2));    
    my $num3 = unpack("C",  pack("B8",$3));    
    my $num4 = unpack("C",  pack("B8",$4)); 
    return "$num1.$num2.$num3.$num4";
}   
   

上記は、サブネットマスクとIPアドレスをビット列の文字列へ変換して、その論理積をとって、ネットワークアドレスを取得し、ビット列の文字列からドットアドレスへ変換しています。

そして、その変換値、つまり、ネットワークアドレス 172.11.22.0 を表示しています。


尚、packは、引数をバイナリ値に変換し、unpackは、バイナリ値から元の値に変換します。


追記

kitsさんから、もっとスマートな方法を教えて頂きました(ブックマークで…)。

my $ip = '255.255.255.0';
my $bin = sprintf "%08b"x4, split /\./, $ip;
print $bin, "\n";
print join '.', map {oct "0b$_"} $bin=~/(\d{8})(\d{8})(\d{8})(\d{8})/;

『$bin=~/(\d{8})(\d{8})(\d{8})(\d{8})/』は、カッコを使った記憶がリストで返る(知らなかったです。得した気分です)。

それを"0b$_"で文字連結して、octで10進数にしてjoinする。

2010-03-13 パス名からファイル名を取得する

正規表現で一発ですね。

しかし、ディレクトリの区切りが『/』と『\』あるので、気をつけないとなりません。

標準モジュールBasenameを使うともっと簡単に出来ますね。

だた、Basenameモジュールのfileparse関数は、リストを返しますので小カッコでスライスして、ファイル名を取得します。


use strict;
use warnings;
use File::Basename;


my $file_path1 = 'C:\Documents and Settings\koike\hoge\fname.pl';
my $file_path2 = '/cygdrive/c/Documents and Settings/koike/hoge/fname.pl';


$file_path1  =~ /(.*\/|.*\\)(.*)$/;
print $2, "\n";


$file_path2  =~ /(.*\/|.*\\)(.*)$/;
print $2, "\n";


my ($file_name) = fileparse($file_path1);
print $file_name , "\n";


($file_name) = fileparse($file_path2);
print $file_name , "\n";

追記

以下のようにBasenameモジュールのbasename関数を使用するとスカラーコンテキストでもファイル名が取得できます。

$file_name = basename($file_path1);

また、正規表現の基礎については以下で、どうぞ。

2010-03-11 年度末で多忙

年度末なので、何かと忙しいです。

すると、仕事ネタ(プログラマなのでプログラムネタ)が沢山貯まります。


しかし、やっと家に帰った後は、ネットをやる時間と気力がなくなってしまいますね。

ということで、スローペース、スローペース…。


ネタは、そのうちに練って公開しますね。それではまた!

2010-03-10 銀婚式とか

今日は3月10日、25回目の結婚記念日です。

そう、銀婚式なのです!

あっと、言う間の25年間でした。


長男は今年25才、次男は20才、三男は16才、ちゃいちゃんが生きていれば23才になりますね。

結婚してから、母が亡くなり(H8)、ちゃいちゃんが亡くなり(H12)、父が亡くなり(H18)、家内には大変な苦労をかけてしまいました。

その影響で、父が亡くなる半年前ぐらいから、鬱病を患い、今もまだ完全には治っていません。


実は、鬱病のお陰様で、夫婦の仲が凄くよくなったと私は思っています。

私自身、若い時は仕事やネットに夢中で、家内と話すこともない時期が結構ありましたが、鬱病に成ってからは、介護でよく話すようになりました。

ということで、25年経っても、仲良し夫婦でいられて、本当に感謝です。


子供達も性格だけは、いいヤツばかりで、皆友達のようで、すこやかに育ってくれて、本当に感謝です。

あとは、リストラの心配のない安定した生活ができれば、いいのですが…。

また、子供達がちゃんと安定した就職ができれば、いいのですが…。


とにかく、毎日毎日、不安との戦いです。

そして、その戦いに勝ち抜くには、夫婦仲良く、家族仲良く、助け合って、頑張って、生きて行くしかないですね。

最後に、お釈迦様のお言葉で〆ることに致します。

天神が
『何ものが、人々の依りどころであるのか、何ものが、この世で最高の友であるか』
と問うた時、
釈尊は
『子供たちが、人々の依りどころである、そして、妻が、最高の友である』
と答えたという。
                         『相応部・一・五四』

2010-03-09 円高の謎 なぜ不況で借金大国の「日本円」が世界中の投資家に人気なのか

やっと、マスコミも理解してきたみたいです。

日銀と政府は、もっとお金を刷って、市場に供給すれば、好景気になって、デフレスパイラルから脱却できるのに…。

好景気になれば、政府は税収が沢山入るし、会社は新入社員を沢山雇えて、就職氷河期もなくなるよ!


そうなれば、うちの長男・次男もフリーター脱却とか!

あっ、次男は、まだ大学生だったな…たしか。

2010-03-09 s修飾子の威力

Perlでは、テキストの編集処理が非常にラクチンです。

これは、Perlの柔軟な言語仕様と正規表現のお陰です。

とにかく、一度でもこのラクチンを経験すると他の言語に戻れなくなりますね!


特に、テキストファイルの全内容を一行で扱うことのできる正規表現のs修飾子は強力ですね。

s修飾子を使って、正規表現の置換をやりまくれば、大体の編集処理が出来てしまいます。

要は、複数行を簡単に置換することができるのです。

use strict;
use warnings;

my $strText = << "END_OF_TEXT";
1234567890
ABCDEFGHIJ
0987654321
XXXXXXXXXX
小池啓仁
1234567890
ABCDEFGHIJ
END_OF_TEXT

$strText =~ s/X.*90/\?\?\?\?\?\?\?\?\?\?\n小池康友\n0987654321/s;

print $strText;

ただ、メインロジックより、正規表現の方が多くなると、Perlでなく、宇宙語みたいになってしまうので注意が必要です。

しかし、それが快感だったりするのですが…。

ちなみに、前の『s』は置換演算子で、後の『s』がs修飾子です。詳しくは以下で。

2010-03-08 無名ハッシュの威力

EXCELとかDBでは、データが表形式なっていて、行と列でデータにアクセスします。

行は配列で表現し、列はハッシュで表現するのが、まぁ普通だと思います。

たとえば、以下の表の感じです。

A列B列C列D列
1行0 1 2 3
2行0 1 2 3
3行0 1 2 3
4行0 1 2 3

  1. まず、列名をハッシュキーにして、一行分のデータをハッシュ変数に格納します。
  2. そして、そのハッシュ変数の内容を無名ハッシュの要素とし、その無名ハッシュのリファレンスを今度は配列の要素として格納します。
  3. すると、ハッシュの配列になり、行は配列数で表現され、列はハッシュ名で表現が出来るのです。

use strict;
use warnings;

my @col;
my %row;
for (my $j = 0; $j < 4; $j++) {
    # 1, 列名をハッシュキーにして一行分のデータをハッシュ変数に格納する
    for (my $i = 0; $i < 4; $i++) {
        $row{"rowname" . $i} = $i; 
    }
    # 2, 無名ハッシュリファレンスを配列の要素として格納する
    $col[$j] = {%row}; 
}
for (my $j = 0; $j < 4; $j++) {
    for (my $i = 0; $i < 4; $i++) {
        # 3, 行は配列数で表現され、列はハッシュ名で表現される
        print $col[$j]{"rowname" . $i}, " "; 
    }
    print "\n";
}

ということで、無名ハッシュは、メチャクチャ威力があると思いませんか?

って、実は今日、『{%row}』を『\%row』とやって、はまったものですから、ネタにしてしまいました。


\%rowは、ハッシュ変数のリファレンスになって、今回の場合はNGです。

今回の場合は、行毎にリファレンスをしないとなりませんので、中カッコでリファレンスをコンストラクトしています。

つまり、今回の場合の中カッコは、実行されるたびに別のリファレンスがコンストラクトされます。


追記

今回の場合、『my %row;』をforブロックに入れて、『{%row}』を『\%row』やれば、『\%row』でもOKですね。

って、今回の場合のサンプルは、これが正解ですね(kitsさんからご指摘を頂きました…いつも、ありがとうございます)。


ただ、何かの事情で、『my %row;』をforブロックに入れらないとか、そもそも、無名ハッシュがメインの記事なので…

すみません。


ちなみに、forブロックで my した時は、myが実行されるたびに別エリアに割り当てられるので、そのリファレンスを

配列に代入しても大丈夫なのです。

2010-03-07 おめでとう!上村愛子ワールドカップ優勝!!

しかも、オリンピックモーグルの銀と銅の選手をおさえての優勝です。やったー!

オリンピックではメダルを取れなかったけど、心が折れていなかったのですね。すごい!


実は、浅田真央がちゃいちゃんとかぶるのと同じように、上村愛子の容姿と頑張りが、26歳で亡くなった姉とかぶるのです。

とにかく、4年後の表彰台に上っている上村愛子のイメージがわいて来ましたよ!


がんばれ!上村愛子!

2010-03-07 花粉症が来たーー!

ここ3・4日、目が痒く、クシャミの発作が始まりました。

そう、ついに今年も、花粉症が来たーー!


普通の年なら、もうとっくに来ているのですが、今年は、かなり遅かったですね。

もしかしたら、治ったのかな…なんて思ったのですが、30年以上も毎年なので、そう簡単には治りませんね。


昨日、杏林大学病院で頭の湿疹の薬と一緒に花粉症の薬も頂きました。

ただ、毎年、近くの診療所でもらっているセレスタミンは、いろいろな理由で出せないとのことで、アレロックと言う薬をもらいました。


セレスタミンほどではないのですが、アレロックも結構、花粉症には効くそうです。

アレックは、セレスタミンと違って、ステロイドが入っていないので安全とのことでした。


皆さまの花粉症の具合は、いかがでしょうか?

しかし、花粉症ではなく、頭の湿疹の方は、一進一退で、なかなか治りませんね。もう半年は経っています…。

2010-03-07 ブログ2月分をウエブページへ変換

ブログ2月分をウエブページへ変換しました。

2010-03-07 Perlでのコンパイル?

Perlは、インタプリタなのでコンパイルなどないと思っているかもしれませんが、実は、コンパイルもあるのです。


ただし、C言語のようにコンパイルで実行ファイルが出来るのではなく、インタプリタでもコンパイルフェーズと実行フェーズの2つに別れているのです。

コンパイルは主に文法チェックを行います。実行は、まぁ、主に実行です。


主にと書きましたが、実は、柔軟なPerlでは、コンパイル時に実行したり、実行時にコンパイルしたりもできるのです。

要は、2段階方式で実行するのですね。Perlは。


そして、コンパイルフェーズでは、2つの特別なブロックを書くことが出来ます。

コンパイルの始めに実行されるBEGINブロックと最後に実行されるCHECKブロックです。


また、実行フェーズも、2つの特別なブロックを書くことが出来ます。

実行の始めに実行されるINITブロックと最後に実行されるENDブロックです。


BEGIN {
    # コンパイルの始めに実行される
}
CHECK {
    # コンパイルの最後に実行される
}
INIT {
    # 実行の始めに実行される
    # 始めに実行されるが、useはすでに実行されている。
}
END {
    # 実行の最後に実行される
    # メインでexitやdieしてもここが実行される
}

この4つのブロックがあることを知っていると、前処理とか後処理とかが、ラクに書けるわけです。

2010-03-06 はじめてのPerlでつまずくこと

Perlで、たとえば、以下のソースを他の言語経験がはじめて見た時に、たぶん、?だと思います。

use strict;
use warnings;

my $aaa;

my @aaa = (1, 2, 3, 4);
my %aaa = (1 => '001', 2 => '002', 3 => '003', 4 => '004');
for ($aaa = 0; $aaa <= 3; $aaa++) {
     print $aaa{$aaa[$aaa]}, "\n";
}

my @bbb = (1, 2, 3, 4);
my %ccc = (1 => '001', 2 => '002', 3 => '003', 4 => '004');
for ($aaa = 0; $aaa <= 3; $aaa++) {
     print $ccc{$bbb[$aaa]}, "\n";
}

my $bbb = [1, 2, 3, 4];
my $ccc = {1 => '001', 2 => '002', 3 => '003', 4 => '004'};
for ($aaa = 0; $aaa <= 3; $aaa++) {
     print $ccc->{$bbb->[$aaa]}, "\n";
}

上記を理解するには、下記の理解が必要です。


尚、for文で使われている小カッコと中カッコは、今回説明対象外になっています。

2010-03-04 SQLで文字列をアンマッチさせる時の注意点

SQLのwhere文で文字列を完全一致させる場合やlikeでの部分一致の場合は、比較的容易です。

しかし、不一致(アンマッチ)の場合は、以下のように注意が必要です。


DB上には、NULLというデータもあり、これも不一致データとして、含めないとなりません。

そう、普通にNOTで否定しただけでは、NULLデータはマッチしないのです。


また、空文字で完全一致させる時は、空文字はもちろんですが、NULLもマッチさせてた方がいいですね。


つまり、文字列をマッチさせる場合は、文字列、空文字、NULLの3者を考慮して、一致・不一致を考慮しないとならないのです。

2010-03-03 EXCELで大きな表を1ページに印刷するには?

大きな表をいきなり印刷すると…想定外の枚数をプリンタは出力します。しかも、想定外の印字内容になっていたりします。

EXCELで大きな表を1ページに印刷するには、以下の手順を試してみてください。

これで、1ページに印刷が出来ます。しかし、大きな表だと印字は凄く小さくなりますね。

そんな時は、横と縦のページ数で調整します。横は、横方向のページ数で、縦は縦方向のページ数になります。


あと、部分的に印刷したい場合は、その部分をマウスで選択して、右クリックの「印刷範囲の設定」した後、印刷します。

2010-03-02 Microsoft SQL Server 2005でSQLをコメントに出来ない件

Microsoft SQL Server 2000では、SQLクエリアナライザがあり、SQLのWhere文の条件を変えるときにコメント(頭に--)を利用します。

しかし、Microsoft SQL Server 2005では、コメントにしても、実行するとSQLが最適化されて、コメント等は削除されてしまうのです。


実はコレ、SQLペインで、SQL Server 2000でもSQLクエリアナライザでなく、Enterprise ManagerのSQLペインと同じなのです。

ただ、SQL Server 2005では、SQLペインとSQLクエリアナライザが統合されているのです。


以下は、SQL Server 2005での『SQLペイン』と『SQLクエリアナライザ』の起動方法です。

SQL Server 2000からの人(実は自分)は、SQLクエリアナライザとSQL Server 2005のSQLペインが同じようなオペレーションなので…。

SQLがコメントに出来ない出来ないと…はまるわけです(汗)。

2010-03-01 人格形成に大切な3つこと

今日は、某教会で夜間の集いがあり、陀羅尼の木鉦を叩いてきました!

まぁまぁいい感じで叩けましたよ(あにまにまね…)


その後、スマイル(某教会ドキュメント)を見ました。

そこで、以下のお話しを聞きました。


2500年前、お釈迦様は人物をつくる上で大切なものとして以下の3つをあげました。

貧乏とは、お金の価値を知るということと、生きていく上で我慢を知るということ。

読書とは、未知への見聞を広げてるということと、知識を蓄えるということ。

母親の感化とは、やさしさや思いやりの感化…かな。


現代の日本では、母親の感化が、いい学校へ行きなさいとか、競争に勝ちなさいとかで、違った方向へいっているのが問題なのだという指摘がありました。

たしかに、日本はおかしな社会になりつつあるのかも知れません。


上記の人格形成に大切な3つで、教育されれば、たしかにいい子に育つ気がしますね!

まぁ、お釈迦様が言ったのだから、まちがいないでしょうけど…。