如何用textmatlab csvread函数数读取csv格式文件中的数据,并且只读取特定列的数据

查看: 9781|回复: 3|关注: 0
csv文件,某列全为字符,应如何读取
<h1 style="color:# 麦片财富积分
新手, 积分 10, 距离下一级还需 40 积分
在网上查了好多,没找到有效的方法,问题如下:
数据源文件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
但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,内容为:
price = [13;13;13];
volume = [10;5;5];
即结果正确,刚好为想要的,但是这种方法需要每次把csv文件转换为txt文件,文件较多时不可行
至于csvread,dlmread也试过,不行;
data = importdata('test.csv');虽然可以,但需要对data再次拆分,也不太好;
此外,打开了textread.m,里面有个dataread函数,该函数貌似无法看到源文件,若可以,修改下或许能实现
以上是我尝试的几种方法,希望高手给些引导,谢谢先~~
[ 本帖最后由 waterhill 于
17:42 编辑 ]
<h1 style="color:# 麦片财富积分
关注者: 6
此类问题有两种解决方法:
1.使用txtscan函数
2.使用数据库接口
第一种方法,示例代码如下:
%本文件用于含表头的csv文件读取,数据返回格式为cell类型和int32数据类型
%打开csv文件
fid = fopen('.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文件一样的文件数据库来处理,采用数据库的接口来对该文件进行操作,具体连接符可以参考下面的网站
希望对csv文件读取有需求的matlaber有帮助,有问题可以通过邮件联系
<h1 style="color:# 麦片财富积分
非常感谢Godman,
按照方法1,问题已解决;有时间时再学习方法2
赠送麦片1片以示谢意~~
[ 本帖最后由 waterhill 于
10:21 编辑 ]
<h1 style="color:# 麦片财富积分
此类问题有两种解决方法:
1.使用txtscan函数
2.使用数据库接口
%d32是什么意思呢 我title读出来了 但是data读不出来 都是空数组
站长推荐 /2
MATLAB中文论坛是全球最大的 MATLAB & Simulink 中文社区。用户免费注册会员后,即可下载代码,讨论问题,请教资深用户及结识书籍作者。立即注册加入我们吧!
MATLAB官方社交平台
MATLAB中文论坛微社区MATLAB使用textscan读取大数据文件
MATLAB使用textscan读取大数据文件
MATLAB中有很多读取数据的函数,如textread、textscan、csvread、dlmread等,还有C语言范式的fread、fscanf等,如果数据文件很大,用textscan读取时很方便快捷的。
比如下图的POS数据文件,包含文件头和格式化的数据,数据量一般很大。使用textread也可以读取,设置headlines参数,可以很方便的跳过文件头,获取格式化数据,缺点是损失了文件头、速度较慢。使用textscan最适合读取此类数据。
% 第一步:打开数据文件,获得句柄fid
fopen('0913.pos',
% 第二步:读取文件头,'%s'格式化读取字符串,'\n'为分隔符,前21行
textscan(fid, '%s', 21,
'delimiter',
% 第三步:读取数据
textscan(fid, '%f%f%f%f%f%f%f');
是常见的POS文件数据,前21行是文件头,后面是格式化数据
是读取的文件头
是读取的数据
从图2和图3可以看到,textscan获取的是cell数据,而不是数组,因此访问方式与数组不一样。
data{1,1}得到的是一个数组
data{1,1}(1, 1)得到的是第一个数据
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。小木虫 --- 600万学术达人喜爱的学术科研平台
热门搜索:
&&怎样从一个文件中读取特定的数据存入到数组或者文件中
怎样从一个文件中读取特定的数据存入到数组或者文件中
如图所示的数据文件,我想用fortran把X Y Z对应下面的数据存入到一个数组中或者写入到一个文件中,要求只存X Y Z的数据(坐标),其他的不要,请问该怎么操作?多谢指导
1233338.png
嗯,好的,多谢了,我搞定了,
学术必备与600万学术达人在线互动!
扫描下载送金币textread&读取文本文件数据
基本语法是:
[A,B,C,…] = textread(filename,format)
[A,B,C,…] =
textread(filename,format,N)
其中filename就是文件名, format就是要读取的格式,A,B,C就是从文件中读取到的数据。
必须严格遵守用法不可出现data=textread(filename,format,N)的形式
其中括号里面变量的个数必须和format中定义的个数相同。 如果每N行相同格式的数据,可采用[A,B,C,…] =
textread(filename,format,N)的语法,读取N次。
_______________________________________________________________________________________
注:textread不用先fopen那个文件,适用于格式统一的txt文件的一次性大批量读取。textread读取某个文件后,下次再用textread读取这个文件时,还是会从文件头开始读取。
________________________________________________________________________________________
.....................................................................................
例1:无分隔符
mytest.txt
&&[data1,data2,data3,data4]=textread('mytest.txt','%n%n%n%n');
&&data=[data1 data2 data3
或者,[data1,data2,data3,data4]=textread(filename,'%n%n%n%n',3);%注意3为读取次数,应该是行数
....................................................................................
例2:有分隔符(逗号,分号...)
myfile.txt 中的内容如下:
1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12
[data1,data2,data3,data4]=textread('myfile.txt','%n%n%n%n','delimiter',
&& data=[data1 data2 data3 data4]
这里delimiter是指 指出分隔符,读数据的时候会自动跳过分隔符。
至此应该知道Iris.txt怎么读入了吧。
[data1,data2,data3,data4,data5]=textread('Iris.txt','%f%f%f%f%s','delimiter',',');
需要注意的是,参数位置要和textread函数用法对应
[A,B,C,…] =
textread(filename,format,N)也就是filename,format,N三个参数必须在其他参数前面,所以150才会出现在format后
例如:[data1,data2,data3,data4,data5]=textread('Iris.txt','%f%f%f%f%s',150,'delimiter',',');
..............................................................................
例3:有分隔符及首行注释
myfiles.txt 中的内容如下:
% this a comment
1, 2, 3, 4
5, 6, 7, 8
9, 10, 11, 12
[data1,data2,data3,data4]=textread('myfiles.txt','%n%n%n%n','delimiter',
',','headerlines', 1);
&& data=[data1 data2 data3
textread中的headerlines指明了跳过几行,1可自由设定
这里headerlines告诉textread跳过一开始的1行,1可以替换为任意你要跳过的行数。
..............................................................................
例4:针对txt文件不同格式数据的读取
myfile.txt 中的内容如下:
Sally Level1 12.34 45 Yes
[names, types, x, y, answer] = textread('myfileli4.txt' , '%s %s %f
%d %s', 1);
对应格式[A,B,C,…] = textread(filename,format,N)
_________________________________________________________________________________
例4.1: 如果要忽略12.34这个浮点数。
[names, types, y, answer] =
textread('myfileli4.txt' , '%s %s %*f %d %s', 1)
%*f 告诉textread跳过一个浮点数。
对于iris.txt如果只想读取数据可用[data1,data2,data3,data4]=textread('Iris.txt','%f
%f %f %f %*s',150,'delimiter',',');
____________________________________________________________________________________________
例:4.2 如果要忽略Level,指读取后面的数字,
&& [names, levelnum, x, y,
answer] = textread('myfileli4.txt','%s Level%d %f %d %s', 1)
levelnum =
________________________________________________________________________________________________
..............................................................OK
...............................................
例5: txt中存在空位
myfileli5.txt 中的内容如下
1,2,3,4,,6
7,8,9,,11,12
想用nan替代为空的部分
&&[data1 data2 data3 data4 data5
data6] = textread('myfileli5.txt','%f%f%f%f%f%f', 'delimiter', ',',
'emptyvalue', NaN)
&& data=[data1 data2 data3 data4
data5 data6];
....................................................................................................................
例6: 跳列
myfileli6.txt 中的内容如下
Sally Type1 12.34 45 Yes
Joe Type2 23.54 60 No
Bill Type1 34.90 12 No
如果只想读第一列,其余的跳过
[names]=textread('myfileli6.txt','%s%*[^\n]');
%[^\n] 就是一直读到行尾。
rest]=textread('myfileli6.txt','%s%[^\n]')
'Type1 12.34 45 Yes'
'Type2 23.54 60 No'
'Type1 34.90 12 No'
%*[^\n] 就是从当前直接跳到行尾。
% *是一个跳过符号,表示跳过该位
....................................................................................
例7:读入规律格式的数据
myfileli7.txt 中的内容如下
Ldischarge
L;00:00;2801
L;00:00;2619
[location year month day hour minute
discharge]=textread('myfileli7.txt','%s%f-%f-%f%f:%f%f','headerlines',1,'delimiter',';');
&& [location year month day hour
discharge]=textread('myfileli7.txt','%s%f-%f-%f%f:%f%f','headerlines',1,'delimiter',';')
location =
discharge =
已投稿到:
以上网友发言只代表其个人观点,不代表新浪网的观点或立场。

我要回帖

更多关于 mtlab csvwrite函数 的文章

 

随机推荐