我在使用Matlab从数据库中读取数据时遇到了一些问题。我用来下载数据的url链接给出了一个分号分隔的文本文件,我需要Matlab来识别这些数据,并以struct
格式相应地安排它(例如,因为数据有不同的类)。
我已经使用urlread
并且可以成功下载数据,唯一的问题是我将所有数据作为一个单元格中的字符串获取,我需要将这些数据作为表格并且组织良好。
基本上我想知道是否有可能将数据从url加载到Matlab中的方式与R中的read.csv
函数相同,只需将url放在文件名所在的位置并定义如何数据是分隔的和中提的,您可以使用data.frame
将所有数据完美地组织起来。
我想有很多方法可以在使用urlread
后解释字符串并将其转换为有组织的struct
变量,但必须有一种方法可以直接从URL中读取它,就像R一样
答案 0 :(得分:4)
以下是一段代码,用于读取网络上的csv
数据(urlread
),使用textscan
扫描并将数据格式化为单元格(允许使用字符串和标量) ,然后将单元格转换为cell2struct
的结构。创建的结构保留textscan
格式。
请注意,您必须定义textscan
格式和cell2struct
输入以适合您的数据。
block = urlread('http://hci.stanford.edu/jheer/workshop/data/florida2000/Florida2000.csv');
C = textscan(block,'%s%s%f%s%f','HeaderLines',1,'EndOfLine','\n');
S = cell2struct(C,{'county','technology','columns','category','ballots'},2)
这是佛罗里达州2000年总统选举结果(.csv
,938个数据点)
county,technology,columns,category,ballots
Alachua,Optical,1,under,217
Alachua,Optical,1,over,105
Alachua,Optical,1,Bush,34124
Alachua,Optical,1,Gore,47365
Alachua,Optical,1,Browne,658
Alachua,Optical,1,Nader,3226
Alachua,Optical,1,Harris,6
...
将产生
S =
county: {938x1 cell} %string
technology: {938x1 cell} %string
columns: [938x1 double] %double
category: {938x1 cell} %string
ballots: [938x1 double] %double
修改强>
对于双引号文字,您可以使用%q
代替%s
来调用textscan
(FormatSpec options),就像那样
C = textscan(fileID,'%q%f');
答案 1 :(得分:0)
查看名为dlmread
的函数。这将允许您输入一串数据,告诉它分隔符是什么,它应该抽出你需要的东西。
results = dlmread('http://someurl.com/somefile.txt',';')