1 个不稳定版本
0.0.1 | 2021年5月23日 |
---|
#36 in #iterate
22KB
172 行
迭代文本
迭代文本和文件的辅助函数和结构体的库
要求
此仓库需要 Rust 语言/编译器从源代码构建
截至本 ReadMe 文件的最后更新,推荐安装 Rust 的方法是使用安装脚本...
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
快速开始
此仓库是一个 Rust 库,在项目 Cargo.toml
文件中将它定义为一个依赖项...
Cargo.toml
(省略)
[dependencies]
iterate-text = "0.0.1"
有关定义依赖项的详细信息,请参阅 Rust -- 文档 -- 定义依赖项。
然后通过 src/main.rs
中的 use
语句包含在源文件中...
src/main.rs
(省略)
extern crate iterate_text;
use iterate_text::file::characters::IterateFileCharacters;
use iterate_text::file::lines::IterateFileLines;
use iterate_text::string::characters::IterateStringCharacters;
use iterate_text::string::lines::IterateStringLines;
使用方法
请查看此项目的 examples/
目录以获取详细的用法示例。
src/main.rs
#!/usr/bin/env rust
use std::env;
extern crate iterate_text;
use iterate_text::file::lines::IterateFileLines;
fn main() {
let args: Vec<String> = env::args().collect();
let path = &args[1];
let iter = IterateFileLines::new(path.into());
let mut count = 0;
for line in iter {
count += 1;
print!("{}: {}", count, line);
}
}
API
类、方法、参数和自定义类型/数据结构的文档
文件::字符::IterateFileCharacters
从路径、缓冲区或描述符读取,直到遇到文件结束符EOF
示例
use iterate_text::file::characters::IterateFileCharacters;
let p = "tests/file/characters/file.txt";
let mut c = IterateFileCharacters::new(p);
assert_eq!(c.next(), Some('T'));
assert_eq!(c.next(), Some('h'));
assert_eq!(c.next(), Some('i'));
assert_eq!(c.next(), Some('s'));
文件::行::IterateFileLines
从文件路径、缓冲区或描述符读取,直到遇到文件结束符EOF
use iterate_text::file::lines::IterateFileLines;
let p = "tests/file/lines/file.txt";
let mut l = IterateFileLines::new(p);
assert_eq!(l.next(), Some("First line\n".to_string()));
assert_eq!(l.next(), Some("Second line\n".to_string()));
assert_eq!(l.next(), Some("Third line\n".to_string()));
assert_eq!(l.next(), None);
字符串::字符::IterateStringCharacters
迭代字符串中的字符
示例
use iterate_text::string::characters::IterateStringCharacters;
let s = String::from("test!");
let mut c = IterateStringCharacters::new(s);
assert_eq!(c.next(), Some('t'));
assert_eq!(c.next(), Some('e'));
assert_eq!(c.next(), Some('s'));
assert_eq!(c.next(), Some('t'));
assert_eq!(c.next(), Some('!'));
assert_eq!(c.next(), None);
字符串::行::IterateStringLines
迭代字符串中的行并包括换行分隔符
示例
use iterate_text::string::lines::IterateStringLines;
let s = String::from("This is\na \\n test string\n");
let mut l = IterateStringLines::new(s);
assert_eq!(l.next(), Some("This is\n".to_string()));
assert_eq!(l.next(), Some("a \\n test string\n".to_string()));
assert_eq!(l.next(), None);
注意事项
当前的 characters
迭代器使用 String.char_indices()
,这可能会以意想不到的方式分割某些Unicode字符。
此仓库可能功能不完全且/或无法完全运行,欢迎提交添加功能或修复错误的Pull Requests。
贡献
为iterate-text和rust-utilities做出贡献的选项
分支
将此仓库分支到一个你有写权限的账户中,开始创建一个Fork。
- 为分支URL添加远程。URL语法是
[email protected]:<NAME>/<REPO>.git
...
mkdir -p ~/git/hub/rust-utilities
cd ~/git/hub/rust-utilities/iterate-text
git remote add fork git@github.com:<NAME>/iterate-text.git
- 确保所有测试通过
cargo test
- 按名称运行任何示例
cargo run --example file-reader -- --file .github/README.md -c 10
- 提交您的更改并将它们推送到您的分支以修复问题或添加功能...
cd ~/git/hub/rust-utilities/iterate-text
git commit -F- <<'EOF'
:bug: Fixes #42 Issue
**Edits**
- `<SCRIPT-NAME>` script, fixes some bug reported in issue
EOF
git push fork main
注意,可以使用
-u
选项将fork
设置为默认远程,例如git push -u fork main
。然而,这也会将fork
远程默认为从origin
拉取!这意味着必须显式地从origin
拉取更新,例如git pull origin main
- 然后在GitHub通过Web-UI提交Pull Request,URL语法是
https://github.com/<NAME>/<REPO>/pull/new/<BRANCH>
注意;为了降低您的Pull Request在接受前需要修改的可能性,请查阅dot-github仓库中的详细贡献指南。
赞助
感谢您考虑!
无论您是否能够从经济上支持iterate-text等rust-utilities维护的项目,请考虑与他人分享有用的项目,因为维护开源仓库的一个目标是为社区提供价值。
归属
-
Matrix --
@kaplan
提供了出色的、高效的代码,完全解决了我的Rust相关的问题 -
Matrix --
@projectmoon
拥有出色的直觉,掌握了line
以启用字符迭代 -
Matrix --
@tanriol
明确解释了为什么@kaplan
的代码如此出色,并回答了我的问题
许可证
Library of helper functions and structures for iterating over text and files
Copyright (C) 2021 S0AndS0
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU Affero General Public License as published
by the Free Software Foundation, version 3 of the License.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU Affero General Public License for more details.
You should have received a copy of the GNU Affero General Public License
along with this program. If not, see <https://www.gnu.org/licenses/>.
有关更多详细信息,请查阅AGPL-3.0许可证的完整版本。