matlab:csv文件含有一列字符串,读取方法探讨?

waterhill 2011-03-06 05:45:42
在网上查了好多,没找到有效的方法,问题如下:

数据源文件test.csv内容为:
方向,价格,买卖手数
B, 13, 10
B, 13, 5
S, 13, 5

我尝试了两种读入方法:
1)用textread对csv文件读取
[BorS,price,volume] = textread('test.csv','%s %d %d','headerlines',1);
结果:
BorS为3*1的cell
'B,13,10'
'B,13,5'
'S,13,5'
但price,volume均为3*1的0

2)用textread对text文件读取
先将test.csv文件打开并另存为test.txt文件,然后再读取
[BorS,price,volume] = textread('test.txt','%s %d%d','headerlines',1);

结果:
BorS为3*1的cell,内容为:
'B‘
'B'
'S'

price = [13;13;13];
volume = [10;5;5];
即结果正确,刚好为想要的,但是这种方法需要每次把csv文件转换为txt文件,文件较多时不可行

至于csvread,dlmread也试过,不行;
data = importdata('test.csv');虽然可以,但需要对data再次拆分,也不太好;
此外,打开了textread.m,里面有个dataread函数,该函数貌似无法看到源文件,若可以,修改下或许能实现。

以上是我尝试的几种方法,希望高手给些引导,谢谢先~~
...全文
8186 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
不知道楼主的问题解决了没?我也在读取csv的数据,能不能请教一些问题呢?我的qq号276671518
「已注销」 2012-02-01
  • 打赏
  • 举报
回复
非常不错的解决方法。
waterhill 2011-03-07
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 domonate 的回复:]
你可以试试fopen,这个函数真了不起,将文件转换成二进制进行读取,基本的文件格式都支持!你可以看看!
[/Quote]
嗯,是通过用fopen和textscan解决的。
在http://www.ilovematlab.cn/viewthread.php?tid=115241&page=1&extra=page%3D1上,
Godman已经给出了答案,在此把答案引述过来如下:
此类问题有两种解决方法:
1.使用txtscan函数
2.使用数据库接口


第一种方法,示例代码如下:
%本文件用于含表头的csv文件读取,数据返回格式为cell类型和int32数据类型
clear;close all;
%打开csv文件
fid = fopen('20101231.csv');
%读取表头 数据返回为cell类型 调用格式title{1}
title = textscan(fid, '%s %s %s %s %s %s %s %s %s %s',1,'delimiter', ',')
%读取数据 返回为cell类型
data = textscan(fid, '%s %d32 %d32 %d32 %d32 %d32 %d32 %d32 %d32 %d32','delimiter', ',')
fclose(fid);

csv数据格式如下:
TIME CH0 CH1 CH2 CH3 CH4 CH5 CH6 CH7 CH8
09:45:13:310 17 2 2 18 19 20 21 5655 24
09:45:13:401 17 2 2 18 19 20 21 5655 24

第二种方法则是把csv文件当做和access文件一样的文件数据库来处理,采用数据库的接口来对该文件进行操作,具体连接符可以参考下面的网站

http://www.connectionstrings.com/textfile

希望对csv文件读取有需求的matlaber有帮助,有问题可以通过邮件联系tntuyh@163.com

再次感谢Godman~
oangeli 2021-07-20
  • 举报
回复
@waterhill 读取数据出来是空的
domonate 2011-03-06
  • 打赏
  • 举报
回复
你可以试试fopen,这个函数真了不起,将文件转换成二进制进行读取,基本的文件格式都支持!你可以看看!
叶子 2011-03-06
  • 打赏
  • 举报
回复
csv文件转换为txt文件,文件较多时不可行

文件多时 貌似有批量转换工具。

3,424

社区成员

发帖
与我相关
我的任务
社区描述
其他开发语言 其他开发语言
社区管理员
  • 其他开发语言社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧