[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

(DTPtechNote:1389) [ruby]節見出しのインクリメント



勉強部屋の#8893にレスしたので、メモ。
節見出しに自動ナンバリングするとき
こんなテキストがあったとして

第1章 ああああああ
●節みだし
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
●節みだし
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
第2章 ああああああ
●節みだし
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
●節みだし
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
●節みだし
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
●節みだし
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
第3章 ああああああ
●節みだし
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
●節みだし
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
●節みだし
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー


こう書けば

#! /usr/bin/ruby -Ks

while line = ARGF.gets
	if line =~ /^第(\d+)章 / then
		chap_num = $1#章番号をgetする
		sec_num = 0#節番号の初期化
	end
	line.sub!(/^●/) {"●#{chap_num}-" + (sec_num += 1).to_s}#
	print line
end

こうなります。

第1章 ああああああ
●1-1節みだし
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
●1-2節みだし
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
第2章 ああああああ
●2-1節みだし
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
●2-2節みだし
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
●2-3節みだし
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
●2-4節みだし
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
第3章 ああああああ
●3-1節みだし
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
●3-2節みだし
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
●3-3節みだし
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー
 ダミーダミーダミーダミーダミーダミーダミーダミーダミー