Ciao a tutti, sono nuovo del codice e vi chiedo aiuto per ottimizzare il programma che ho appena scritto (e anche risolvere un problema che non capisco).
In pratica devo leggere un file.txt con più di 10000 righe di dati scritti in formato simil-NMEA:
$MVUP,65754,4522330,N,1228399,E,0.13,K,29,C,85.00,G,-0.28,1.07,83.61,RPY,0.00,WS,0.00,0.00,WD,0.00,0.00,L
Queste sono le righe di codice che ho scritto e che funzionano a parte un piccolo errore 'ininfluente':
file_name = input ('Inserisci il nome del file: ','s');
file_id = fopen(file_name);
contenuto = fscanf(file_id, '%s');
fclose(file_id);
[date,contenuto]=strtok(contenuto, '-');
[temp,contenuto]=strtok(contenuto, '>');
i=1;
[temp,contenuto]=strtok(contenuto, '$');
while (contenuto)
[type,contenuto]=strtok(contenuto, ',');
[temp,contenuto]=strtok(contenuto, ',');
time(i)= str2double (temp);
[temp,contenuto]=strtok(contenuto, ',');
lat(i)= str2double (temp);
[temp,contenuto]=strtok(contenuto, ',');
[temp,contenuto]=strtok(contenuto, ',');
lon(i)= str2double (temp);
[temp,contenuto]=strtok(contenuto, ',');
[temp,contenuto]=strtok(contenuto, ',');
vel(i)= str2double (temp);
[temp,contenuto]=strtok(contenuto, ',');
[temp,contenuto]=strtok(contenuto, ',');
dir(i)= str2double (temp);
[temp,contenuto]=strtok(contenuto, ',');
[temp,contenuto]=strtok(contenuto, ',');
temperature(i)= str2double (temp);
[temp,contenuto]=strtok(contenuto, ',');
[temp,contenuto]=strtok(contenuto, ',');
roll(i)= str2double (temp);
[temp,contenuto]=strtok(contenuto, ',');
pitch(i)= str2double (temp);
[temp,contenuto]=strtok(contenuto, ',');
yaw(i)= str2double (temp);
[temp,contenuto]=strtok(contenuto, ',');
[temp,contenuto]=strtok(contenuto, ',');
ws(i)= str2double (temp);
[temp,contenuto]=strtok(contenuto, ',');
[temp,contenuto]=strtok(contenuto, ',');
wd_1(i)= str2double (temp);
[temp,contenuto]=strtok(contenuto, ',');
wd_2(i)= str2double (temp);
[temp,contenuto]=strtok(contenuto, ',');
[temp,contenuto]=strtok(contenuto, ',');
right(i)= str2double (temp);
[temp,contenuto]=strtok(contenuto, ',');
left(i)= str2double (temp);
[temp,contenuto]=strtok(contenuto, '$');
i=i+1;
end
L'errore è che se lo faccio partire dalla console scrivendo il nome del file con il codice e poi immettendo il nome del txt non va dando l'errore seguente, se invece lo faccio partire con il 'play' dal text editor di matlab funziona.
??? Attempt to reference field of non-structure
array.
Il codice comunque produce il risultato voluto.
ECCO ORA LA MIA RICHIESTA:
quando leggo qualche centinaio di dati va tutto bene, ma quando salgo sopra i mille il computer si impianta per diverso tempo (non sono mai arrivato a vedere quanto ci mette con 17000 righe). Vorrei sapere se c'è un modo per ottimizzare quel codice o se l'unica soluzione (ma non penso di essere stato così bravo al primo colpo) è quella di spezzettare il file.