0

私はRubyを初めて使用するので、プログラムのヘルプを利用できます。多くのデータ行を含む複数のテキストファイルを含むzipファイルを開く必要があります(例)

CDI|3|3|20100515000000|20100515153000|2008|XXXXX4791|0.00|0.00
CDI|3|3|20100515000000|20100515153000|2008|XXXXX5648|0.00|0.00
CHO|3|3|20100515000000|20100515153000|2114|XXXXX3276|0.00|0.00
CHO|3|3|20100515000000|20100515153000|2114|XXXXX4342|0.00|0.00
MITR|3|3|20100515000000|20100515153000|0000|XXXXX7832|0.00|0.00
HR|3|3|20100515000000|20100515153000|1114|XXXXX0238|0.00|0.00

最初にzipファイルを抽出し、zipファイルにあるテキストファイルを読み取り、(CDIおよびCHO)で始まる完全な行のみを2つの出力ファイルに書き込む必要があります。1つはで始まるデータの行用で、CDIもう1つはデータの行用です。で始まるCHO(基本的にファイルの解析)。私はRubyでそれをしなければならず、おそらく同じ身長の連続したzipファイルの到着のためにプログラムを自動機能に設定しようとします。誰かが与えることができるいくつかのサンプルを介したアドバイス、指示、または助けに完全に感謝します。

4

2 に答える 2

0

1つの手段は、ZipFileライブラリを使用することです。

require 'zip/zip'

# To open the zip file and pass each entry to a block
Zip::ZipFile.foreach(path_to_zip) do |text_file|
   # Read from entry, turn String into Array, and pass to block
   text_file.read.split("\n").each do |line|
      if line.start_with?("CDI") || line.start_with?("CHO")
         # Do something
      end
   end
end
于 2012-06-28T16:32:57.257 に答える
0

私があなたの質問に完全に従うかどうかはわかりません。手始めに、Rubyを使用してファイルを解凍する場合は、この質問を確認してください。ファイルを読み取り可能な形式に解凍したら、これらの行に沿って何かを試して、2つの別々の出力に出力できます。

cdi_output = File.open("cdiout.txt", "a")  # Open an output file for CDI
cho_output = File.open("choout.txt", "a")  # Open an output file for CHO

File.open("text.txt", "r") do |f|          # Open the input file
  while line = f.gets                      # Read each line in the input
    cdi_output.puts line if /^CDI/ =~ line # Print if line starts with CDI
    cho_output.puts line if /^CHO/ =~ line # Print if line starts with CHO
  end
end

cdi_output.close                           # Close cdi_output file
cho_output.close                           # Close cho_output file
于 2012-06-28T16:37:01.580 に答える