やりたいこと
Linuxコマンドでいうと、
unzip -c target.zip | cat
を実行した結果を配列に格納していくイメージです。
pythonでは出来るんですが、rubyでも同じ事は出来るはずだと思っています。
参考
考えたこと
require zip path = 'target.zip' Zip::File.open(path) do |zip| zip.each do |file| # このやり方が合っているか分からない file.get_input_stream do |contents| # ここでファイルの内容を取得できる方法があるのでは? end end end
ここでのrequire zipはrubyzipを使っていますが、こだわりはありません。
期待する結果
echo AB\nCD\nEF\n... >test1.txt echo 12\n34\n56\n... >test2.txt zip target.zip test1.txt test2.txt
で作成されていた場合、
require zip # zipのファイルを配列arrayに格納 p array[0] # AB # CD # EF # ... p array[1] # 12 # 34 # 56 # ...
改行部分は\n等で表示される分には問題ありません。
避けたいこと
zipを解凍したファイルをディスクにファイルを保存するのは避けたいです。
たとえばzipをtmpなりに解凍して、tmpディレクトリ以下のファイルをglobして何かしらの処理を行った後、tmpディレクトリごと削除する、というような方法です。
現在exec.rbを実行しているかどうかをプロセスIDや.lockファイルなどを作って処理待ちの判別をさせるような処理も避けたいと考えています。
運用ケース例
- 20180911.zipの中身と20180910.zipの中身を比較すると、ファイル名が一致している
- ファイル内から20180911などの日付を判定できる仕組みが存在しており、これらを使用してDBなどに登録している
rubyを諦めてpythonでやれば出来るんですが、今回はrubyで出来るかどうかが知りたいです。
※ 上記の考えたことのソースはなんか出来そうな雰囲気で書いていますのでやり方が間違っている可能性はありえます。
追記
Rubyやgemなどのバージョンについては特に意識していませんが、
それぞれ2.5.0, 2.7.3を使用しています。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/11/02 07:47