Matlab输入格式

时间:2016-03-07 20:40:47

标签: matlab file-io input formatted-input

我输入的文件包含以下格式的数据。

information_schema

我需要输入输入,其中第一行是65910/A 22 9 4 2 9 10 4 1 2 5 2 0 4 1 1 0 65910/T 14 7 0 4 8 4 0 2 1 2 0 0 1 1 1 1 . . . %d的组合,中间有%c,下一行是/整数矩阵。我需要对矩阵执行一些工作,然后用标题信息识别它们。

如何在MATLAB中使用此输入格式?

1 个答案:

答案 0 :(得分:2)

由于您的文件包含可能被视为结构化的数据(或者#34;格式化#34;如果使用MATLAB的条款),您可以使用textscan函数来读取其内容。此功能的主要优点是您不需要指定"标题+数据的数量"结构出现 - 函数一直持续到文件末尾。

给定一个具有以下结构的输入文件(让我们称之为q35853578.txt):

65910/A
22 9 4 2 
9 10 4 1 
2 5 2 0 
4 1 1 0 
65910/T
14 7 0 4 
8 4 0 2 
1 2 0 0 
1 1 1 1 

我们可以这样写:

function [data,headers] = q35853578(filepath)
%// Default input
if nargin < 1
  filepath = 'q35853578.txt';
end
%// Define constants
N_ROWS = 4;
VALS_PER_ROW = 4;
NEWLINE = '\r\n';
%// Read structured file contents
fid = fopen(filepath);
headers = textscan(fid,['%u/%c' repmat([NEWLINE repmat('%u',1,VALS_PER_ROW)],1,N_ROWS)]);
fclose(fid);
%// Parse contents and prepare outputs
data = cell2mat(reshape(cellfun(@(x)reshape(x,1,1,[]),headers(3:end),...
  'UniformOutput',false),VALS_PER_ROW,N_ROWS).'); %'
headers = headers(1:2);
%// Output checking
if nargout < 2
  warning('Not all outputs assigned, some outputs will not be returned!')
end
%// Debug
clear ans fid N_ROWS NEWLINE VALS_PER_ROW filepath
keyboard; %// For debugging, delete/comment when done.

结果输出是uint32的3d数组(可以通过调整textscan的输入来更改输出类,如formatSpec所允许的那样):

ans(:,:,1) =

          22           9           4           2
           9          10           4           1
           2           5           2           0
           4           1           1           0


ans(:,:,2) =

          14           7           0           4
           8           4           0           2
           1           2           0           0
           1           1           1           1