Pagina 1 di 2

[MATLAB]Estrarre dati da un file TXT

MessaggioInviato: 11 gen 2013, 13:35
da minidiable
Ciao a tutti , avrei bisogno di estrarre dei dati da un file .txt , la cosa dovrebbe essere abbastanza semplice e per questo vorrei sapere se qualcuno conosce qualcosa di gia' fatto. Io non riesco a trovare ancora niente in rete, ma sono fiducioso e continuo a cercare!

In particolare dovrei estrarre i numeri che sono nella colonna " m/s " del file che vi scrivo sotto, perche' non me lo fa allegare:

Codice: Seleziona tutto
No.s     Date Time   m/s   °C   %RH   Dew   Wet   HI   Humidex   WCT   
1   01 00:06:02   2.53   23.7   25.6   2.9   12.9   ----   22.4   ----   
2   01 00:06:07   2.83   23.7   25.6   2.8   12.9   ----   22.3   ----   
3   01 00:06:12   3.03   23.6   25.5   2.8   12.8   ----   22.2   ----   
4   01 00:06:17   3.02   23.7   25.4   2.8   12.9   ----   22.3   ----   
5   01 00:06:22   2.62   23.7   25.5   2.8   12.9   ----   22.3   ----   
6   01 00:06:27   3.01   23.6   25.5   2.8   12.8   ----   22.2   ----   
7   01 00:06:32   2.58   23.6   25.5   2.8   12.8   ----   22.2   ----   
8   01 00:06:37   2.93   23.6   25.4   2.7   12.8   ----   22.2   ----   
9   01 00:06:42   2.67   23.7   25.3   2.7   12.8   ----   22.2   ----   
10   01 00:06:47   2.48   23.6   25.4   2.7   12.8   ----   22.2   ----   
11   01 00:06:52   2.90   23.6   25.4   2.7   12.8   ----   22.2   ----   
12   01 00:06:57   2.77   23.6   25.4   2.7   12.8   ----   22.2   ----   
13   01 00:07:02   2.56   23.6   25.5   2.8   12.8   ----   22.2   ----   
14   01 00:07:07   2.40   23.6   25.4   2.7   12.8   ----   22.2   ----   
15   01 00:07:12   2.77   23.6   25.3   2.6   12.8   ----   22.1   ----   
16   01 00:07:17   2.75   23.6   25.3   2.6   12.8   ----   22.1   ----   
17   01 00:07:22   2.70   23.6   25.5   2.7   12.8   ----   22.2   ----   
18   01 00:07:27   2.69   23.6   25.5   2.8   12.9   ----   22.2   ----   
19   01 00:07:32   2.31   23.6   25.5   2.8   12.8   ----   22.2   ----   
20   01 00:07:37   2.66   23.6   25.3   2.7   12.8   ----   22.2   ----   



Grazie a tutti!

Re: [MATLAB]Estrarre dati da un file TXT

MessaggioInviato: 11 gen 2013, 14:24
da DirtyDeeds
Puoi usare la funzione textscan.

Re: [MATLAB]Estrarre dati da un file TXT

MessaggioInviato: 11 gen 2013, 14:56
da minidiable
Ho risolto... Fra 1 ora posto il codice! Così può essere utile a qualcun altro:)!

Re: [MATLAB]Estrarre dati da un file TXT

MessaggioInviato: 11 gen 2013, 16:31
da minidiable
Ecco come ho risolto. Probabilmente sara' il modo peggiore ma sinceramente e' il primo che mi e' riuscito e venuto in mente:

Codice: Seleziona tutto
%% Data Acquisition from the wind sensor text file

clear all
system(pause)
%open the file with fopen
fid=fopen('wind_1.txt');
i=0;
while(true)
i=i+1;
if(feof(fid)) %% Quando Finisci il file esci dal while
    break
end
    line=fgetl(fid); %leggi il file riga per riga
    %%Questo dipende da quello che volete leggere in ogni riga
    if(i<=10)
    n(i)=str2double(strtrim(line(15:19))); %metti in n quello che leggi
    else
        n(i)=str2double(strtrim(line(15:20)));
    end
    %Ho dovuto mettere questo if else, perche' dopo la nona riga il primo
    %carattere invece di avere una cifra ne ha 2 e quindi per leggere tutto
    %ho dovuto aumentare di 1 l'estremo inferiore dell'intervallo da
    %leggere
   
    %l'istruzione strtrim elimina i caratteri bianchi inutili
end
% le due istruzioni successive mi servono semplicemente per avere un
% vettore colonna e non uno riga, si noti che prendo il vettore a partire
% dal secondo elemento perche' il primo elemento non mi interessa
n=n';
n=n(2:length(n),1)

Re: [MATLAB]Estrarre dati da un file TXT

MessaggioInviato: 11 gen 2013, 16:48
da DirtyDeeds
minidiable ha scritto: Probabilmente sara' il modo peggiore


Sì, come esempio di programmazione è terrificante ed è meglio non seguirlo. Impara a usare la funzione textscan che ti ho linkato sopra: otterrai un programma più corto, più veloce, meglio funzionante, più adattabile ad altre situazioni e più manutenibile.

Non bisogna seguire la filosofia:

minidiable ha scritto:e' il primo che mi e' riuscito e venuto in mente:


ma bisogna imparare a programmare in modo corretto utilizzando al meglio tutti gli strumenti che un certo linguaggio ci mette a disposizione.

Re: [MATLAB]Estrarre dati da un file TXT

MessaggioInviato: 11 gen 2013, 17:33
da minidiable
Hai ragione infatti gia' mi ero attrezzato ...ecco il Programma Con Textscan.

Questo effettua anche la media di tutte le misure in 9 righe di codice totali :)

Codice: Seleziona tutto
fid=fopen('wind237_2.hwa');

C=textscan(fid,'%s%s%s%s%s%s%s%s%s%s%s');
N=str2double(C{4})
N=N(2:length(N),1)
sum=N(1);
for i=1:(length(N)-1)
    sum=sum+N(i+1);
end
n_avg=sum/length(N)

Re: [MATLAB]Estrarre dati da un file TXT

MessaggioInviato: 11 gen 2013, 18:07
da DirtyDeeds
Meglio, ma non ci siamo ancora [-X

Perché memorizzare tutte le colonne quando a te ne serve una? E' uno spreco di tempo e di memoria! Se guardi l'help per textscan scoprirai che c'è il modo di non fare memorizzare alcune colonne. Poi, perché fare tu la conversione quando la può fare textscan?

Inoltre, definisci il tuo programma come funzione, in modo da poter usare un nome di file qualsiasi e poter salvare i valori in una variabile qualsiasi. Per esempio,

Codice: Seleziona tutto
function [V, vavg] = getwindspeed(fname)


Infine, la media la si fa con la funzione mean, non con un ciclo for :!: I cicli for in Matlab si usano il meno possibile, meglio praticamente MAI :!: Se V è il vettore contenente le velocità,

Codice: Seleziona tutto
vavg = mean(V)

Re: [MATLAB]Estrarre dati da un file TXT

MessaggioInviato: 11 gen 2013, 18:09
da minidiable
Grazie ancora :)

Re: [MATLAB]Estrarre dati da un file TXT

MessaggioInviato: 11 gen 2013, 18:20
da minidiable
La conversione con textscan direttamente non funziona... Non so perche' .

Ho provato a scrivere:
Codice: Seleziona tutto
%% Data Acquisition from the wind sensor text file
function [V,avg]=acq(filename)
% clear all
%
% %open the file with fopen

fid=fopen(filename);

C=textscan(fid,'%s%s%s%f%s%s%s%s%s%s%s');
N=(C{4})

N=N(2:length(N),1)

avg=mean(N)
end


Ma non mi funziona, invece facendo cosi' funziona tutto:
Codice: Seleziona tutto
%% Data Acquisition from the wind sensor text file
function [V,avg]=acq(filename)
% clear all
%
% %open the file with fopen

fid=fopen(filename);

C=textscan(fid,'%s%s%s%s%s%s%s%s%s%s%s');
N=str2double(C{4})
% N=(C{4})
N=N(2:length(N),1)

avg=mean(N)
end

Re: [MATLAB]Estrarre dati da un file TXT

MessaggioInviato: 11 gen 2013, 18:24
da DirtyDeeds
minidiable ha scritto:La conversione con textscan direttamente non funziona... Non so perche' .


Perché la prima riga del file non si uniforma al formato: devi saltare la prima riga. Poi, stai continuando a memorizzare tutte le colonne. Leggi qui sotto Optional Operators.