<<前 [TOP] 次>>
メモ帳を開いて次のプログラムを作ってみましょう。
【hyou5.rb】
# hyou5.rb class Hyou5 def drawTable( data, flag ) max = maxWidth( data ) for i in 0..(data.length-1) do drawLine( data[i], max, flag ) end end def drawLine( line, max, flag ) if (flag == 0) then for j in 0..(line.length-1) do print '|' + (line[j]).to_s for k in (count( line[j] )+1)..max[j] do print ' ' end end elsif (flag == 1) then for j in 0..(line.length-1) do print '|' for k in (count( line[j]) +1)..max[j] do print ' ' end print line[j] end end puts '|' end def maxWidth( data ) max = Array.new(data[0].length) for j in 0..(data[0].length-1) do max[j] = 0 for i in 0..(data.length-1) do count = count( data[i][j] ) if ( count > max[j] ) then max[j] = count end end end return max end def count( str ) count = 0 a = str.split(//) for i in 0..(str.length-1) do if (a[i].match(/^[a-z]+$/)) then count+=1 elsif (a[i].match(/^[0-9]+$/)) then count+=1 else count+=2 end end return count end end left = 0 right = 1 data = [[ '1', '2', '3', '4', '5', '6' ], [ '田中', '木村', '佐藤', '鈴木', '高橋', '斉藤' ], [ '太郎', '二郎', '三郎', '四郎', '五郎','六郎' ], [ 'tanaka','kimura', 'satou', 'suzuki', 'takahashi','saitou' ]] h = Hyou5.new() h.drawTable( data, left ) h.drawTable( data, right )
Leftは左寄せの時のフラッグとして使います。
Rightは右寄せです。
if文でLEFTかRIGHTかを判断し、それに基づいてスペースを前に入れるか、後に入れるかを決めています。
出力結果です。
メモ帳を開いて次のプログラムを作ってみましょう。
【hyou6.rb】
# hyou6.rb class Hyou6 def drawTable( data, flags ) max = maxWidth( data ) for i in 0..data.length-1 do drawLine( data[i], max, flags[i] ) end end def drawLine( line, max, flag ) if ( flag == 0 ) then for j in 0..line.length-1 do print '|' + (line[j]).to_s for k in count( line[j] )+1..max[j] do print ' ' end end elsif ( flag == 1 ) then for j in 0..line.length-1 do print '|' for k in count( line[j] )+1..max[j] do print ' ' end print line[j] end end puts '|' end def maxWidth( data ) max = Array.new(data[0].length) for j in 0..(data[0].length-1) do max[j] = 0 for i in 0..(data.length-1) do count = count( data[i][j] ) if ( count > max[j] ) then max[j] = count end end end return max end def count( str ) count = 0 a = str.split(//) for i in 0..(str.length-1) do if (a[i].match(/^[a-z]+$/)) then count+=1 elsif (a[i].match(/^[0-9]+$/)) then count+=1 else count+=2 end end return count end end left = 0 right = 1 data = [[ '1', '2', '3', '4', '5', '6' ], [ '田中', '木村', '佐藤', '鈴木', '高橋', '斉藤' ], [ '太郎', '二郎', '三郎', '四郎', '五郎','六郎' ], [ 'tanaka','kimura', 'satou', 'suzuki', 'takahashi','saitou' ]] flags = [ left, left, right, right ] h = Hyou6.new() h.drawTable( data, flags )
このプログラムでは、flagの配列を用意しています。
flags = [ left, left, right, right ]
drawTable()メソッドには、flagの配列を受け取るメソッドが増えています。
flagの配列を受け取ったdrawTable()メソッドは、flags[0]から順番にdrawLineメソッドにflagを渡していきます。
これにより、ラインごとに右寄せか左寄せか違う表示になります。
実行結果です。
メモ帳を開いて次のプログラムを作ってみましょう。
【hyou7.rb】
class Hyou7 def drawTable( data, flags ) max = maxWidth( data ) for i in 0..(data.length-1) do drawLine( data[i], max, flags[i] ) end end def drawLine( line, max, flag ) if ( flag == 0 ) then for j in 0..(line.length-1) do print '|' + (line[j]).to_s for k in count( line[j] )+1..max[j] do print ' ' end end elsif ( flag == 1 ) then for j in 0..(line.length-1) do print '|' for k in (count( line[j] )+1)..max[j] do print ' ' end print line[j] end elsif ( flag == 2 ) then for j in 0..(line.length-1) do s=(max[j]-count(line[j])) if ((s%2)==0) then s1=s2=s/2 else s1=s/2+1 s2=s/2 end print '|' for k in 1..s1 do print ' ' end print line[j] for k in (max[j]-s2)..(max[j]-1) do print ' ' end end end puts '|' end def maxWidth( data ) max = Array.new(data[0].length) for j in 0..(data[0].length-1) do max[j] = 0 for i in 0..(data.length-1) do count = count( data[i][j] ) if ( count > max[j] ) then max[j] = count end end end return max end def count( str ) count = 0 a = str.split(//) for i in 0..(str.length-1) do if (a[i].match(/^[a-z]+$/)) then count+=1 elsif (a[i].match(/^[0-9]+$/)) then count+=1 else count+=2 end end return count end end left = 0 right = 1 center = 2 data = [[ '1', '2', '3', '4', '5', '6' ], [ '田中', '木村', '佐藤', '鈴木', '高橋', '斉藤' ], [ '太郎', '二郎', '三郎', '四郎', '五郎','六郎' ], [ 'tanaka','kimura', 'satou', 'suzuki', 'takahashi','saitou' ]] flags = [ center, center, center, left ] h = Hyou7.new() h.drawTable( data, flags )
中央寄せが出来るように書き足しました。
elsif ( flag == 2 ) then for j in 0..(line.length-1) do s=(max[j]-count(line[j])) if ((s%2)==0) then s1=s2=s/2 else s1=s/2+1 s2=s/2 end print '|' for k in 1..s1 do print ' ' end print line[j] for k in (max[j]-s2)..(max[j]-1) do print ' ' end end end
これが、中央寄せをさせる部分です。
文字列の最大数が割り切れる場合と割り切れない場合の処理に分けています。
if ((s%2)==0) then
count()メソッドからこの文字列のカウント数を得ています。
count( line [j] )
出力結果です。
↓↓クリックして頂けると励みになります。