web-dev-qa-db-ja.com

Rustでテキストファイルを読み書きするにはどうすればよいですか?

:この質問はpre Rust 1.0であるため、古くなっています。 リンクされた複製 =最新の回答の場合。

Win8でRust 0.8を使用してテストプログラムを作成しています。プログラムで使用されるいくつかのパラメータを、配列/ベクトル/リストを使用してテキストファイルとの間で読み書きする必要があります。個々の行。

うまくいくものを見つけるためにかなりの時間を費やした後、私が見つけることができる最も近いものは次のとおりです:

use std::rt::io::{file, Open};
use std::path::Path;
use std::rt::io::file::FileInfo;

fn main () {

    let mut reader : file::FileReader = Path("xxxx.txt").open_reader(Open)  
    .expect("'xxxx.txt' could not be opened");

    println("Completed");   
}

上記は、ファイルが存在する場合に「機能」します。

誰かが私が要件として述べたことを行う方法の例を教えてもらえますか?

15
Brian Oh

:この回答はpre Rust 1.0であるため、古くなっています。 リンクされた複製 を参照してください。 =最新の回答の場合。

はい、0.8は古すぎます。0.10のマスターブランチには使用します。

use std::io::BufferedReader;
use std::io::File;
use std::from_str::from_str;

let fname = "in.txt";
let path = Path::new(fname);
let mut file = BufferedReader::new(File::open(&path));

for line_iter in file.lines() {
    let line : ~str = match line_iter { Ok(x) => x, Err(e) => fail!(e) };
    // preprocess line for further processing, say split int chunks separated by spaces
    let chunks: ~[&str] = line.split_terminator(|c: char| c.is_whitespace()).collect();
    // then parse chunks
    let terms: ~[int] = vec::from_fn(nterms, |i: uint| parse_str::<int>(chunks[i+1]));
    ...
}

どこ

fn parse_str<T: std::from_str::FromStr>(s: &str) -> T {
    let val = match from_str::<T>(s) {
        Some(x) => x,
        None    => fail!("string to number parse error")
    };
    val
}

テキストファイルへの書き込み:

use std::io::{File, Open, Read, Write, ReadWrite};

let fname = "out.txt"
let p = Path::new(fname);

let mut f = match File::open_mode(&p, Open, Write) {
    Ok(f) => f,
    Err(e) => fail!("file error: {}", e),
};

その後、あなたはのいずれかを使用することができます

f.write_line("to be written to text file");
f.write_uint(5);
f.write_int(-1);

ファイル記述子はスコープの終了時に自動的に閉じられるため、f.close()メソッドはありません。これがお役に立てば幸いです。

6