2013-11-08 3 views
10

Я пишу тестовую программу с использованием Rust 0.8 на Win8, и мне нужно прочитать и написать некоторые параметры, используемые программой в/из текстового файла, используя массив/вектор/список для доступа к отдельным строкам.Как читать и писать текстовый файл в Rust?

Потратив немало времени, пытаясь найти то, что работает, ближе всего, что я мог бы найти следующим образом:

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"); 
} 

выше «работает», если файл существует.

Может кто-нибудь, пожалуйста, покажет мне пример того, как сделать то, что я изложил в качестве требования?

+2

0.8 такой старый в мире «ржавчины», теперь вам нужно «let filereader = File :: open (p)» – Cynede

+0

Начиная с версии 1.7, см. Примеры для BufReader в справочных документах: http: //doc.rust -lang.org/std/io/struct.BufReader.html#examples – steamer25

ответ

5

Да, 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(). Надеюсь, это поможет.

+0

где вы вытащили 'nterms' из? что это? –

+1

Можете ли вы обновить его для Rust 1.0? – Kornel

Смежные вопросы