Rust数据库操作库dbase的使用:高效处理DBF文件的读写与解析
Rust数据库操作库dbase的使用:高效处理DBF文件的读写与解析
dbase-rs 是一个 Rust 库,用于读写 .dbf (dBase / FoxPro) 文件。它支持读取和写入大多数 dBase III 和 FoxPro 类型,目前不支持 Memo 类型的写入(将在后续版本中添加)。
安装
在项目目录中运行以下 Cargo 命令:
cargo add dbase
或在 Cargo.toml 中添加:
dbase = "0.6.0"
示例代码
读取 DBF 文件
use dbase::{FieldValue, Record, TableReader};
fn main() -> Result<(), dbase::Error> {
// 打开 DBF 文件
let table = TableReader::open("example.dbf")?;
// 打印表头信息
println!("表字段:");
for field in table.fields() {
println!("- {}: {:?}", field.name(), field.field_type());
}
// 读取所有记录
println!("\n记录内容:");
for record_result in table {
let record: Record = record_result?;
for (field_name, value) in record {
println!("{}: {:?}", field_name, value);
}
println!("---");
}
Ok(())
}
写入 DBF 文件
use dbase::{FieldType, FieldWriter, RecordWriter, TableWriter};
fn main() -> Result<(), dbase::Error> {
// 创建字段定义
let fields = vec![
FieldWriter::new("ID", FieldType::Numeric(10, 0)),
FieldWriter::new("NAME", FieldType::Character(50)),
FieldWriter::new("ACTIVE", FieldType::Logical),
FieldWriter::new("DATE", FieldType::Date),
];
// 创建表写入器
let mut writer = TableWriter::create("output.dbf", fields)?;
// 写入记录
writer.write_record(vec![
FieldValue::Numeric(1.0),
FieldValue::Character("John Doe".to_string()),
FieldValue::Logical(true),
FieldValue::Date(chrono::NaiveDate::from_ymd_opt(2023, 1, 1).unwrap()),
])?;
writer.write_record(vec![
FieldValue::Numeric(2.0),
FieldValue::Character("Jane Smith".to_string()),
FieldValue::Logical(false),
FieldValue::Date(chrono::NaiveDate::from_ymd_opt(2023, 2, 15).unwrap()),
])?;
Ok(())
}
完整示例代码
以下是一个完整的 DBF 文件读写示例:
use dbase::{FieldType, FieldValue, FieldWriter, Record, RecordWriter, TableReader, TableWriter};
use chrono::NaiveDate;
fn main() -> Result<(), dbase::Error> {
// ========== 写入 DBF 文件 ==========
// 创建字段定义
let fields = vec![
FieldWriter::new("ID", FieldType::Numeric(10, 0)),
FieldWriter::new("NAME", FieldType::Character(50)),
FieldWriter::new("ACTIVE", FieldType::Logical),
FieldWriter::new("BIRTHDAY", FieldType::Date),
FieldWriter::new("SCORE", FieldType::Float),
];
// 创建表写入器
let mut writer = TableWriter::create("persons.dbf", fields)?;
// 写入多条记录
writer.write_record(vec![
FieldValue::Numeric(1.0),
FieldValue::Character("张三".to_string()),
FieldValue::Logical(true),
FieldValue::Date(NaiveDate::from_ymd_opt(1990, 5, 10).unwrap()),
FieldValue::Float(85.5),
])?;
writer.write_record(vec![
FieldValue::Numeric(2.0),
FieldValue::Character("李四".to_string()),
FieldValue::Logical(false),
FieldValue::Date(NaiveDate::from_ymd_opt(1985, 8, 20).unwrap()),
FieldValue::Float(92.0),
])?;
// ========== 读取 DBF 文件 ==========
println!("\n读取 persons.dbf 文件内容:");
let table = TableReader::open("persons.dbf")?;
// 打印表头信息
println!("\n表结构:");
for field in table.fields() {
println!("- {}: {:?}", field.name(), field.field_type());
}
// 读取并打印所有记录
println!("\n数据记录:");
for record_result in table {
let record: Record = record_result?;
for (field_name, value) in record {
println!("{}: {:?}", field_name, value);
}
println!("---");
}
Ok(())
}
支持的数据类型
dbase-rs 支持以下数据类型:
- 字符型 (Character)
- 数值型 (Numeric)
- 逻辑型 (Logical)
- 日期型 (Date)
- 浮点型 (Float)
- 备注型 (Memo,仅读取)
- 通用型 (General)
错误处理
如果遇到任何读写问题或发现不正确行为,可以提交 issue 报告问题。
许可证
dbase-rs 使用 MIT 许可证。
1 回复