2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rust1.3でCSV読み込み

Last updated at Posted at 2015-10-01

注目の新言語Rustは半年くらい前まで仕様変更が激しすぎて学び甲斐がなかったが、最近は少しずつ仕様が安定してきているような印象。

Rust1.3でCSVを読み込む例。CSVライブラリはhttps://github.com/BurntSushi/rust-csvを使う。

read_csv.rs
extern crate csv;
extern crate rustc_serialize;

#[derive(RustcDecodable,Debug)]
struct MyRecord {
	id: i32,
	x: f32,
	y: f32,
}

fn main() {
	let mut rdr = csv::Reader::from_file("/path/to/file.csv").unwrap().has_headers(true);
	let mut rows: Vec<MyRecord> = Vec::new();
	for record in rdr.decode() {
		if let Ok(r) = record {
  			rows.push(r);
		}
	}
	println!("{:?}", rows);
}
  • csv::Reader::from_fileResult型を返す。Result型はOkErrorのenum。
  • unwrapResultからOkを取り出す。
    • Errorに対してunwrapするとエラー(パニック=スレッド停止)を起こす。
  • if letはパターンマッチに成功した時にブロック内の式を実行する。
  • この例では、CSVの各行はMyRecord型に自動で変換される。
    • decode()は、rustc_serialize::Decodableトレイトを実装した型をResultで包んで返す。
    • この例では、型推論によりMyRecordResultに包まれた値を返す。
    • MyRecord#[derive(RustcDecodable)]の指令によりDecodableを自動で実装
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?