Due possibili soluzioni (ma sicuramente non le uniche) per leggere il file di testo proposto possono essere:
Soluzione "semplice":
[*] apertura del file di testo con funzione "fopen"
[*] lettura del file con la funzione "textscan" specificando il numero di righe "da saltare" (11, nel caso dell'estratto del file inserito nella domanda) ed il numero di colonne da leggere (7, nel caso dell'estratto del file inserito nella domanda).
[*] La funzione "textscan" restituisce un cell array per cui, si può (ma questo passo non è strettamente necessario) convertire il cellarray in una matrice
[*]chiusura del file di input con la funzione "fclose"
Soluzione "meno semplice"
[*] apertura del file di testo con funzione "fopen"
[*] loop per la lettura delle righe di intestazione (quelle che vengono scartate con la "soluzione semplice" con la funzione "textscan"
[*] identificazione delle parole chiave (es. "xtrf", "Mach")
[*] lettura dei valori corrispondenti e loro assegnazione ad una variabile di tipo "struttura"
[*] lettura dei nomi delle variabili e loro assegnazione alla variabile di tipo "struttura"
[*] identificazione del termine delle righe di intestazione ("------") ed uscita dal loop per la loro lettura
[*] lettura dei dati numerici con la funzione "textscan" specificando il numero di colonne da leggere (7, nel caso dell'estratto del file inserito nella domanda).
[*] aggiunta alla struttura dei campi contenenti i valori numerici letti; sfruttando la funzione "eval" (ma si può anche usare la funzione "assignin") si possono creare i campi dando loro il nome della variabile corrispondente, letti in precedenza.
[*] in aggiunta (o in alternativa) i valori letti si possono assegnare ad una matrice (come nel caso della "soluzione semplice".
Al termine del processo tutti i dati del file saranno contenuti all'interno della variabile di tipo struttura
[*]chiusura del file di input con la funzione "fclose"
Le due soluzioni proposte sono state implementate nei due script che seguono.
Soluzione semplice
%
% Apertura del file di testo
%
fp_orig=fopen('importazione_dato.txt','rt');
%
% Lettura delle righe da scartare
%
n=textscan(fp_orig,'%f%f%f%f%f%f%f','headerlines',11);
%
% Conversione dell'output in una matrice
%
M=[n{1}(:) n{2}(:) n{3}(:) n{4}(:) n{5}(:) n{6}(:) n{7}(:)];
%
% Chiusura del file di input
%
fclose(fp_orig);
Soluzione meno semplice
%
% Apertura del file di testo
%
fp_orig=fopen('importazione_dato.txt','rt');
%
% Lettura del file "per righe" (parametro 'delimiter' = '\n'
%
while(~feof(fp_orig))
c=textscan(fp_orig,'%s',1,'delimiter','\n');
%
% Conversione da cellarray a stringa
%
a=c{1}{1};
%
% Estrazine della prima parola della stringa
%
[str,res]=strtok(a);
%
% Assegnazine dei campi alla struttura "data"
%
if(strcmp(str,'xtrf'))
c=textscan(a,'%s%s%s%s%s%s');
data.xtrf_1=str2double(char(c{3}));
data.xtrf_1_mode=char(c{4});
data.xtrf_2=str2double(char(c{5}));
data.xtrf_2_mode=char(c{6});
end
if(strcmp(str,'Mach'))
a=strrep(a,' e ','e');
c=textscan(a,'%s%s%s%s%s%s%s%s%s');
data.Mach=str2double(char(c{3}));
data.Re=str2double(char(c{6}));
data.Ncrit=str2double(char(c{9}));
end
%
% assegnazione nomi variabili alla struttura "data"
%
if(strcmp(str,'alpha'))
c=textscan(a,'%s%s%s%s%s%s%s');
for i=1:7
data.var_name{i}=char(c{i});
end
end
%
% Identificazione termine delle righe di testo ed uscita dal loop per la
% loro lettura
%
if(~isempty(str))
if(strfind(str,'---'))
break
end
end
end
%
% Lettura dei valori numerici (7 colonne
%
n=textscan(fp_orig,'%f%f%f%f%f%f%f');
%
% Assegnazione dei valori letti ai corrispondenti campi della struttura
% "data"
%
for i=1:7
eval(['data.' char(data.var_name{i}) '=n{' num2str(i) '}(:);cls'])
end
%
% Conversione dell'output in una matrice
%
M=[n{1}(:) n{2}(:) n{3}(:) n{4}(:) n{5}(:) n{6}(:) n{7}(:)];
%
% Chiusura del file di input
%
fclose(fp_orig);
Hope this helps.