读取csv文件,忽略头信息和其中的文本

31次观看(过去30天)
你好,
我有两种类型的CSV文件,我从测量仪器提取。
第一个(Dirty_Complex_Condensed.csv),附在这个问题上
  • 我想忽略的标题文本数据(第1-5行)
  • 一些整数,我想忽略(6-34行)
  • 复杂的十进制数据,我想忽略(21-35行)或真正需要(测量)。
第二个文件(dirty_supplementary _condensed .csv)也已附上
  • 我想忽略的标题文本数据(第1-5行)
  • 一些整数,我想忽略(第6-34行)或真正需要(测量)
  • 我想忽略的标题文本数据(第21-27行)
  • 一个我想要的整数忽略(第9-34行)并附加到前面的整数数据读取(第6-34行)(测量)。
还要注意,这些报头和测量数据的位置(行号)并不总是恒定的,因为它取决于所测量数据的条件类型。那么我如何采取这种考虑,使我的代码灵活,使我不是硬编码'行'或'行号'不同的csv读入?
我附上了“Clean_Complex_Condensed.csv”和“clean_supplementary _condensed .csv”,供您参考,我希望数据最终是怎样的,因为我读了它们。导入的csv的“已清理”版本中的行数在两个文件之间应该始终相同。
目前,我手动进入并删除这些标题文本数据,然后使用'csvread'命令,但毫无疑问,这太费时了。
我已经检查了以下之前的链接,这是相关的,但不完全或相当接近什么我试图在这里完成。
我想最强大的方法是使用“正则表达式”,但在我进一步打破我的头之前,我想知道是否有任何聪明的齿轮mvp /MathWorks工作人员对我有一个相对简单的问题有任何快速而明亮的建议。
谢谢,
知识产权

接受的答案

艾伦
艾伦 2021年5月25日
易洛魁人,
您所引用的行号与您的描述不完全匹配,并且使您的需求有点难以破译。但是,为了方便您开始,我提供了以下片段。
首先,将数据的一部分读入足够多的行,以捕获数据类型中的所有分割。这比读取整个文件要快,特别是对于大型数据文件。下面的示例假设数据类型的最后一次更改发生在第100行之前(对应于Excel中的行号)。
打开*.csv文件,只读取前100行
文件=“数据文件的路径\文件名”
Fid = fopen(文件);
C = textscan(fid,“% s”, 100,“分隔符”“\ n”);%应该是单元格数组。只需要C{1}
C {1} 应该是包含文本行的单元格数组,其中还包括作为文本的数值。
第二步:运行一些搜索 C {1} 查找数据更改为所需类型和不需要类型的行索引。下面的示例查找并返回包含文本的行号 “DataLabelIdxs” .然后查找包含单列值的第一行。在 Dirty_Complex_Condensed.csv 您提供的文件将查找整数值之后的第一行。
txt =“DataLabelIdxs”
indexx1 = find(contains(C{1},txt),1);
此示例数据集的最后一个整型行也是最后一行
%包含逗号。
index = index = find(~contains(C{1}(index1+1:end),”、“), 1“最后一次”);
应用额外的搜索将帮助您找到下面的其他文本行,以及当您从整数更改为浮点双精度浮点时,但会更复杂一些。您可能还想编程,如果搜索返回一个 价值。
第三:倒回FID线计数器和使用您的索引来读取您希望保留的值集。下面的代码只是将行前的值作为整数读入,从标有index1的标题行开始
frewind (fid)
将正在读取的数字的单元格数组转换为数字数组
intValues = cell2mat(textscan(fid,“% d”index2,“headerlines”index1));
dblValues = cell2mat(textscan(fid,“% % f”));
关闭FID
fclose (“所有”);
您可能需要使用 frewind 根据生成索引的方式,或者首先读取所有整数值,并且在整数集之间有浮动双精度值,执行多次函数。
此外,如果浮动双行可能包含两列以上的数据,并且同样是可变列数,则可以使用以下方法生成变量大小的表达式 textscan
假设index是一行包含浮点双精度数的数据
%值。
Expr = strcat(“% f”repmat (“% f”(1和(C{1}{指数}= =”、“)));
然后您可以使用textscan与此变量表达式输入类似
%到以前。
dblValues = cell2mat(textscan(fid,expr))
希望这能有所帮助。
艾伦

更多答案(0)

s manbetx 845


释放

R2020b

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!