2013-05-05 66 views
3

我对数据分析非常陌生,所以如果这是一个新手问题,我很抱歉,我正在学习。在数据文件中读取时提取变量

我刚刚开始在变星天文学方面做一些工作。我每天晚上观察大约100个文件,它们都包含相同的基本信息(星形坐标,大小等)。我使用加载所有的文件到我的工作区作为阵列for循环

files = dir('*.out'); 

for i=1:length(files) 
eval(['load ' files(i).name ' -ascii']); 
end 

我只有我在每个文件两列很感兴趣。有没有办法提取一列,并将其设置为矢量,而这个for循环正在运行?我相信这是可能的,但它的实际语法正在逃避我。

+1

只是一个评论:当你可以直接调用load(files(i).name,'-ascii')'时,为什么要使用'eval(...)'? – 2013-05-05 17:34:11

+1

我会尽力做到这一点,我使用的是eval,因为这正是我读的Mathworks资源告诉我要做的事情,然后才能奏效。尽管如此,我会尝试一下,看看我的问题是否更明显。 – Ryan 2013-05-05 17:55:37

回答

1

尝试使用load作为一个函数,它的输出保存到一个变量

files = dir('*.out'); 
twoCols = {}; 
for ii=1:length(files) 
    data = load(files(ii).name, '-ascii'); % load file into "data" 
    twoCols{ii} = data(:,1:2); % take only two columns 
end 

现在变量twoCols将每个文件的两列保存在不同的单元格中。

+0

好吧,这主要是工作,我在找什么。然而,我的迭代似乎陷在了i = 37附近,数据突然变成了[0,0]。不过,我在数据中找不到任何错误。 – Ryan 2013-05-05 20:43:14

+0

@Ryan损坏的文件?一个空集? – Shai 2013-05-05 20:48:09

+0

它看起来不像,我只能继续尝试。 – Ryan 2013-05-05 20:50:39

0

您必须将加载结果分配给新变量。那么,如果让我们说你的变量是starsInfo可以使用

onlyTwoFirst = starsInfo(:,1:2) 

这意味着把所有的行,但仅列1和2

+0

对不起,我在执行此操作时遇到了一些麻烦,但我理解(:,#)方法。有没有一种方法可以实现这一点,我用来加载所有的循环?这是我想要使用您的咨询: '文件= DIR;' '对于i = 1( '*了。'):长度(文件)'' 负荷(文件(我)。 (',7);' 'end' 当我在工作区中调用我的脚本时,这不会给我一个mag变量,这并不令人惊讶。我的主要问题仍然是如何一次从每个starsInfo文件中提取数据。 *对不起,格式为 – Ryan 2013-05-05 18:13:11