我打算阅读带有5列的格式化.txt文件,并按以下方式进行组织:
0 1:0.007477 2:0.000000 3:1.000000 id:10002 #we = GX008-86-4444840 an = 1 asd = 0.086622
0 1:0.603738 2:0.000000 3:1.000000 id:10002 #we = GX037-06-11625428 an = 0.0031586555555558 asd = 0.0897452
0 1:0.214953 2:0.000000 3:0.000000 id:10002 #we = GX044-30-4142998 an = 0.00841930701072746 asd = 0.0999735
我计划将这些文件的内容读入矩阵,其中每个元素都将被视为字符串。在我成功将其读入矩阵后,我计划在八度音阶中使用字符串操作函数来删除不必要的id:etc。
但是,我无法正确读取文件。我尝试了textscan
,fscanf
和其他此类命令等。
例如:
[sam,count]=fscanf(fid,'%d %*s %*s %*s %*s %*s',[5,inf])
返回sam = [] (0x1) ???
和count = 0
。我试图阅读关于此的文档,但它非常严重。任何帮助将不胜感激。
答案 0 :(得分:3)
这是使用textscan的工作示例。在Matlab中,它正在发挥作用。我没有用Octave测试它。
>> fid = fopen('test.txt')
>> A = textscan(fid,'%f 1:%f 2:%f 3:%f id:%f %*[^\n]')
A =
Columns 1 through 4
[3x1 double] [3x1 double] [3x1 double] [3x1 double]
Column 5
[3x1 double]
>> A{2}
ans =
0.0075
0.6037
0.2150
编辑:将其转换为矩阵:
cell2mat(A)
答案 1 :(得分:0)
使用fopen
和fgetl
,您可以将文件的每一行读入MATLAB / OCTAVE单元格数组。
一个简单的例子是
fid=foepn('c:\path\to\file.txt') %# open the file for reading
%#Loop through the file reading one line at a time
i=0;
while ~feof(fid)
i=i+1;
cellContents{i,1}=fgetl(fid);
end
现在cellContents
的每个元素都是文件中一行的内容。