CSVで先頭が0で始まる数字を吐き出すときに

2010/04/24 | その他

データベースなどからエクセル用にCSVを吐き出すのはよくある処理だ。でも、昔から困っていたことがあって、電話番号の出力で大抵、問題が起きる。

例えば「03」というデータをCSVで普通に書き出して、エクセルで自動で読み込ませると、「3」に変換されてしまうのだ。例えば拡張子をdat等にしておき、エクセルをあらかじめ開いておいて、「ファイル」メニューから「開く」を選択し、「ファイルの種類」を「すべてのファイル」にして、テキストファイルウィザードを起動し、各カラムの形式を設定しつつ・・・ということをすれば、「03」と表示させることができる。今まではクライアントに「こうやってください」とお願いしてきた。しかし、これ、面倒。

拡張子をcsvにしてファイルを保存すると、そのファイルをダブルクリックすれば自動でエクセルがCSVを読み込んでくれる(もちろんエクセルがインストールされていればの話だが)。こういうことに慣れているわけだから、単にダブルクリックで開くだけでうまくいかないものか、とかねがね考えていた。「自動変換しない」とかのキーワードで検索したりしたけど、うまく見つけられなかった。

では、そのようなことが出来るのだろうか。答えはできる。CSVで出力するときはカンマ区切りのデータを作成する。で、各値は数字ならそのまま、文字列ならダブルクオーテーションでくくる。問題の0で始まる数字。これは以下のように書く(2つ目の項目)。

1, =”03″, “文字列”

当該文字列をダブルクォーテーションでくくり、前に=(イコール)を付ける。これでOKになる。今まで如何に調べ方が下手だったのかわかる。だってこんな簡単なことなのに・・・。

PHP4でのコンストラクタの挙動の覚書(2)

2010/04/23 | PHPの基本

PHP4のコンストラクタのメモをもう一つ。継承先のクラスにコンストラクタがなかった場合の挙動。使用するコードは同じもので、継承先のコンストラクタをコメントアウトした。

class hoge
{
function hoge(){print(‘hoge’);}
}
class fuga extends hoge
{
//function fuga(){print(‘fuga’);}
}
$obj=new fuga;

実行結果はこうなる。

hoge

「こういう仕様である」と理解して使えば問題ないのだろうけど、まともな発想に立てば使いにくい。他の言語はどうなのか全く知らないけれど、とまどう人も多いのではなかろうか。

といっても、PHP4はかなり駆逐されてしまっているので、こういう話題もほとんど出てこないだろうけど。

PHP4でのコンストラクタの挙動の覚書

2010/04/21 | PHPの基本

PHPはバージョン5からクラスのコンストラクタを__constructと記述できるようになった。もちろんバージョン4の時と同様に、クラス名と同じ名前のメソッドでもOKだ。PHP4の時のクラスを拡張した際のコンストラクタの挙動について、毎回忘れることがあるのでメモしておく。

class hoge
{
function hoge(){print(‘hoge’);}
}
class fuga extends hoge
{
function fuga(){print(‘fuga’);}
}
$obj=new fuga;

このコードを実行した際にhogeクラスで用意したコンストラクタhoge()は動作しない。実行結果はこうなる。

fuga

parent::__construct()みたいに呼び出すのと同様に$this->hoge()と呼び出す必要がある。

いつも「どうだったっけ」となるのでメモしておく。

Smartyで配列のキーが配列の時

2010/04/18 | Smarty

Smartyで配列を処理するときはこんな具合に書く。

PHP内でこんなとき・・・$vars[‘hoge’]
{$vars.hoge}

PHP内でこんなとき・・・$vars[$hoge]
{$vars.$hoge}

PHP内でこんなとき・・・$vars[‘hoge’][$fuga]
{$vars.hoge.$fuga}

さして難しいわけではないけれど、配列のキーが配列になる場合の記述がわからなかった

PHP内でこんなとき・・・$vars[$hoge[‘fuga’]]

答えはこんな感じ

{$vars[$hoge.fuga]}


守谷市(まちの情報ポータル) 無料アンケートレンタルjpForm.net