Note

Rustでコマンドライン引数を受け取る

概要

この記事の続きで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`60004000F: Some(1.8)ISO: Some(320)Some(Ratio { numer: 1, denom: 200 }) 前回記事と同じ出力ができた。一気にいろいろなことをすると全然コンパイルが通らず厳しいのでひとつずつ順番にやっていくのが良さそうだ。