From: Gary Wright Date: 2007-03-31T05:15:16+09:00 Subject: Re: text processing On Mar 30, 2007, at 3:31 PM, Stephen Smith wrote: > line = "" > record = "" > oldLog = File.open("filename.txt") > newLog = File.new("filename_formatted.csv", "w") > hdr = "field1, field2, field3,...." > newLog << hdr > arr = oldLog.readlines > arr.each do |line| > record << > /(.{8})(.{6})(.{15})(.{3})(.{30})(.{4})(.{15})(.{1})(.{12})(. > {9})/.match(line).captures.join(',') > << "\n" > newLogg << record > record = "" > end How about making it so you don't have to type that pattern next time: def columns(*widths) Regexp.new(widths.map {|count| "(.{#{count}})" }.join) end pattern = columns(6,15,3,30,4,15,1,12,9) You also can get rid of the intermediate strings and the potentially huge internal array (from slurping up your oldLog into an array): oldLog.each { |line| newLog.print pattern.match(line).captures.join(',') }