我有一个以下格式的文本文件:
Row: 001, rank: 6, max: 0.2431, index: 15.
Row: 002, rank: 10, max: 0.2331, index: 1.
Row: 003, rank: 110, max: 0.2330, index: 10.
即,字段row
用零填充,以便数字有三位数。字段max
也被填充,因此它具有固定长度。 <{1}}和rank
均未填充。
[编辑此帖后添加]此外,在数据之前有几行无关文本。无关文本的行数未知。当且仅当它在行index
以下时,行格式如上所述。
有没有办法使用命令
读取文件 DATA START BELOW
[A, count] = fscanf(fid,['what is a proper format?'],[?, numberOfRows]);
A = A';
这样B = A(:,[i,j,k,l]);
?
我知道的一种方法是B=[1,6,0.2431,15; 2,10,0.2331,1; 3,110,0.2330,10;];
但是,当每个行追加新字段时,这种方法似乎缺乏灵活性。
答案 0 :(得分:0)
这是一种方式:
s = importdata('file.txt'); %// read file as cell array of strings; one line per string
s = [s{:}]; %// concatenate into a single string
ind = regexp(s, 'DATA START BELOW', 'end'); %// locate line that marks start of data
s = s(ind+1:end); %// keep only data
s = regexp(s, '-?\d+\.?\d*', 'match'); %// extract numbers as a cell array of strings
s = str2double(s); %// convert to numbers
s = reshape(s.', 4, []).'; %// reshape into four columns in row-mayor order
答案 1 :(得分:0)
另一个答案:
fileID = fopen('mydata.txt');
C = textscan(fileID,'%s %f %s %f %s %f %s %f','delimiter',{',','Row:','max:','rank:','index:'});
fclose(fileID);
C = C(2:2:8);