我想从多个子文件中的多个文件中导入大量数据。幸运的是,数据在其输出中是一致的:
Subpro1/data apples 1
Subpro1/data oranges 1
Subpro1/data banana 1
然后
Subpro2/data apples 1
Subpro2/data oranges 1
Subpro2/data banana 1
我想拥有一个datafilename
数组,该数组包含我需要读取的每组数据的文件名。然后,我可以提取数据并将其存储在一个更本地的文件中,进行处理,最后将“ sub1_apples”与“ sub2_apples”进行比较
我尝试过
fid = fopen ("DataFileNames.txt");
DataFileNames = fgets (fid)
fclose (fid);
但这只给了我7的第一行。
DataFileNames = dlmread('DataFileNames.txt')
给了我一个7x3
数组,但是每行只有0 0 1
,因为它读取名称分隔符,但不能更改文件名。
DataFileNames = textread("DataFileNames.txt", '%s')
拥有所有正确的信息,但分隔符仍将其分成多行
data
apples
1
data
oranges
1
...
是否有%
?我很想念,如果是的话,那是什么?
我希望输出为:
data apples 1
data oranges 1
data banana 1
带有空格,下划线和包括的所有内容,以便随后可以使用它来访问数据文件。
答案 0 :(得分:2)
您可以将文件的所有行读取到像这样的单元格数组中:
str = fileread("DataFileNames.txt");
DataFileNames = regexp(str, '\r\n|\r|\n', 'split');
输出:
DataFileNames =
{
[1,1] = data apples 1
[1,2] = data oranges 1
[1,3] = data banana 1
}
在您尝试的第一个选项中,使用fgets
仅读取一行。另外,最好使用fgetl
删除行尾。要逐行读取(较长),您需要执行以下操作:
DataFileNames = {};
fid = fopen ("DataFileNames.txt");
line = fgetl(fid);
while ischar(line)
if ~isempty(line)
DataFileNames = [DataFileNames line];
endif
line = fgetl(fid);
endwhile
fclose (fid);
您尝试使用第二个选项dlmread
的效果不好,因为它用于将数字数据读取到矩阵中。
您尝试使用textread
的第三个选项不是很好,因为它对所有空白(空格,行尾,...)均等对待