From: Masaki Hasegawa Date: 2011-05-25T00:23:38+09:00 Subject: [ruby-list:48107] Re: データ整形 長谷川 と申します。 むらたさんが指摘されているように、何をしたいのか判りませんので、 次のような動作を勝手に想像して楽しませていただきました。 入力の各行について、 (1) 指定された(任意の)文字数を行頭から取り出して、当該行に関する 1行目の出力とする。 (2) 2行目以後は、「直前に出力した行の先頭文字が連続する数」を 行の長さとして当該行の残りから取り出して出力する。 (3) 当該行のデータが残っている限り (2) を繰り返す。 臼井さんの求めるものかどうかは知りませんが、この動作は出力例には 合致すると思います。不細工ですがコード例です: #!/usr/bin/ruby n1 = ARGV.shift.to_i if n1 < 1 $stderr.print "usage: #{File.basename($0)} length-of-first-line [file]\n" exit 1 end def nchar_print(n, data) return if data.nil? || data.size < 1 || n < 1 head, tail = data[0, n] , data[n..data.size] print head + "\n" nn = 0 while (nn < n && head[nn] == head[0]) do nn += 1 end nchar_print(nn, tail) end while (line = gets) do nchar_print(n1, line.chomp) end