【发布时间】:2014-11-10 07:23:45
【问题描述】:
需要读取一个巨大的文本文件,其中包含格式奇怪的数据。格式如下:
//Header with Title Info
//Header with Test1 Info
//More Test1 Info
0,-156.875956035285
1.953125,-4.82866496038806
3.90625,-8.93502887648155
5.859375,-9.76964479822559
7.8125,-14.9767168331976
9.765625,-16.9949034672061
11.71875,-19.2709033739316
13.671875,-18.9948581866681
//Header with Test2 Info
//More Test2 Info
0,-156.875956035285
1.953125,-4.82866496038806
3.90625,-8.93502887648155
5.859375,-9.76964479822559
7.8125,-14.9767168331976
9.765625,-16.9949034672061
11.71875,-19.2709033739316
13.671875,-18.9948581866681
//Header with Test3 Info
//More Test3 Info
0,-156.875956035285
1.953125,-4.82866496038806
3.90625,-8.93502887648155
5.859375,-9.76964479822559
7.8125,-14.9767168331976
9.765625,-16.9949034672061
11.71875,-19.2709033739316
13.671875,-18.9948581866681
// End of Data
这就是它的要点,除了每个标题下大约有 25,000 个条目而不是 8 个。我正在运行 25 个测试,这些测试需要平均到一组数据中。
本质上,我想解析这个序列中的数据:
- 跳过第一行
- 识别空行,转到下一步
- 检查“数据结束”
- 如果不是结尾,则跳过当前行和下一行
- 为当前的测试数据集创建新数组
- 读取数据直到到达空行,然后返回步骤 2
然后,我想以最有效的方式对所有这些集合进行平均。
我无法读取数据。我知道我可以使用 csvread 或更通用的函数来读取分隔值,但我有点坚持想出一种优雅而简洁的方式来做所有事情。
我是从这个开始的:
function [ data ] = graph( input_args )
%Plot data
myData = fopen('mRoom_fSweep_25points_center.txt');
data = textscan(myData,'%s');
fclose(myData);
length(data)
end
我想我可以找到这个字符串数组的长度,并为整个操作列表制定一个 for 循环,但我无法超越这一点:输出一直给我这个:
ans =
{772321x1 cell}
我不能使用。当我尝试将其存储在一个变量中时,它的值为 1。我在这里缺少的单元格数组有什么奇怪的地方吗?
【问题讨论】:
-
不确定,但我认为在每个单元格元素中您保存了一行。您是否尝试使用 data{line,1} 处理这些条目?您必须使用大括号 {} 来获取带有“普通”括号的单元格内的数据,您只能获取整个单元格。
标签: matlab text-files cell-array