RubyでScalaスクリプトをコンパイルするツールを作成する。

仕様

ツール1 タイムスタンプスナップ機能

フォルダ内の.scalaファイルのタイプスタンプのスナップを取得する。

ツール2 更新ファイル抽出機能

既存のタイムスタンプと現在のファイルのタイムスタンプを比較し更新されたファイルを取得する。

ツール3 一括コンパイル機能

ファイル一覧のファイルをコンパイルする

ツール4 特定ファイル実行機能

ツール1 タイムスタンプスナップ機能

rubyのディレクトリ関連の処理

ディレクトリ中のファイル一覧を取得する

ワイルドカードにマッチしたファイル全てに処理を行う

ファイルのタイムスタンプを取得する

snap_timestamp.rb

path=ARGV[0].gsub("\\","/")
ext="scala"
outfile="timestamp.txt"

buffer = ""
# **は再帰的検索。\0は複数パターンの区切り。.*は隠しファイル取得
Dir.glob("#{path}/**/*\0#{path}/**/.*" + ext).each{|name|
   puts name
   buffer = buffer + name + "\n"
   
	s = File.stat(name)
	timestamp = File.mtime(fname).strftime("%Y/%m/%d %H:%M:%S") # 最終更新時刻
	puts timestamp
	buffer = buffer + timestamp + "\n"
	
} 

# タイムスタンプスナップを上書き更新します。
file = File.open(path + "/" + outfile, "w");
# 書き込む
file.write(buffer);
file.close

snap_timestamp_diff.rb

更新したファイルを出力する

#第一引数はフォルダ名
path=ARGV[0].gsub("\\","/")
ext=/.*\.scala$/
outfile="timestamp.txt"

current={}

# **は再帰的検索。\0は複数パターンの区切り。.*は隠しファイル取得
Dir.glob("#{path}/**/*\0#{path}/**/.*" ).each{|name|
	if ext =~ name
		s = File.stat(name)
		current.store(name,File.mtime(name).strftime("%Y/%m/%d %H:%M:%S"))
	end

}

# タイムスタンプ保存用ファイル読み込み
before={}
file = open(path+"/"+outfile)
buffer = file.read().split("\n");
file.close
#2行を1つの配列にまとめた配列を作成
newItem=""
newItem = nil
buffer.each{|line|
	if newItem == nil
		newItem=line
	else
		if ext =~ newItem
			before.store(newItem,line)
		end
		newItem = nil
	end
} 


#タイムスタンプの比較 更新・新規追加したファイルを出力
current.each{|filepath, timestamp|
	if timestamp != before.fetch(filepath)
		puts filepath
	end
}
トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS