0

我有超过 120 个 .txt 文件(都命名为 s1.txt、s2.txt、...、s120.txt),我需要将它们转换为 ASCII 扩展名才能在 MATLAB 中使用。

my .txt (comma , delimited .txt) files look like the following:
20080102,43.0300,3,9.493,569.567,34174.027,34174027
20080102,43.0600,3,9.498,569.897,34193.801,34193801

在 MATLAB 中,我希望使用类似于以下的代码:

for i = svec; 
   %# where svec = [1 2 13 15] some random number between 1 and 120. 
   eval(['load %mydirectory', eval(['s',int2str(i)]),'.ascii']);
end;

如果我没记错的话,我不能将上述命令与 .txt 文件一起使用,因此我必须使用 ASCII 文件。

由于我有很多文件要转换并且它们很大,是否有一种快速的方法可以通过 MATLAB 转换我的所有文件,或者网络上有一个适用于 Mac 的出色转换软件?有人会有比使用上面的代码更好的建议吗?

4

3 回答 3

1

你能显示一个示例文件吗?并非每个文本文件都对load命令有效。如果您的文件格式无效,则将文件名的扩展部分从更改.txt.ascii根本没有帮助。相反,在这种情况下,数据必须要么转换为有效的load命令格式,要么通过其他方式加载到 MATLAB 中,例如。通过使用fscanfor xlsread。两种方法都需要文件结构来解决这个问题。

另请参见matlab 加载空白文件中的加载命令

于 2012-06-10T10:10:53.647 回答
1

一种更清洁的方式:

for i=1:120
    fname = fullfile('mydirectory', sprintf('s%d.txt',i));
    X = load(fname, '-ascii');
end
于 2012-06-10T14:45:18.743 回答
1

添加到nrz的答案:

我不确定你到底想做什么,但知道你可以在 MATLAB 中打开任何文件,无论是文本(ASCII)还是二进制模式。后者可以使用fread.

作为旁注,您还要求为您的代码提供更好的建议。
那么,你试图通过这两个eval调用来实现什么?为什么不直接调用命令?改为这样做:

for i = svec
   load (['%mydirectory\s', int2str(i), '.txt'], '-ascii');
end

我还冒昧地添加了一个反斜杠,我认为你已经省略了。

在大多数情况下,您最好不使用eval. 检查替代方案...

于 2012-06-10T14:29:11.647 回答