#read-line #cli-input #text-input #stdin #file-io #file-input #iterator

linedance

从文件或 stdin(类似于 Python 的 fileinput)流式传输行的迭代器

2 个不稳定版本

0.2.0 2024 年 7 月 7 日
0.1.0 2024 年 7 月 7 日

#5#cli-input

每月 下载 28

MIT 许可证

8KB
82

linedance

从 stdin 或 CLI 提供的文件名读取行。

此功能类似于 Python 中的 fileinput 模块。

用法

example 目录中有一个示例文件,展示了如何在您的项目中使用它。这是示例代码

// examples/simple_usage.rs
use linedance::input;

fn main() -> std::io::Result<()> {
    for line in input()? {
        println!("{}", line?);
    }

    Ok(())
}

首先构建这个示例,以便我们可以直接运行它。(使用 cargo run 测试 stdin 和 CLI 参数会变得很繁琐。)

cargo build --example simple_usage

二进制文件 simple_usage 位于 target/debug/examples 目录中。在 example 目录中还有一个文本文件,您可以使用它来测试程序,文件名为 data.txt

首先,我们将展示如何使用 stdin 作为输入源

echo examples/data.txt | ./target/debug/examples/simple_usage
This is the first message
This is a test message
This is the last message

现在,我们将展示如何使用文件作为输入源

./target/debug/examples/simple_usage --files example/data.txt

输出将与上一个示例相同。

当与 --files 标志一起使用时,程序将读取 CLI 提供的所有文件的行。这允许它与 shell 通配符一起使用。

$ ./target/debug/examples/simple_usage --files examples/*.txt
This is the first message
This is a test message
This is the last message
The first of more messages
The middle of the messages
The last of the more messages

如何与 Clap 一起使用

linedance 设计为不使用任何特殊库进行参数解析,因为它是一个简单的工具。但是,如果您想将其与更复杂的 CLI 应用程序一起使用,则可以使用 clap

要使用它,或者任何类似的库,基本思想是只是忽略代码中的 --files CLI 参数。将其留给 linedance 处理。以下是如何做到这一点的示例

  1. 首先,将 linedanceclap 都添加到您的 Cargo.toml

    [dependencies]
    linedance = "0.1.0"
    clap = { version = "4.5", features = ["derive"] }
    
  2. 在您的 main.rs 中,使用 clap 定义您的 CLI 结构,但将文件处理留给 linedance

    use clap::Parser;
    use linedance::input;
    
    #[derive(Parser)]
    #[command(name = "myapp")]
    #[command(about = "An example application using linedance and clap")]
    struct Cli {
        #[arg(long, help = "Enable verbose mode")]
        verbose: bool,
    
        #[arg(last = true, help = "Input files")]
        files: Vec<String>,
    }
    
    fn main() -> std::io::Result<()> {
        let cli = Cli::parse();
    
        if cli.verbose {
            println!("Verbose mode enabled");
        }
    
        for line in input()? {
            println!("{}", line?);
        }
    
        Ok(())
    }
    
  3. 运行应用程序时,使用 linedance 提供的 --files 标志指定输入文件

    $ ./myapp --verbose --files file1.txt file2.txt
    

    或使用 stdin

    $ echo "some input" | ./myapp --verbose
    

无运行时依赖项