【发布时间】:2015-09-09 23:33:32
【问题描述】:
我正在尝试创建一个接收多个 csv 文件的程序。但是,它们包括字符串和数字。 我的 csv 文件看起来像这样:
"Project","Task","Value Type", "Value"
"105", "06.05.02", "cost", "3434"
"105", "06.05.02", "obligation", "3434"
"106", "06.05.02", "cost", "500"
"106", "06.05.02", "obligation", "500"
列数是固定的(实际上有 23 个,为了便于阅读,我只列出了 4 个),但是每个 csv 的行数不同。如果我将它保存为 xls 文件,它可以完美运行。但是,如果有很多文件并且最终用户不想处理它,这将花费太长时间。
类似的问题建议textread,但第一行应该是
textread('filename.csv', '%s%s%s%s', 'delimiter', ',');
而文件的其余部分是
textread('filename.csv', '%f%s%s%f', 'delimiter', ',');
与使用xlsread 在相应数组中获取数字、字符串和原始数据的简单性相比,拥有 23 个不同的数组似乎有点复杂。
这里最好的解决方案是什么? 文件很大,但不够大,我担心效率。
有没有办法在我的程序中将文件的扩展名从 .csv 更改为 .xls? (我也查了这个,但找不到任何有用的东西)我真的很想使用xlsread,但如果这不可能,有没有办法让textread 保存第一行csv 具有某些变量类型(%s%s%s%s),然后使用不同的变量类型(%f%s%s%f)保存其余行?
【问题讨论】:
-
readtable 怎么样 (au.mathworks.com/help/matlab/ref/readtable.html)
-
@EliAlgranti -
readtable仅适用于 MATLAB R2013b+。 OP 可能没有更新版本的 MATLAB。 -
看这个之前的帖子[read_mixed_csv][1][1]:stackoverflow.com/questions/4747834/…
-
无论如何,您都必须将
textread(...)行放在一个循环中,那么为什么不在循环之前调用您的标题textread,然后在循环内使用您的第二个textread获取数据呢? -
谢谢,其中一些似乎可行。我错误地使用了
textread,我认为由于 MATLAB 是基于矩阵的,因此我不需要使用循环,只需自动获取每一列。那么.. 有没有办法从 MATLAB 中将 .csv 更改为 .xls?我真的很想使用xlsread一次保存所有数据要简单得多!