2017-11-01 12 views
0

単一のテキストファイル(csv)を含むgzipedファイルを反復処理する方法はありますか?gzipファイル(1つのcsvを含む)を反復/ストリームする方法は?

extern crate flate2; 

use std::io::prelude::*; 
use flate2::read::GzDecoder; 

fn main() { 
    let mut d = GzDecoder::new("...".as_bytes()).unwrap(); 
    let mut s = String::new(); 
    d.read_to_string(&mut s).unwrap(); 
    println!("{}", s); 
} 

のgzip csvファイルをストリーミングする方法:crates.ioの検索

は、私は解凍のための次のコード例を持っているflate2を見つけましたか?

答えて

0

ストリーム操作の場合、錆はReadWriteの特性を持ちます。行ごとに入力を繰り返し処理するには、普通BufReadの特性が必要です。Readの実装をBufReader::newにラップするといつでも得ることができます。

flate2は既にこれらの特性で動作します。 GzDecoderReadを実装し、GzDecoder::newReadを実装するものをとります。標準入力をデコード

例(もちろんplaygroundにうまく動作しません):

extern crate flate2; 

use std::io; 
use std::io::prelude::*; 
use flate2::read::GzDecoder; 

fn main() { 
    let stdin = io::stdin(); 
    let stdin = stdin.lock(); // or just open any normal file 

    let d = GzDecoder::new(stdin).expect("couldn't decode gzip stream"); 

    for line in io::BufReader::new(d).lines() { 
     println!("{}", line.unwrap()); 
    } 
} 

次に、あなたの通常の(「GZIPなし」)のロジックを使用して行をデコードすることができます。おそらく入力を取って汎用的にしてください。BufReadを実装してください。

関連する問題