Как я могу читать и писать текстовые файлы в Rust?
Я пишу тестовую программу, использующую Rust 0.8 на Win8, и мне нужно прочитать и записать некоторые параметры, используемые программой, в / из текстового файла, используя массив / вектор / список для доступа к отдельным строкам.
Потратив значительное время, пытаясь найти что-то, что работает, самое близкое, что я смог найти, это следующее:
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");
}
Выше "работает", если файл существует.
Может кто-нибудь показать мне пример того, как сделать то, что я указал в качестве требования?
1 ответ
Да, 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};
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() отсутствует. Надеюсь, это поможет.