概要
この記事の続きでRustでコマンドラインから文字列を受け取る処理を書いてみます。
手順
std::env
を使うとコマンドライン引数を取ることができる
use std::env;
fn main() {
let args: Vec<String> = env::args().collect();
println!("{:?}", args);
}
// 出力
$ cargo run /Users/ryo/Downloads/Photos/DSC04117.jpg
Compiling exif v0.1.0 (/Users/ryo/work/ryo/study_rust/exif)
Finished dev [unoptimized + debuginfo] target(s) in 0.89s
Running `target/debug/exif /Users/ryo/Downloads/Photos/DSC04117.jpg`
["target/debug/exif", "/Users/ryo/Downloads/Photos/DSC04117.jpg"]
1つ目は呼び出したプログラムの名前が入っているみたい。なんか撮れてる感じがします。
これを↑に書いた記事のコードに組み合わせる
use std::env; use rexiv2;
fn main() {
let args: Vec<String> = env::args().collect();
let file_path = &args[1];
let meta = rexiv2::Metadata::new_from_path(&file_path).unwrap();
println!("{:?}", meta.get_pixel_width());
println!("{:?}", meta.get_pixel_height());
println!("F: {:?}", meta.get_fnumber());
println!("ISO: {:?}", meta.get_iso_speed());
println!("{:?}", meta.get_exposure_time());
}
// 出力
$ cargo run /Users/ryo/Downloads/Photos/DSC04117.jpg
Compiling exif v0.1.0 (/Users/ryo/work/ryo/study_rust/exif)
Finished dev [unoptimized + debuginfo] target(s) in 0.93s
Running `target/debug/exif /Users/ryo/Downloads/Photos/DSC04117.jpg`
6000
4000
F: Some(1.8)
ISO: Some(320)
Some(Ratio { numer: 1, denom: 200 })
前回記事と同じ出力ができた。一気にいろいろなことをすると全然コンパイルが通らず厳しいのでひとつずつ順番にやっていくのが良さそうだ。