From 3df439edaf97719d10b993c64125083b13c0b631 Mon Sep 17 00:00:00 2001 From: Rikuoh Date: Sat, 20 Jul 2024 22:01:46 +0900 Subject: [PATCH] =?UTF-8?q?=E3=83=A1=E3=82=BD=E3=83=83=E3=83=89=E3=81=AE?= =?UTF-8?q?=E5=86=8D=E9=85=8D=E7=BD=AE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- wc.rb | 52 ++++++++++++++++++++++++++-------------------------- 1 file changed, 26 insertions(+), 26 deletions(-) diff --git a/wc.rb b/wc.rb index 8b16a82..f6131e7 100644 --- a/wc.rb +++ b/wc.rb @@ -2,6 +2,9 @@ require 'optparse' +options, input_sources = parse_options +input_stream_sources(input_sources, options) + def parse_options options = {} OptionParser.new do |opts| @@ -13,6 +16,29 @@ def parse_options [options, ARGV.empty? ? ['-'] : ARGV] end +def input_stream_sources(input_sources, options) + total_stats = [0, 0, 0] + max_widths = [0, 0, 0] + + input_sources.each do |source| + stats = input_stream(source) + total_stats = update_totals(total_stats, stats) + max_widths = update_max_widths(max_widths, stats) + result = format_result(stats, max_widths, options) + print_result(result, source) + end + + print_total(total_stats, max_widths, options) if input_sources.size > 1 +end + +def input_stream(source) + if source == '-' + count_file_stats(ARGF) + else + count_file_stats(File.read(source)) + end +end + def count_file_stats(input) lines = words = bytes = 0 input.each_line do |line| @@ -23,14 +49,6 @@ def count_file_stats(input) [lines, words, bytes] end -def process_input(source) - if source == '-' - count_file_stats(ARGF) - else - count_file_stats(File.read(source)) - end -end - def update_totals(totals, stats) totals.zip(stats).map { |total, stat| total + stat } end @@ -55,21 +73,3 @@ def print_total(total_stats, max_widths, options) total_result = format_result(total_stats, max_widths, options) puts "#{total_result} 合計" end - -def process_input_sources(input_sources, options) - total_stats = [0, 0, 0] - max_widths = [0, 0, 0] - - input_sources.each do |source| - stats = process_input(source) - total_stats = update_totals(total_stats, stats) - max_widths = update_max_widths(max_widths, stats) - result = format_result(stats, max_widths, options) - print_result(result, source) - end - - print_total(total_stats, max_widths, options) if input_sources.size > 1 -end - -options, input_sources = parse_options -process_input_sources(input_sources, options)