mieki256's diary



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追記。少しだけソースをリファクタリング(?)してアップロードし直した。追記終わり。

利用する前に、スクリプト内の一部を環境に合わせて修正する必要がある。
  • $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

テキストファイルに出力する時に改行コードを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公式ブログ

エポック秒を日付と時刻にしたい :

エポック秒、UNIX秒と言う時間の扱い方がある。1970/01/01 00:00:00 から何秒経過したか、という扱いなのだろうか。

このUNIX秒から、日付と時刻の情報に変換したい時は、localtime() が使える。配列を返してきて、それぞれに年月日、曜日、時分秒が入ってる。

_localtime 関数 - UNIX 秒をローカル時間に変換する | Perl 組み込み関数 | futomi's CGI Cafe
_Perlで日付・時刻を扱う - Perlゼミ|Perlの基礎をインストールからサンプルで丁寧に解説

open()の書き方は昔と今では違ってる :

モダンな書き方とやらがあるらしい。

_ファイル入出力関連 - プログラミング雑ネタ集

パスの結合 :


以上、1 日分です。

過去ログ表示

Prev - 2024/06 - Next
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project