ColdFusionで、ファイルを後ろから読み込む方法
cffileタグでは実現できないみたいだったため、javaでなんか組んでそれを外部APIを呼ぶみたいな感じのことをしなきゃいけないのかなぁ・・・みたいに考えていたのですが、微妙に違う方法がありました。
CreateObject関数でjavaクラスを生成しちゃえばいいんですね。
なぜ知らない、俺。勉強不足だなぁ。
というわけでcfでのtailな関数を書きました。
偉い人!添削して!
※注! このコードMX7では動きませんです。修正版はMX7では(?)javaCastが必要だった - 絵の具日記を見てください。
<cffunction name="tailread"> <cfargument name="filename" type="string" require="true"> <cfset reader=CreateObject("java", "java.io.RandomAccessFile")> <cfset reader.init("#ARGUMENTS.filename#", "r")> <cfset tailline="" > <cftry> <cfloop index="counter" from="#reader.length() - 1#" to=0 step=-1> <cfset reader.seek( counter ) > <cfset readChar = reader.read()> <cfif "#readChar#" IS "10" AND "#tailline#" IS NOT "" > <!--- 改行を見つけたらbreak ---> <cfbreak> <cfelseif "#readChar#" IS NOT "10" AND "#readChar#" IS NOT "13" > <!--- 復帰文字、改行文字でなければ読み出し ---> <cfset tailline = Chr( readChar ) & tailline > <cfelse> <!--- nothing ---> </cfif> </cfloop> <cfset reader.close() > <cfcatch> <cfset reader.close()> <cfthrow object=cfcatch > </cfcatch> </cftry> <cfreturn tailline /> </cffunction>