進路相談室のWindowsファイル共有を mount する
この H17 年度では、進路相談室に寄せられる求人票や学生の帰校届けは、 相談室の Windows サーバに蓄積されている。 しかし、検索などのサービスなどが完備されている訳ではないので、 ちょいと unix サーバ側で検索システムを作りたい。
Windowsのファイル共有を smbmount する。
そこで、Windows のファイル共有を unix 側で利用するために、 smbmount により接続することとした。 相談室サーバは、10.110.33.161 で、共有名が『2005年度』。
# なんで、共有名を漢字にするんだよー。
# smbmount `echo //10.110.33.161/2005年度 | nkf -s` /mnt -o ro,guest,codepage=cp932,iocharset=euc-jp
しかし、mount 作業などが面倒なので、autofs にて mount できるようにする。 共有名部分は Shift-JIS の必要がある FN samba-3.0系では、共有名は euc-jp でも OK となったみたい。 /FN ので、 automount 用のファイルは他の automount とは別管理したいので、以下のように設定する。
≪ /etc/auto.master ≫ /career /etc/auto.career ≪ /etc/auto.career ただし Shift-JIS にて保存 ≫ 2005 -fstype=smb,ro,guest,codepage=cp932,iocharset=euc-jp ://10.110.33.161/2005年度 ≪ autofs 再起動 ≫ # /etc/init.d/autofs restart # autofs再起動 # ls /career/2005 # 閲覧の確認 帰校届/ 求人状況17.xls* 求人票/ 大学説明会/
Web で調べたネタだと、samba 2.0系の記事が多く、codepage=932,iocharset=euc にて 説明されていたため、最初戸惑う。
Excel のファイルを扱う(Spreadsheet::ParseExcel)
Excel のファイルを扱う(Spreadsheet::ParseExcel)
就職情報は最終的に Excel にて保存されているので、Excel のファイルを自由に読むために 以下の設定を行う。
≪ 関連の perl モジュールのインストール ≫ # apt-get install libspreadsheet-parseexcel-perl libunicode-map8-perl libi18n-charset-perl # perl -MCPAN -e shell cpan> install Unicode::Map cpan> exit
しかし、サンプルコードを動かすと が無い というエラーメッセージがでる。よって、以下の書き換えを行う。
≪ /usr/share/perl5/Spreadsheet/ParseExcel/FmtJapan2.pm を編集 ≫ ≪ CP932Excel → CP932 に書き換え ≫ #------------------------------------------------------------------------------ # new (for Spreadsheet::ParseExcel::FmtJapan2) #------------------------------------------------------------------------------ sub new($%) { my($sPkg, %hKey) = @_; my $oMap = Unicode::Map->new('CP932'); die "NO MAP FILE CP932!!" unless(-r Unicode::Map->mapping("CP932")); my $oThis={ Code => $hKey{Code}, _UniMap => $oMap, }; bless $oThis; $oThis->SUPER::new(%hKey); return $oThis; }
ちなみに、参考ページにて記載されているサンプルコードを試すが、 html 化する時に、一部プログラムが壊れていたみたい。 動作試験のコードは下記のとおり。
#!/usr/bin/perl use strict; use lib "/usr/local/lib/perl" ; use Spreadsheet::ParseExcel; use Spreadsheet::ParseExcel::FmtJapan2; my $excel = new Spreadsheet::ParseExcel; my $formatJ = Spreadsheet::ParseExcel::FmtJapan2->new(Code => 'euc'); my $book = $excel->Parse('求人情報17.xls', $formatJ); my $worksheet = $book->{Worksheet}[1]; # Book #0 for( my $row = $worksheet->{MinRow}; defined $worksheet->{MaxRow} && $row <= $worksheet->{MaxRow}; $row++) { for( my $col = $worksheet->{MinCol}; defined $worksheet->{MaxCol} && $col <= $worksheet->{MaxCol}; $col++) { print $worksheet->{Cells}[$row][$col]->{_Value}.","; } print "\n"; }
しかし、動かしてみると、一部のデータが読めていない。 どうも、Office 2000 形式が原因みたい。ファイルを別コピーして Excel 95 形式に直すと 全ての情報を読めることが確認できた。 ということで、就職相談室の方には、 95形式で保存してね!』 と伝えよう。
試作した就職情報のページ
ちなみに、 試作した就職情報のページはこちら 。 を貼ってあります。 試作段階で、検索はいいかげん。使いやすくなるまで待ってね。