k_ikiの雑記帳

DTPのこと、創作のことなど、思いつくまま

InDesign互換ファイルからテキスト取り出し

標題のrubyスクリプト、一応書いてみた。
WindowsXP/InDesign CS3から書き出した*.inxの中からテキストだけを抜き出す。
ページ順に取り出してくれるわけじゃないので、フレームが連結されてないと順番ばらばらになる可能性大。

(追記)連結されているならInDesignの標準機能で書き出せば済む話ですね(^^;

while line = ARGF.gets
	if /^\s+<pcnt\>c_.+<\/pcnt\>$/ =~ line
		line.gsub!(/<\?.+?\?>/) {""}
		print line.sub!(/^\s+<pcnt\>c_(.+)<\/pcnt\>$/) {"#{$1}"}
	end
end

なお、明示的に文字コードを指定する場合は、たとえWindowsでもunicode指定しないと化けます。
inx自体がunicodeで書かれているためです。
inxは特殊なフォーマットではあるけれども基本的にはXMLファイルなので、これを直接上記rubyスクリプトにかけて、テキストとしてファイルにリダイレクトすることで必要なテキスト部分の抽出ができます。
 
要は、pcntタグに続き文字列 c_ があるコンテンツだけを抜き出そうという魂胆。
表セルの内容もpcntタグで囲まれているので抽出できます。ただし、セル毎に改行してしまいますが。
同タグで囲まれた文字列の中に <? で始まって ?> で閉じる文字列があれば削除します。
しかし、そのせいでpcntタグの中身が空っぽになってしまう行も有り得ます。
その場合 ruby は nil を返し、リダイレクトしたテキスト中にも“nil”と書き込まれてしまうので要注意。
その気が起きれば改善のために手を加えよう……かな?(^^;