インデントが不揃いなテキストファイルを整形したくなったので Rust コードを書いたお話。 いつかまた使えそうだけど保管するのが面倒なので、ここに放流しておく。
use std::fs::File;
use std::io::{BufReader, BufRead, BufWriter, Write};
fn main() {
// ファイル読み込み
let file = File::open("input.md").unwrap();
let mut reader = BufReader::new(file);
// 出力ファイルの確保
let file = File::create("output.md").unwrap();
let mut writer = BufWriter::new(file);
// メインループ (各行ごとに処理)
loop {
// 一行ずつ読み出す
let mut buf = String::new();
let num_bytes = reader.read_line(&mut buf).unwrap();
if num_bytes == 0 {
// EOF に到達したらループを抜ける
break;
} else {
// そうでないとき, 整形してファイルに書き出す.
let output = format_text( buf );
writer.write(output.as_bytes()).unwrap();
}
}
}
// 先頭が " " のとき 4 文字インデントに整形して返し,
// そうでなければ入力を返す関数.
fn format_text( buf: String ) -> String {
if buf.chars().next() == Some(' ') {
format!(" {}", buf.trim_start().to_string())
} else {
buf
}
}
ファイル読み出し/書き込み/文字列処理まわりで困ってる Rust 入門者の助けになることを願って… (そんな人でこの記事にたどり着く人はいるのか?)
コメント
コメントを投稿