Perl File::ReadBackwards を使用してみた
PerlでFile::ReadBackwardsモジュールを使用してみました。このモジュールは、ファイルを逆から読み込むので、ファイルの最後付近にある文字列を抽出したい場合に役立ちます。
使用しているPerlはWindows版なので、このモジュールのレコードセパレータは\r\nなりますが、読み込むファイルはWindows版のcurlの-oオプションの出力ファイルなのに、なぜかレコードセパレータは\nでした。
幸い、このモジュールには、レコードセパレータを変更できるようにnewメソッドの第2引数で指定できます。
修正前:
my $bw = File::ReadBackwards->new($html_file);
修正後:
my $bw = File::ReadBackwards->new($html_file,"\n");
\nは、ダブルクォーテーションで囲ってください。シングルクォーテーションでは、\とnの文字列を改行として認識して、意図した動作をしません。
Perl readline() on closed filehandle
普段は、あるディレクトリの下にファイルを作成していますが、今回、少しでも高速にしようと、RAMディスクのEドライブ直下に書き込みを行っていました。一度目は、ファイルのオープンからクローズまで正常に終了するのですが、再度、実行すると、再オープンに失敗し、タイトルのエラーとなりました。
修正前:
open(FD, "< E:text.log");
修正後:
open(FD, "< E:\\text.log");
PerlがWindows版なので、ディレクトリの区切りには\を2度、重ねることは知っていましたが、ドライブとファイル名の間にも必要でした。
p.s.
また、しょうもないことで時間を食ってしまいました。orz
PerlでFusionTablesへのquery接続に成功
Google API ExplorerのRequestを参照して、query後にkey(api_key)を使用して、FusionTablesへweb接続すると、「401 Login Required」(Webでのリプライ)、「401 Unauthorized」(Perlでのリプライ)で失敗します。
webで接続する場合には、key(api_key)ではなくaccess_tokenを使用してください。
失敗
ttps://www.googleapis.com/fusiontables/v2/query?sql=select+*+from+FusiontableのId&key={YOUR_API_KEY}
成功
ttps://www.googleapis.com/fusiontables/v2/query?sql=select+*+from+FusiontableのId&access_token={access_token}
参照サイト:
Excelで図形を使用する時には
Excelで図形を使用する時には、「図形」と「図形の選択」を頻繁にクリックすることになるのですが、Excel画面の広さによっては、3,4クリックする羽目になり、大変非効率です。
例えば、ディスプレイ画面の半分の広さでExcel画面を表示させた状態で、「図形の選択」をクリックするには、「ホーム」「編集」「検索と選択」「図形の選択」と4クリック必要になります。
同様に、図形を選択する時にも「挿入」「図」「図形」「(図形)」と4クリックです。
そんな時には、「図形の選択」と「図形」コマンドを「クイック アクセス ツール バー」に設定すると、1クリックで済みます。
設定方法
1.「メニュー」で右クリックして、1行目の「クイック アクセス ツール バーのユーザー設定」をクリックします。
2.Excelオプション画面で、「図形」コマンドを選択し、「追加」をクリックします。
3.「コマンドの選択」で、「すべてのコマンド」を選択する。
4.下のリストから「図形の選択」コマンドを選択し、「追加」をクリックします。
5.「OK」ボタンをクリックします。
設定後のExcel画面
Perl Net::Google::DataAPI::Auth::OAuth2のインストール
前回、XML::LibXMLモジュールのインストールに成功したので、Net::Google::DataAPI::Auth::OAuth2のインストールを行ってみました。
cpanm Net::Google::DataAPI::Auth::OAuth2であっけなく、インストールできました。(一応、perldoc Net::Google::DataAPI::Auth::OAuth2でインストール確認)
Net::Google::DataAPI::Auth::OAuth2のSYNOPSISを再度、読み返すと、プロンプトから入力をたくしているので、どうやら認証コード(code)を自動で取得し、アクセストークンにできるわけではないようです。
参照サイト:
Net::Google::DataAPI::Auth::OAuth2 - search.cpan.org
libxml2とXML::LibXMLのインストール
PerlのNet::Google::DataAPI::Auth::Auth2モジュールのインストールの前提条件として、XML::LibXMLモジュールが前提となってます。さらに、このモジュールの前提条件として、libxml2とXML::NamespaceSupport、XML::SAXモジュールのインストールが前提となっています。64bitで開発環境を整えているので、ここでは、libxml2の64bit版のインストールを紹介します。
XML::NamespaceSupport、XML::SAXモジュールのインストール
1.XML::NamespaceSupportとXML::SAXをインストールします。
cpanm XML::NamespaceSupport
cpanm XML::SAX
詳細は忘れてしまいましたが、--forceオプションで成功した気がします。
libxml2のインストール
1.下記の本家のサイトをクリックし、左側のRelated linksから「WIndows binaries」をクリックします。
http://www.xmlsoft.org/downloads.html
2.「Getting the Binaries」の章の1行目にある「download area」をクリックし、ftpサイトの「64bit」をクリックします。
3.拡張子が7zであるlivconv,libtool,libxml2,libxslt,mingwrt,openssl,xmlsec,zlibをダウンロードし、ファイルを解凍します。
4.64bit shared zipのファイルをダウンロードし、拡張子が7zであるlivconv,libtool,libxml2,libxslt,mingwrt,openssl,xmlsec,zlibを解凍します。
(解凍には7-Zipを使用)
5.解凍して作成されたフォルダであるbin,include,lib,shareをD:\usrにコピーします。
6.D:\usr\include\libxml2\libxml配下にあるヘッダファイルを一段上のlibxml2フォルダにコピーします。
7.gettext-toolsの64bitのshared版をダウンロードします。
下記のURLから「Downloading gettext」の最下行にある「precompiled binaries for Windows」をクリックします。
https://www.gnu.org/software/
8.解凍して作成されたbin,lib,shareをD:\usrフォルダにコピーします。
9.システム変数のPATHにD:\usr\binを追加します。
XML::LibXML2のインストール
1.下記のリンクをクリックし、XML-LibXMLのモジュールをダウンロードします。
http://search.cpan.org/CPAN/authors/id/S/SH/SHLOMIF/XML-LibXML-2.0129.tar.gz
2.ダウンロードしたファイルを解凍します。
3.コマンドプロンプトを開き、解凍したフォルダに移動します。
4.以下を実行します。
perl Makefile.PL INC="-ID:\usr\include\libxml2 -ID:\usr\include" LIBS="-LD:\usr\lib" DEBUG=1 2>D:\temp\make.log
DEBUG以降の行は記述しなくても大丈夫ですが、デバッグがやりやすくなります。
5.dmakeを実行します。(1回目、エラーが出力されて終了)
6.D:/usr/lib配下のlibxml2.aを_libxml2.aにリネームします。
7.項番4.を再度、実行します。
8.dmakeを実行します。
9.dmake testを実行します。
All tests successful.
Result: PASSと表示されます。
10.dmake installを実行します。
11.perldoc XML::LibXMLを実行し、インストールが成功しているか、確認します。
参照サイト:
http://www.xmlsoft.org/downloads.html