Wed, April 21, 2010
eps2png した後のエラーチェックの話,変換失敗したファイルを列挙
Cygwin上で EPSをPNGに変換する DPIを指定 のエントリーにある方法を使って、 カレントディレクトリにある eps ファイルを png に変換したはいいが、 途中でいくつかはエラーが発生した場合、 どのファイルがうまくpng 変換できなかったかをチェックする groovy コード。
コード chkEpsAndPng.groovy
//
// png が存在しない eps を列挙する
//
class MyFileFilter implements FileFilter{
def suffix
def MyFileFilter( def suffix ){
this.suffix = suffix
}
boolean accept(File path){
if( path.isFile() && path.name.endsWith( suffix ) )
return true
return false
}
}
def toFilenameList( def fileList ){
def filenamelist = new ArrayList<String>()
fileList.each{ file->
filenamelist.add( file.name )
}
filenamelist
}
def removeSuffix( def list, def suffix ){
def regex = ".${suffix}\$"
//println regex
def rlist = []
list.each{ filename->
rlist.add( filename.replaceAll( regex, '' ) )
}
rlist
}
def dir = new File('.')
def epslist = removeSuffix( toFilenameList( dir.listFiles( new MyFileFilter('eps') ) ) , 'eps')
def pnglist = removeSuffix( toFilenameList( dir.listFiles( new MyFileFilter('png') ) ) , 'png')
//println epslist.size()
//println pnglist.size()
def ngList = []
epslist.each{ eps->
if( pnglist.contains( eps )==false ){
ngList.add( eps )
}
}
// 対応する png ファイルが存在しない eps ファイルを列挙
ngList.each{ println it+'.eps' }
カレントディレクトリの eps , png それぞれの拡張子を持ったファイルを列挙して 存在を確認。eps はあるが、png がないファイルを標準出力する。
(おまけ)コード chkEpsAndPngNotCaseSensitive.groovy
Windowsの場合などファイルシステムがケースセンシティブではない場合のチェックコード。
拡張子が大文字小文字区別しない。
//
// png が存在しない eps を列挙する
//
class MyFileFilter implements FileFilter{
def suffix
def MyFileFilter( def suffix ){
this.suffix = suffix.toLowerCase()
}
boolean accept(File path){
if( path.isFile() && path.name.toLowerCase().endsWith( suffix ) )
return true
return false
}
}
def toFilenameList( def fileList ){
def filenamelist = new ArrayList<String>()
fileList.each{ file->
filenamelist.add( file.name )
}
filenamelist
}
def removeSuffix( def list, def suffix ){
suffix = suffix.toLowerCase()
def regex = ".${suffix}\$"
//println regex
def rlist = []
list.each{ filename->
rlist.add( filename.replaceAll( regex, '' ) )
}
rlist
}
def dir = new File('.')
def epslist = removeSuffix( toFilenameList( dir.listFiles( new MyFileFilter('eps') ) ) , 'eps')
def pnglist = removeSuffix( toFilenameList( dir.listFiles( new MyFileFilter('png') ) ) , 'png')
//println epslist.size()
//println pnglist.size()
def ngList = []
epslist.each{ eps->
if( pnglist.contains( eps )==false ){
ngList.add( eps )
}
}
// 対応する png ファイルが存在しない eps ファイルを列挙
ngList.each{ println it+'.eps' }
これでもファイル名の拡張子以外の部分の大文字小文字のことは考えていなかった。