Non ho modo di verificare se funzioni, ma potresti provare a:
- leggere i dati come "stringhe" di caratteri
- provare a convertirli in "numeri" con la funzione "str2num"
- se la stringa non contiene un dato numerico "valido" (es. 'j4' come hai scritto nella domanda), "str2num" ritorna un array vuoto ([])
- potresti quindi verificare l'output di "str2num": se l valore non è un array vuoto, inserisci il valore nel vettore "dati"
Qualcosa del tipo:
% Inizializzazione del vettore di output
cnt=0;
% Loop di acquisizione dati
for i=1:1:1000
% Lettura dei dati come "stringa di caratteri"
tmp=fscanf(s,'%s');
% Tentativo di convesione in valore numerico"
n_tmp=srt2num(tmp);
% Verifica del valore convertito
if(~isempty(n_tmp))
% Incremento del contatore
cnt=cnt+1;
% Inserimento del valore numerico nel vettore di output
dati(cnt)=n_tmp
else
% Stampa nella CommandWindow un messagio quando viene letto un valore
% non valido
disp(['Il valore ' tmp ' letto nella iterazione # ' num2str(i) ' non è valido'])
end
end
Volendo, quando viene letto un dato "non valido", potresti anche inserire nel vettore "dati" "NaN" o un valore particolare (es. -999) in modo da tracciare questi casi.
% Definizione del valore rappresentativo dei dati non validi
% not_a_number=-999;
not_a_number=NaN;
% Loop di acquisizione dati
for i=1:1:1000
% Lettura dei dati come "stringa di caratteri"
tmp=fscanf(s,'%s');
% Tentativo di convesione in valore numerico"
n_tmp=srt2num(tmp);
% Verifica del valore convertito
if(~isempty(n_tmp))
% Inserimento del valore numerico nel vettore di output
dati(i)=n_tmp
else
% Stampa nella CommandWindow un messagio quando viene letto un valore
% non valido
disp(['Il valore ' tmp ' letto nella iterazione # ' num2str(i) ' non è valido'])
% Inserimento di un valore "particolare" nel varrore di output
dati(i)=not_a_number
end
end
Un'alternativa, potrebbe essere quella di utilizzare "try - catch" per intercettare l'errore ed agire di conseguenza.