Rust : 读含有中文字符的CSV文件解决方案
来源:互联网 发布:霹雳抢购软件 编辑:程序博客网 时间:2024/05/25 21:35
本文感谢42的帮助。
Rust有一个库CSV,可以用来处理相关的CSV文件。
相关资料见:http://burntsushi.net/rustdoc/csv/
比如有个CSV文件,其结构是(有表头的):
以下读出CSV,可以有两种组织方式:
一、可以解析成tuple.
extern crate stopwatch;extern crate csv;fn main() { let mut rdr = csv::Reader::from_file("C:\\IC1505.csv").unwrap().has_headers(false);//不要求是读出第一行段首,否则选择true. for record in rdr.decode() { let (s1, s2, dist): (String, String, String) = record.unwrap(); println!("{}=> {}, {}, {}", num, s1, s2, dist); } thread::sleep_ms(500000);}
二、也可以解析成struct,非常方便,赞!
extern crate stopwatch;extern crate csv;extern crate rustc_serialize;use stopwatch::Stopwatch;use std::thread;#[derive(RustcDecodable, RustcEncodable)]struct bar { market: String, code: String, date: String, open: String,//=>f64? high: String,//=>f64? low: String,//=>f64? volume: String,//=>f64? openInterests: String,//=>f64?}fn main() { let mut rdr = csv::Reader::from_file("C:\\IC1505.csv").unwrap().has_headers(false); for record in rdr.decode() { let temp: bar = record.unwrap(); println!("{}=> {}, {}, {},{},{}", num, temp.market, temp.code, temp.date, temp.open, temp.high); } thread::sleep_ms(500000);}
三、关于struct的优化
如何把bar的结构精准地描述(f64,String…..)?
我们发现:
如果去掉表头,形成以下模式,则可以把bar结构中字段进行精确解析。
extern crate stopwatch;extern crate csv;extern crate rustc_serialize;use stopwatch::Stopwatch;use std::thread;use std::io;use std::time::{Duration, Instant};#[derive(RustcDecodable, RustcEncodable)]struct bar { market: String, code: String, date: String, open: f64, high: f64, low: f64, close: f64, volume: f64, openInterests: f64,}fn main() { let mut rdr = csv::Reader::from_file("C:\\IC1505.csv").unwrap().has_headers(false); let mut data: Vec<bar> = Vec::new(); for record in rdr.decode() { let mut temp: bar = record.unwrap(); println!("len: =>{:?},{},{},{},{}", data.len(), temp.market, temp.code, temp.date, temp.close); data.push(temp); } thread::sleep_ms(500000);}
四、csv库如何读出汉字?
比如:
extern crate csv;extern crate rustc_serialize;extern crate encoding;use std::io;use std::io::prelude::*;use std::fs::File;use encoding::{Encoding, DecoderTrap};use encoding::all::GB18030;//可以转成汉字的字库fn main() { let path = "C:\\Users\\Desktop\\test.csv"; let mut f = File::open(path).ok().expect("cannot open file"); let mut reader: Vec<u8> = Vec::new(); f.read_to_end(&mut reader).ok().expect("can not read file"); let mut chars = String::new(); GB18030.decode_to(&mut reader, DecoderTrap::Ignore, &mut chars); let mut rdr = csv::Reader::from_string(chars).has_headers(true); for row in rdr.decode() { let (x, y, r): (String, String, String) = row.unwrap(); println!("({}, {}): {:?}", x, y, r); }}
0 0
- Rust : 读含有中文字符的CSV文件解决方案
- C#导出csv文件 防止中文乱码的解决方案
- C#导出csv文件 防止中文乱码的解决方案
- C#导出csv文件 防止中文乱码的解决方案
- Julia: readcsv 如何处理带中文字符的CSV文件
- 使用pycharm打开csv文件,csv文件中的中文出现乱码的解决方案
- MySQL导入含有中文字段(内容)CSV文件乱码解决方法
- MySQL导入含有中文字段(内容)CSV文件
- Rust : 红楼梦一书中文字符的统计
- Kepserver4不能导入CSV中文的解决方案
- All About JAVA 关于英文服务器下输出含有中文字符文件乱码的问题
- 关于Android编程文件路径中含有中文字符的问题解决办法
- 【java】:对属性文件的读写操作,中文字符解决方案
- PHP读取csv文件时字符前中文丢失的问题!
- linux 删除含有特殊字符的文件
- Rust: 从csv文件转成kbar的尝试:速度,还有Julia和激情
- SpringMVC导出CSV文件中文出现乱码解决方案
- 关于fgetcsv ,二进制csv文件得不得到中文字符
- python读取excel文件
- Python-命名空间
- HDFS Maintenance State
- 玩转树莓派之经验积累
- 计算球的体积
- Rust : 读含有中文字符的CSV文件解决方案
- 15 个 Android 通用流行框架大全
- c# response.write()输出之后怎么换行
- 4. NVIC中断向量配置—基于CT117E开发板的STM32库函数编程
- ndroid数据库框架——GreenDao轻量级的对象关系映射框架,永久告别sqlite
- SQLyog 导入数据库
- AIC, BIC v.s. Crossvalidation
- 使用Oracle的logminer工具进行日志挖掘
- MySQL 日期类型 TIMESTAMP 和 DATETIME 的区别