ラベル Ruby の投稿を表示しています。 すべての投稿を表示
ラベル Ruby の投稿を表示しています。 すべての投稿を表示

2008-05-20

Rubyで「ファイル逆から表示」

Rubyで「ファイル逆から表示」

ファイル出力を逆から表示するプログラムを作成してみました。
ログを整形するときにちょっとやってみようと・・

(例)
1
2
3

3
2
1


reverse_lines.rb
filename = ARGV[0]

file = open(filename)
info = Array.new

while text = file.gets do
info.push(text)
end
file.close

puts "original:"
puts info
puts "reverse:"
puts info.reverse


実行
$ruby reverse_lines.rb hoge.txt


実行結果
original:
1
2
3
reverse:
3
2
1


参考
[Ruby][勉強会]第3章コマンドを作ろう
http://d.hatena.ne.jp/syou6162/20080206/1202258516

Rubyで「ファイル情報出力」

カレントディレクトリのファイル情報を取得するプログラムを書いてみました。

file_info.rb
Dir::glob("**/*.*").each {|f|
puts "#{f},#{File::stat(f).size},
#{File::stat(f).mtime.strftime("%Y/%m/%d %H:%M")} "
}


実行(hogeディレクトリの中のファイルを確認する)
$cd hoge
hoge>$ruby ../file_info.rb


実行結果
ファイル名、サイズ(バイト)、修正日の順に出力されます。
hoge1.txt,36,2008/05/20 10:10
hoge2.txt,203,2008/05/20 10:11
hoge3.txt,97,2008/05/20 10:11

2008-05-12

Rubyで「ファイルの内容消去」

Rubyでファイル内容を消去する方法がありましたので
メモっておきます。

erase_file.rbのソース

f = ARGV[0]
File.open(f,'w'){|file| file = nil}


端末から実行します。

$ruby erase_file.rb test.txt


実行結果
test.txtの内容が消去される。
(当然ですが、test.txtのファイルは残ったままで
 中身だけが削除される。)


[参考]ruby-talk-googleより
http://groups.google.co.jp/group/ruby-talk-google/browse_thread/thread/d3f54880a601b23f

PS:実際にはどのような使われ方するかはよく分からないけど。
  ファイル削除して、もう一度ファイル作成するだけと思ったりもする。

2008-05-09

Rubyで「データ整形」

試験データ作成に使えそうな
データ整形をメモっておきます。

◇zero suppress有り
例)10⇒0000000010

ソース
i = 10
zero_i = i.to_s.rjust(10,"0")
puts zero_i
puts "%010d " % i

※やり方は、2つ。どちらでもOK。

実行結果
0000000010
0000000010


◇固定長(半角空白埋め)
例)
「10」⇒「########10」
「10」⇒「10########」
※「#」は「空白」と読み替えてください。

ソース
i = 10
sol_i1 = i.to_s.rjust(10," ")
sol_i2 = i.to_s.ljust(10," ")
puts sol_i1
puts sol_i2
puts "% 10d" %i


実行結果
        10
10
10


◇半角から全角への変換

han2zen.rbのソース
require 'jcode'
s = ARGV[0]
puts s.tr('0-9A-Za-z-','0-9A-Za-zー')

端末から実行する。

$ruby -Ku han2zen.rb 1234567890abcdEFGH-

※windowsのsjisエンコードの場合は、ruby -Ks とする。


実行結果
1234567890abcdEFGHー

※全角に変換される。

[参考]
http://bbs.ddc.co.jp/mt/indesignbbs/archives/9507_20060709111700.html

Rubyで「ランダム生成」

乱数作成方法をメモ。

(1)1~3までの乱数
rand(3)+1

(2)0~3までの乱数
rand(4)

ソース
10.times{
puts "(1): #{rand(3)+1} (2): #{rand(4)}"
}


実行結果
(1): 3 (2): 1
(1): 2 (2): 1
(1): 1 (2): 1
(1): 1 (2): 0
(1): 3 (2): 0
(1): 2 (2): 3
(1): 3 (2): 3
(1): 1 (2): 1
(1): 2 (2): 1
(1): 2 (2): 0

Rubyで「ランダムに日付取得」

1万件のテストデータを作成するとき、
登録日をランダム作成する必要があり、
こんな感じで作ってみました。

◇期間を指定して、ランダムに日付を生成する。

ソース
require 'date'

def rand_date(d_from,d_to)
from = Date.parse(d_from)
to = Date.parse(d_to)
days = to - from + 1
return from + rand(days)
end

5.times{
puts rand_date("1978-09-30","1980-10-10")
}


実行結果
1979-08-02
1979-08-13
1980-05-03
1979-02-06
1979-01-30

[参考]
http://d.hatena.ne.jp/rubyco/20070704/date

Rubyで「繰り返し処理(times)」

Rubyすごい。こんな簡単に書けるなんて
感激です。
システム試験のデータ作成に色々使えそう。

◇100件のデータを作成

datacreate.rbのソース
100.times{ |i|
puts i
}

実行結果
1
2
3
.
.
100

◇ファイル出力は標準出力をリダイレクトする
$ruby datacreate.rb > testdata.txt