2008年03月31日

正規表現で、文字列は全てASCII文字か?のチェック(Perl編)


$str = " abcdefghijklmnopqrstuvwxyz!#$&'()[]@";

if ( $str =~ /^[\x20-\x7E]+$/ ) {
print encode('shift-jis', decode('utf-8', "すべてがASCIIである\n"));
}else{
print encode('shift-jis', decode('utf-8', "すべてがASCIIでない\n"));
}

※標準出力の文字エンコーディングをUTF8→SJISに変換しています(Eclipseで動作確認している都合です。コンソールがSJISのみ対応なので)
posted by 台北猫々 at 21:41| Comment(0) | TrackBack(0) | 技術メモ(Perl)

2008年03月30日

正規表現で、文字列は全てASCII文字か?のチェック(Python編)


# encoding: utf-8
import re

regexp = re.compile(r'^[\x20-\x7E]+$')
result = regexp.match(" abcdefghijklmnopqrstuvwxyz!#$&'()[]@")
if result != None :
print("match")
else :
print("no match")


posted by 台北猫々 at 22:12| Comment(0) | TrackBack(0) | 技術メモ(Python)

2008年03月29日

CSVファイル読み込み処理

PerlでCSVファイル読み込み処理

use strict;
use Text::CSV_XS;
use IO::File;

my $csv = Text::CSV_XS->new({binary => 1});
my $fh = IO::File->new("c:\\okinawa.csv", 'r') or die;

my $i=1;
while (not $fh->eof) {
my $row = $csv->getline($fh);

print "Row : $i \n";
my @fields = @$row;
foreach my $field (@fields) {
print "$field\n";
}
$i++;
}



良かったらクリックお願いします→banner_01.gif

posted by 台北猫々 at 07:39| Comment(0) | TrackBack(0) | 技術メモ(Perl)

2008年03月28日

プログラミング言語比較の巻(1)

最近Archiveの方で、「各種言語のスケルトン」というものを始めていまして、狙いとしてはプログラミング言語を横断的に網羅したナレッジベースを構築したいというのがあります(「コードなにがし」に方向付けを強く付加したイメージでしょうか)。

副産物として、同じ処理を色々な言語でコーディングしてみて、比較することで言語の特徴や、今後習得すべき言語を考察することもできるかなあというのもあります。

各言語に対する考察をおいおいとしていくとして、今日のところは、こんなページの紹介をしておきます。

「TIOBE Programming Community Index」
http://www.tiobe.com/index.php/content/paperinfo/tpci/index.html

月毎に言語の人気ランキングを集計しているサイトです。
上位5位までの言語はやはりという感じですね、それに続くPerlも納得いう感じです。

意外なのはRubyでしょうか。メディアで取り上げれているほどには、普及していないのが実情なのでしょうか?とはいえ、日本産の言語がトップ10入りしているのは嬉しい感じがしますね猫

とりあえずは、こんなところで。

posted by 台北猫々 at 21:37| Comment(0) | TrackBack(0) | コラムみたいな

2008年03月27日

ことの葉ひらひら その21

「蛇のように賢く、鳩のように素直であれ。」

〜イエス〜


いつまでも、夢見る少女じゃいられないというこでしょうか。
posted by 台北猫々 at 20:44| Comment(0) | TrackBack(0) | ことの葉

2008年03月26日

公開しました(CSVReaderクラス)。

新たに公開したのは、
・CSVファイル読み込みクラス(C++)
です。

Excel形式↓のCSVファイルの読み込みを行います。
(1)データ内の2つのダブルクオーテーションは、1つのダブルクオーテーションに置換する。
(2)改行とカンマで行とデータを区切っている。
(3)データが、ダブルクオーテーション・カンマ・改行のどれかを含んでいる場合、セル全体をダブルクオーテーションで囲む。
   
/**
* コンストラクタ
* @param stream ファイルストリーム
* @comment セパレータ(,), エンクオート(")
*/

CSVReader(fstream& stream);

/**
* コンストラクタ
* @param stream ファイルストリーム
* @param sep セパレータ
* @comment エンクオート(")
*/

CSVReader(fstream& stream, const char sep);

/**
* コンストラクタ
* @param stream ファイルストリーム
* @param sep セパレータ
* @param quo エンクオート
*/

CSVReader(fstream& stream, const char sep, const char quo);

/**
* デストラクタ
*/

virtual ~CSVReader(void);

/**
* CSVファイルを1行読み込んで、分割して配列で返します。
* @param tokens トークン(OUT)
* @return 0:正常 -1:EOF
*/

int Read(vector<string>& tokens);

/**
* ファイルストリームをクローズします。
* @return 0:正常 -1:異常
*/

int Close(void);

公開URLはページの→側にもありますが、
http://winter-tail.sakura.ne.jp
です。


良かったらクリックお願いします→banner_01.gif


posted by 台北猫々 at 22:28| Comment(0) | TrackBack(0) | 日記

2008年03月25日

CSVファイル読み込み処理

PythonでCSVファイル読み込み処理


import csv

class CsvFileReaderSkeleton:
def read(self, filename):
try:
csvreader = csv.reader(file(filename))
i=1
for row in csvreader:
print "Row : " + str(i)
for element in row:
print "[" + element + "]"
i = i + 1
except Exception, msg:
print msg


r = CsvFileReaderSkeleton()
r.read('c:\\okinawa.csv')



posted by 台北猫々 at 21:52| Comment(0) | TrackBack(0) | 技術メモ(Python)

2008年03月24日

あまり使わないツッコミシリーズ2

「違うよ、ここはオキシジェンデストロイヤーじゃないよ!」
posted by 台北猫々 at 21:03| Comment(0) | TrackBack(0) | 日記

2008年03月23日

放浪電車

ふと気づくと、

夕日が差し込む電車に乗っていました。電車は一車両だけで、私の他には誰も乗っていませんでした。窓の外を見ると高層ビルが立ち並んでいました。

運転席を覗きましたが、誰もいません。電車の進む先を見ると、線路は高層ビルの間にどこまでも続いていました。

振り返ると、いつのまにか男性が一人、座席に座ってしました。私は、男性に近づきこの電車はどこに向かっているのかを尋ねました。

男性は、微笑みながら、首を振るだけです。
私は、しかたがないので座席に座り、流れてゆく夕日に照らされた高層ビルの風景をただ見ていました。

どこまでも、どこまでも
posted by 台北猫々 at 13:56| Comment(0) | TrackBack(0) | 夢日記

2008年03月22日

合格しました♪o(^0^o)♪o(^-^)o♪(o^0^)o♪

点数は85%だったので、ほとんど予測通りの成績でした。
iStudyの問題をやっていれば、解ける問題が多かったです。いくつかは、全然分からない問題もありましたが。

ともあれ、Oracle Master10g Gold資格者になれました猫

結局、EnterpriseManager(EM)は動作させることができなかったので、参考書でイメージを掴むことしかしませんでしたが、EM関連の問題は難易度が低いのでなんとかなりました。

今回、資格取得にかかった経費としては、
・オラクルマスター教科書 Gold Oracle Database 10g【新機能】編(いわゆる黒本)
→4590円
・【WEB】iStudy Web for Oracle Master1Z0-040 Gold DBA 10g新機能
→8550円
・受験料(システム・テクノロジー・アイの超特価キャンペーンで購入)
→12600円
で、合計=25740円。。。やっぱり高い資格ですねえ(^^;

それでも、黒本とiStudyは効率的に合格するには、やはり必須だと思いました。

posted by 台北猫々 at 18:01| Comment(0) | TrackBack(0) | 日記

いよいよ受験です。

OracleMaster 10g Goldへの移行試験の受験日になりました。
受験料が、めちゃ高いので失敗は許されません。

今までの経験則では、iStudyの模擬試験の結果に対して、本番では大体15〜20%は点数が落ちます(難易度が上がるのです)。

現在のところ模擬試験では、95%〜100%とれているので、なんとかなるのでは?といったところですが、さてさて。猫

まあ、ともあれいざ戦場へ。
posted by 台北猫々 at 10:15| Comment(0) | TrackBack(0) | 日記

2008年03月21日

CSVファイル読み込み処理

RubyでCSVファイル読み込み処理


require 'csv'

class CsvFileReadSkeleton
def read(filename)
csv = CSV.open('c:\\okinawa.csv', 'r')
csv.each_with_index {|elements, index|
puts "Row Number=>#{index+1}"
elements.each { |element|
puts "#{element}"
}
}
rescue => e
print "Error!!" + e
end
end

r = CsvFileReadSkeleton.new
r.read("c:\\okinawa.csv")



良かったらクリックお願いします→banner_01.gif
posted by 台北猫々 at 23:38| Comment(0) | TrackBack(0) | 技術メモ(Ruby)

2008年03月20日

更新しました(StdUtilクラス(C/C++))。

これまた変則タイミングですが、更新しました(1.1期工事です)。
以下のメソッドを追加しました。

/**
* 文字列分割(CSVやTSVデータを分割します)
* エンクォート文字で囲まれた区切り文字はスキップします。
* また、項目中のエンクォート文字の連続2個は、エンクォート文字1個に置き換えられます。
* 具体例:
* 47201,"900 ","900,""0000"
* というデータで、区切り文字','で、エンクォート文字'"'とした場合は、
* [47201] [900 ] [900,"0000]
* のように分割されます。
* @param source データ
* @param delim 区切り文字
* @param env エンクォート文字
* @param out 分割した要素の配列
*/
static void SplitXsv(string& src, const char delim, const char env, vector& out);

※Splitは既にあるのですが、こういった仕様(ExcelのCSV仕様)の方が実際には使用頻度が高いのかな?と思いまして、作ってみました。

【謝辞】
処理仕様はJavaのCSVTokenizerを参考にさせていただきました。
この場を借りまして、御礼申し上げます。
http://www.wakhok.ac.jp/~tomoharu/Java/csv/


公開URLはページの→側にもありますが、
http://winter-tail.sakura.ne.jp
です。


良かったらクリックお願いします→banner_01.gif
posted by 台北猫々 at 00:10| Comment(0) | TrackBack(0) | 日記

2008年03月19日

ファイルダウンロード処理(Python)

Pythonでファイルダウンロードを行います。


#!"C:\usr\local\Python23\python.exe"

import sys
import os

class DownloadFile:
def do(self, file):

sys.stdout.write("Content-Type: application/octet-stream\n")
sys.stdout.write("Content-Disposition: attachment; filename=\"" + os.path.basename(file) + "\"\n")
sys.stdout.write("Content-Length: " + str(os.path.getsize(file)) + "\n")
sys.stdout.write("Expires: 0\n")
sys.stdout.write("Cache-Control: must-revalidate, post-check=0,pre-check=0\n")
sys.stdout.write("Pragma: private\n")
sys.stdout.write("\n")

if sys.platform == "win32":
import msvcrt
msvcrt.setmode(sys.stdout.fileno(), os.O_BINARY)

myfile = open(file,'rb')
sys.stdout.write(myfile.read())
myfile.close()

r = DownloadFile()
r.do('c:\\okinawa.csv')



良かったらクリックお願いします→banner_01.gif

posted by 台北猫々 at 21:01| Comment(0) | TrackBack(0) | 技術メモ(Python)

2008年03月18日

OracleMaster10g Gold 新機能試験まで、あと4日

ということになりました。Oracle Master更新しようでは、4月に受験しようと思っていたのですが、予定よりも早く仕上がってきたので、受験日を早めました。

現在、iStudyの模擬試験では大体95%以上の正解率ですが、本番は難易度が上がるので、油断はできません。猫

posted by 台北猫々 at 19:42| Comment(0) | TrackBack(0) | 日記

2008年03月17日

更新しました(FileUtilクラス(C/C++))。

変則タイミングですが、更新しました(1.1期工事です)。
以下のメソッドを追加しました。


/**
* ファイルのサイズを取得します。
* @param filepath ファイルパス名
* @return 正常:ファイルサイズ>=0 異常:-1
*/

static int Size(const char* filepath);

/**
* ファイル名を抽出します。
* @param filepath ファイルパス名
* @return ファイル名
* "/www/htdocs/app/index.html" → "index.html"
* "/www/htdocs/app/" → "app"
* "" → ""
*/

static std::string BaseName(const char* filepath);

/**
* ファイルパスからディレクトリを取り出します。
* @param filepath ファイルパス名
* @return ディレクトリ
* "/www/htdocs/index.html" → "/www/htdocs"
* "/www/htdocs/app/" → "/www/htdocs"
* "" → ""
*/

static std::string DirName(const char* filepath);

/**
* 拡張子を抽出します。
* @param filepath ファイルパス名
* @return 拡張子
* "/www/htdocs/app/index.html" → "index.html"
* "/www/htdocs/app/index" → ""
*/

static std::string Ext(const char* filepath);


公開URLはページの→側にもありますが、
http://winter-tail.sakura.ne.jp
です。


良かったらクリックお願いします→banner_01.gif

posted by 台北猫々 at 21:48| Comment(0) | TrackBack(0) | 日記

あまり使わないツッコミシリーズ1

「やっさいもっさいかよ」猫
posted by 台北猫々 at 08:00| Comment(0) | TrackBack(0) | 日記

2008年03月16日

ファイルダウンロード処理(Perl)

Perlでファイルダウンロードを行います。


#!"C:\xampp\perl\bin\perl.exe"
use strict;
use File::Basename;

my $filepath = "c:\\okinawa.csv";
my $file = basename($filepath);
my $filesize = -s $filepath;

open(F,$filepath) || die "Can't open $filepath";

print "Content-type: application/octet-stream; name=\"$file\"\n";
print "Content-Length: $filesize\n";
print "Expires: 0\n";
print "Cache-Control: must-revalidate, post-check=0,pre-check=0\n";
print "Pragma: private\n";
print "Content-Disposition: attachment; filename=\"$file\"\n";
print "\n";

binmode(F);
binmode(STDOUT);
while(<F>) {print;}
close(F);
exit;


良かったらクリックお願いします→banner_01.gif

posted by 台北猫々 at 19:08| Comment(0) | TrackBack(0) | 技術メモ(Perl)

2008年03月15日

RMANでバックアップを取るメモ

●RMAN起動とデータベースへの接続
C:\Documents and Settings\XXXXX>rman target sys/oracle

Recovery Manager: Release 10.2.0.1.0 - Production on 日 3月 9 09:28:28 2008

Copyright (c) 1982, 2005, Oracle. All rights reserved.

ターゲット・データベース: ORCL (データベースID=1175176835)に接続されました

RMAN>

●バックアップ種別のデフォルトを確認します。
RMAN> SHOW DEVICE TYPE;

リカバリ・カタログのかわりにターゲット・データベース制御ファイルを使用しています

RMAN構成パラメータは次のとおりです:
CONFIGURE DEVICE TYPE DISK PARALLELISM 1 BACKUP TYPE TO BACKUPSET; # default

RMAN>

→BACKUPSETがデフォルトになっています。

●バックアップ種別のデフォルトを色々な方法に変更します。
1.イメージコピーに変更する場合
RMAN> CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COPY;

新しいRMAN構成パラメータ:
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COPY PARALLELISM 1;
新しいRMAN構成パラメータが格納できました

2.圧縮BACKUPSETに変更(圧縮はBACKUPSETでのみ可能)する場合
RMAN> CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET;

古いRMAN構成パラメータ:
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COPY PARALLELISM 1;
新しいRMAN構成パラメータ:
CONFIGURE DEVICE TYPE DISK BACKUP TYPE TO COMPRESSED BACKUPSET PARALLELISM 1;
新しいRMAN構成パラメータが格納できました

●そして、バックアップ(圧縮BACKUPSET)
RMAN> BACKUP DATABASE;

backupが開始されました(開始時間: 08-03-09)
チャネル: ORA_DISK_1が割り当てられました
チャネルORA_DISK_1: sid=141 devtype=DISK
チャネルORA_DISK_1: 圧縮型フル・データファイル・バックアップ・セットを開始してい
ます
チャネルORA_DISK_1: バックアップ・セットにデータファイルを指定しています
入力データファイルfno=00001 名前=C:\USR\LOCAL\ORADATA\ORCL\SYSTEM01.DBF
入力データファイルfno=00003 名前=C:\USR\LOCAL\ORADATA\ORCL\SYSAUX01.DBF
入力データファイルfno=00002 名前=C:\USR\LOCAL\ORADATA\ORCL\UNDOTBS01.DBF
入力データファイルfno=00005 名前=C:\USR\LOCAL\ORADATA\ORCL\EXAMPLE01.DBF
入力データファイルfno=00004 名前=C:\USR\LOCAL\ORADATA\ORCL\USERS01.DBF
チャネルORA_DISK_1: ピース1(08-03-09)を起動します
・・・・・・
posted by 台北猫々 at 08:20| Comment(0) | TrackBack(0) | 技術メモ(Oracle)

2008年03月14日

PDFファイルダウンロード

Ruby(CGI)でPDFファイルダウンロードを行います。
ダウンロードダイアログを表示しないで、AcrobatReaderプラグインで開いちゃいます。


#!"C:\usr\local\ruby\bin\ruby.exe"
require 'cgi'

def download(filename)

open(filename) {|fp|

basename = File.basename(filename)

param = {
'Content-Type' => "application/pdf",
'Content-Length' => fp.stat.size,
'Expires' => 0,
'Cache-Control' => "must-revalidate, post-check=0,pre-check=0",
'Pragma' => "private",
'Content-Disposition' => "inline; filename=\"#{basename}\""
}

cgi = CGI.new
cgi.out(param){
fp.read
}
}

end

download('c:\\sample.pdf')




良かったらクリックお願いします→banner_01.gif
posted by 台北猫々 at 08:00| Comment(0) | TrackBack(0) | 技術メモ(Ruby)