17

:この質問は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");   
}

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

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

4

1 に答える 1

8

:この回答はRust 1.0以前のものであるため、時代遅れです。最新の回答については、リンクされた複製を参照してください。

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

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};
use std::path::Path;

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() メソッドはありません。これが役立つことを願っています。

于 2014-03-18T12:02:21.963 に答える