#read-line #io #scanf #scan #io-read

text_io

really simple to use panicking input functions

17 releases

0.1.13 Mar 11, 2025
0.1.12 Jul 29, 2022
0.1.10 Feb 17, 2022
0.1.9 Jul 29, 2021
0.1.0 May 12, 2015

#99 in Text processing

Download history 2903/week @ 2024-12-21 2317/week @ 2024-12-28 4731/week @ 2025-01-04 7020/week @ 2025-01-11 5588/week @ 2025-01-18 5214/week @ 2025-01-25 6852/week @ 2025-02-01 7149/week @ 2025-02-08 5570/week @ 2025-02-15 6646/week @ 2025-02-22 5724/week @ 2025-03-01 6496/week @ 2025-03-08 8334/week @ 2025-03-15 7642/week @ 2025-03-22 5212/week @ 2025-03-29 4390/week @ 2025-04-05

26,587 downloads per month
Used in 200 crates (110 directly)

MIT/Apache

13KB
191 lines

Build Status Latest Version

You can use either the read! macro to read a single value and return it, or the scan! macro to read one or more values into variables. Both macros can also read from a file or from memory. The read! macro can take any type that implements Iterator<Item=u8> as an optional third argument, and the scan! macro's arguments can be prefixed with iter => where iter implements Iterator<Item=u8>.

Examples

scan! macro

use text_io::scan;

// reading from a string source
let i: i32;
scan!("<b>12</b>".bytes() => "<b>{}</b>", i);
assert_eq!(i, 12);

// reading multiple values from stdio
let a: i32;
let b: &mut u8 = &mut 5;
scan!("{}, {}", a, *b);

read! macro

use text_io::read;

// read until a whitespace and try to convert what was read into an i32
let i: i32 = read!();

// read until a whitespace (but not including it)
let word: String = read!(); // same as read!("{}")

// read until a newline (but not including it)
let line: String = read!("{}\n");

// expect the input "<b><i>" or panic
// read until the next "<" and return that.
// expect the input "/i></b>"
let stuff: String = read!("<b><i>{}</i></b>");

// reading from files
use std::io::Read;
let mut file = std::fs::File::open("tests/answer.txt").unwrap().bytes().map(|ch| ch.unwrap());
let val: i32 = read!("The answer is {}!!!11einself\n", file);

// reading from strings
let val: i32 = read!("Number: {}", "Number: 99".bytes());

No runtime deps