3

我有一个的.csv 文件(~26000 行)。我希望能够将它读入matlab。另一个问题是它在其中一个字段中包含由逗号分隔的字符串集合。

我无法阅读它。我尝试了 tdfread 之类的东西,但在这里不起作用。我应该注意的 textscan 的任何技巧?

还有其他方法吗?

4

6 回答 6

2

我不确定是什么生成了您的 CSV 文件,但这是您的问题。

CSV 文件的重点在于文件本身指定了字段的分隔。如果 CSV 的文本包含逗号,那么您无能为力。任何程序如何知道单个字段中的文本何时包含逗号,或者该逗号何时是字段分隔符?

正确的 CSV 会有一个文本限定符。一些生成器/阅读器让您可以选择使用其中一个。标准文本限定符是“(引号)。但它是可变的,因为您的文本也可能包含这些。

同样,这一切都是为了生成正确的 CSV 内容。

于 2010-01-31T01:57:06.490 回答
1

xlsread 有可能不会给您期望的答案——例如,字符串是否总是出现在相同的列中?我认为(正如其他人似乎:-) 只使用它会更健壮

fid = fopen('yourfile.csv');

然后要么 textscan

t = textscan(fid, '%s', delimiter', sprintf('\n'));
t = t{1};

或者只是fgetl(帮助中的示例是完美的)。

之后,您可以进行一些逐行处理——例如,在每行的文本内容上再次使用 textscan 是一种很好、快速的方法来获得一个可以快速分析每行的单元数组。

于 2010-02-01T11:10:07.077 回答
0

您遇到问题是因为您将其作为 .csv 文件读取,并且数据中有逗号。您可以在 Excel 中获取它并操作日期,可能使用 Excel 公式提取不需要的逗号。我经常使用 .csv 文件进行数据库导入。我想 matLab 有类似的规则,那就是 - 你的数据中没有逗号。

你能告诉我们更多关于你的数据吗?是否有逗号,我们只有一列?也许您可以将其读取为制表符分隔?

于 2010-01-31T01:30:31.197 回答
0

一种简单的解决方案是:

path='C:\folder1\folder2\';
data = 'data.csv';
data = dataset('xlsfile',sprintf('%s\%s', path,data));

当然,您也可以执行以下操作:

[data,path] = uigetfile('C:\folder1\folder2\*.csv');
data = dataset('xlsfile',sprintf('%s\%s', path,data));

现在您将数据加载为数据集。例如,获取第 1 列的一种简单方法是

双(数据(1))

于 2013-03-29T15:37:17.793 回答
0

你用的是Unix系统吗?我问的原因是您可以使用命令行函数(例如sed正则表达式)在将这些数据文件传递给 Matlab 之前清理它们。这是一个链接,它解释了如何完全按照您的要求进行操作。

于 2010-02-05T22:55:08.507 回答
0

因为,正如其他人所观察到的那样,您的文件是 CSV,在您认为的单个字段中带有逗号,因此很难说服 Matlab 这实际上只是一个字段。我认为您最好的策略是一次读取一行,将其读入一个充当缓冲区的字符串,然后逐个字段地将其转换为您想要的变量或其他数据结构。由于 Matlab 具有内置的正则表达式功能,这应该不会太难。

而且,正如其他人已经建议的那样,发布您的数据样本将有助于我们为您提供帮助。

于 2010-01-31T03:04:21.533 回答