カテゴリー : 2007年 12月

CVS 入出力 を支援する PEAR パッケージ


PHP5.1 以降には fgetcsv(), fputcsv() という関数が標準で提供されていますが、別の選択肢として PEAR でも File_CSV というクラスが提供されています。
 
このクラスは File パッケージに含まれています。

pear install File

 
■利用例(tests/parser.php を改変したもの)
ファイルから読み込む

<?php
require_once ‘File/CSV.php’;
 
$file = “test.csv”;
 
$conf = File_CSV::discoverFormat($file); // ファイルからデータ構造を判別(区切文字やクォーテーションなど)
while ($fields = File_CSV::read($file, $conf)) { // 取得したデータ構造を利用して行単位で読み取る
    print_r($fields);
}

ファイルから配列に読み込む

<?php
require_once ‘File/CSV.php’;
 
$file = “test.csv”;
 
$conf = File_CSV::discoverFormat($file); // ファイルからデータ構造を判別(区切文字やクォーテーションなど)
while ($fields = File_CSV::read($file, $conf)) { // 取得したデータ構造を利用して行単位で読み取る
    print_r($fields);
}

CSV ファイルの中身をすべて配列として読み込む

<?php
require_once ‘File/CSV.php’;
 
$file = “test.csv”;
 
$conf = File_CSV::discoverFormat($file); // ファイルからデータ構造を判別(区切文字やクォーテーションなど)
while ($fields = File_CSV::read($file, $conf)) { // 取得したデータ構造を利用して行単位で読み取る
    print_r($fields);
}

ファイルから配列に読み込む

<?php
require_once ‘File/CSV.php’;
 
$file = “test.csv”;
 
$conf = File_CSV::discoverFormat($file); // ファイルからデータ構造を判別(区切文字やクォーテーションなど)
$data = File_CSV::readAll($file, $conf); // 取得したデータ構造を利用し、配列として全て取得する。
var_dump($data);
<<
ファイルに書きこむ例:

<?php
require_once ‘File/CSV.php’;
 
$file = “test.csv”;
 
// 書き込む内容
$data = array(
array(“foo”, “boo”, “woo”),
array(“fo\”o”, “bo,o”, “woo”), // エスケープが必要な文字を含むレコード
);
// CSV 書式
$conf = array(
    ’fields’ => count($data[0]), // カラム数
    ’sep’ => “,”, // 区切り子
    ’quote’ => ‘”‘, // 囲み文字
    // ‘header’ => false, // NULL 以外を指定すると, read 時に一行目をヘッダとみなして各要素のキーとして扱う
);
// 書きこみ実行
foreach($data as $row) {
    File_CSV::write($file, $row, $conf); //
}

 
ファイルの書きこみ制御ができなかったり、設計上気になる点もありますが、
単純に読み書きするのには十分そうです。

FreeBSD で FUSE


FreeBSD 6 で仮想ファイルシステム(VFS) を使いたくなり、ports から FUSE をインストールしました。 emulator/fuse ではなく, sysutils/fusefs-kmod が正解。 FUSE 用のファイルシステムも sysutils-fusefs-* にあります。
 
参考:
Google SoC 2005からFUSE for FreeBSDなど – 若者に与えられた活躍の場

CUI 上の日本語表示/入力関係の ports


FreeBSD の CUI 環境から(X 一切なしで)コンソールで日本語入力ができないものか、と試行錯誤した結果次のような構成で落ち着きました。
  
OS: FreeBSD 6.2
日本語入力サーバ(Canna): japanese/canna (/etc/rc.conf で canna_enable=”YES” とする)
Canna 用辞書: japanese/cannadic (インストール方法は /usr/local/share/doc/cannadic/README.ja を参照)
日本語表示: japanese/kon2-16dot または japanese/kon2-14dot
日本語入力(UIM + Canna): japanese/uim-canna
  
CUI での日本語入力は kinput2 が主流ですが、X サーバが必要だったので今回は UIM を選択しました。
  
- その他あると便利なもの:

w3m: www/w3m-m17n
jless(less): japanese/jless
jvim (vi,vim): japanese/jvim3-canna
emcws (emacs): japanese/emacs-emcws

  
- 使い方:

$ kon
$ uim-fep
$ echo “ハローワールド”

とし、 canna[ C - R] のような文字列が下に表示されたら Ctrl-\ で日本語入力ができます。また、uim-fep は tty に依存しないのでリモートからも使えます。
 
ちなみに kon 以外の選択肢として, Linux の Framebuffer を用いた jfbtermがあり、FreeBSD 版も Yusuke Baba 氏により公開されています。)。
jfbterm と w3m-img for FreeBSD framebufferと組み合わせることで画像も表示できるようですが、jfbterm の画面切り替え時のオーバーヘッドに耐え切れず利用は断念しました。

Gmail をストレージとして使う Firefox Addon


Gspace:
https://addons.mozilla.org/ja/firefox/addon/1593
 
- 参考:
Gspace を使ってみる(おもにパソコンのこと)