2024/06/07(金) [n年前の日記]
#1 [hns][perl] hnsのカテゴリ一覧を作成するスクリプトを書いた
この日記ページを表示してるWeb日記システム hns のカテゴリ一覧ファイル(cat.txt)を作成するPerlスクリプトを書いた。
◎ ソースと使い方 :
スクリプトソースは以下。
_update_hnf_cat_pl.txt (update_hnf_cat.pl)
※ 2024/06/08追記。少しだけソースをリファクタリング(?)してアップロードし直した。追記終わり。
利用する前に、スクリプト内の一部を環境に合わせて修正する必要がある。
以下を打てば、hnfファイル群をスキャンして、「CAT hoge fuga piyo」と書かれた部分を読み取り、cat.txt を更新する。
デフォルトでは、既に存在していた cat.txt の内容に、新規カテゴリ名を追加するように処理をしていくけれど、全部作り直したい時は以下のオプションをつけて実行すれば、既にある cat.txt の内容を無視して処理をする。
日本語のカテゴリ名には対応してない。英数字のカテゴリ名にのみ対応。
動作確認環境は以下。
Perlで書いたから処理が遅いだろうかと不安だったけど、Intel Atom N270 + HDD + RAM 2GB + Debian Linux 10 buster の環境でも数分で処理を終えるので、これでもまあいいかなと…。
_update_hnf_cat_pl.txt (update_hnf_cat.pl)
※ 2024/06/08追記。少しだけソースをリファクタリング(?)してアップロードし直した。追記終わり。
利用する前に、スクリプト内の一部を環境に合わせて修正する必要がある。
- $hnfdir に、hnfファイルが入ってるディレクトリを指定。(例: ~/diary/)
- $cattxtdpath に、cat.txt が入ってるディレクトリを指定。(例: ~/.public_html/diary/cat/)
- $lock_dir に、処理中のロックディレクトリのパスを指定。(例: ~/diary/log/update_hnf_cat_lock)
以下を打てば、hnfファイル群をスキャンして、「CAT hoge fuga piyo」と書かれた部分を読み取り、cat.txt を更新する。
perl update_hnf_cat.pl or ./update_hnf_cat.pl
デフォルトでは、既に存在していた cat.txt の内容に、新規カテゴリ名を追加するように処理をしていくけれど、全部作り直したい時は以下のオプションをつけて実行すれば、既にある cat.txt の内容を無視して処理をする。
perl update_hnf_cat.pl --clean or ./update_hnf_cat.pl --clean
日本語のカテゴリ名には対応してない。英数字のカテゴリ名にのみ対応。
動作確認環境は以下。
- Windows10 x64 22H2 + Strawberry Perl 5.32.1.1-x64
- Debian Linux 10 buster + Perl 5.28.1 i686
Perlで書いたから処理が遅いだろうかと不安だったけど、Intel Atom N270 + HDD + RAM 2GB + Debian Linux 10 buster の環境でも数分で処理を終えるので、これでもまあいいかなと…。
◎ タイプミスがやたらと多かった :
このスクリプトを使って、カテゴリ名を自動で抽出してみたら、今までカテゴリ名をかなりタイプミスしていたことに気づいた。例えば、「windows」を、「windos」「wndows」「window」「windwos」と打ち込んでいたり、等々…。
この際だから、過去に書いた日記ページ内で打ち間違えていたところを修正しておいた。
この際だから、過去に書いた日記ページ内で打ち間違えていたところを修正しておいた。
[ ツッコむ ]
#2 [perl] Perlのアレコレについてメモ
今回 Perl のスクリプトを書いた際にググって調べた点についてメモ。
◎ OS判別 :
「$^O」という特殊変数を見れば、何のOS上でPerlが動いているかが分かるらしい。
_OS名を取得する $^O - Perlゼミ|Perlの基礎をインストールからサンプルで丁寧に解説
_[perlメモ]OSの判別方法 ≫ KUMA TYPE
_OS名を取得する $^O - Perlゼミ|Perlの基礎をインストールからサンプルで丁寧に解説
_[perlメモ]OSの判別方法 ≫ KUMA TYPE
◎ テキストファイルに出力する時に改行コードをLFにしたい :
Windowsの改行コードはCRLFだけど、UNIX/Linuxの改行コードはLFなので、Windows上でPerlスクリプトを動かしてテキストファイルに出力する時に、改行コードをLinuxのLFにしておきたい。
open() でファイルを開いた直後に、binmode でバイナリモードにすればいいらしい。テキストモードでは "\n" を各OSに合わせて自動変換するので、Windows上では "\n" が CRLF になってしまうけれど、バイナリモードなら自動変換が働かなくなるので、"\n" はLFのみになる。
_Windows上のPerlで改行コードをLF(0x0a)にするには - 小池啓仁 ヒロヒト応援ブログ By はてな
_Perlを使い、思い通りの文字コードと改行コードでファイルを作成する方法 - pikio公式ブログ
open() でファイルを開いた直後に、binmode でバイナリモードにすればいいらしい。テキストモードでは "\n" を各OSに合わせて自動変換するので、Windows上では "\n" が CRLF になってしまうけれど、バイナリモードなら自動変換が働かなくなるので、"\n" はLFのみになる。
_Windows上のPerlで改行コードをLF(0x0a)にするには - 小池啓仁 ヒロヒト応援ブログ By はてな
_Perlを使い、思い通りの文字コードと改行コードでファイルを作成する方法 - pikio公式ブログ
◎ エポック秒を日付と時刻にしたい :
エポック秒、UNIX秒と言う時間の扱い方がある。1970/01/01 00:00:00 から何秒経過したか、という扱いなのだろうか。
このUNIX秒から、日付と時刻の情報に変換したい時は、localtime() が使える。配列を返してきて、それぞれに年月日、曜日、時分秒が入ってる。
_localtime 関数 - UNIX 秒をローカル時間に変換する | Perl 組み込み関数 | futomi's CGI Cafe
_Perlで日付・時刻を扱う - Perlゼミ|Perlの基礎をインストールからサンプルで丁寧に解説
このUNIX秒から、日付と時刻の情報に変換したい時は、localtime() が使える。配列を返してきて、それぞれに年月日、曜日、時分秒が入ってる。
_localtime 関数 - UNIX 秒をローカル時間に変換する | Perl 組み込み関数 | futomi's CGI Cafe
_Perlで日付・時刻を扱う - Perlゼミ|Perlの基礎をインストールからサンプルで丁寧に解説
◎ open()の書き方は昔と今では違ってる :
◎ パスの結合 :
File::Spec->catfile("Directory", "file") が使える。
_File::Spec - OSに依存しないファイル名を作成 - Perlゼミ|Perlの基礎をインストールからサンプルで丁寧に解説
_File::Spec - OSに依存しないファイル名を作成 - Perlゼミ|Perlの基礎をインストールからサンプルで丁寧に解説
[ ツッコむ ]
以上、1 日分です。