Cos'è ElectroYou | Login Iscriviti

ElectroYou - la comunità dei professionisti del mondo elettrico

[MATLAB]Estrarre dati da un file TXT

Strumenti informatici per la matematica applicata, le simulazioni, il disegno: Mathcad, Matlab, Scilab, Microcap, PSpice, AutoCad ...

Moderatori: Foto Utenteg.schgor, Foto Utentedimaios

0
voti

[1] [MATLAB]Estrarre dati da un file TXT

Messaggioda Foto Utenteminidiable » 11 gen 2013, 13:35

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!
Avatar utente
Foto Utenteminidiable
5 1 2 5
Stabilizzato
Stabilizzato
 
Messaggi: 425
Iscritto il: 7 gen 2009, 14:08

0
voti

[2] Re: [MATLAB]Estrarre dati da un file TXT

Messaggioda Foto UtenteDirtyDeeds » 11 gen 2013, 14:24

Puoi usare la funzione textscan.
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[3] Re: [MATLAB]Estrarre dati da un file TXT

Messaggioda Foto Utenteminidiable » 11 gen 2013, 14:56

Ho risolto... Fra 1 ora posto il codice! Così può essere utile a qualcun altro:)!
Avatar utente
Foto Utenteminidiable
5 1 2 5
Stabilizzato
Stabilizzato
 
Messaggi: 425
Iscritto il: 7 gen 2009, 14:08

0
voti

[4] Re: [MATLAB]Estrarre dati da un file TXT

Messaggioda Foto Utenteminidiable » 11 gen 2013, 16:31

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)
Avatar utente
Foto Utenteminidiable
5 1 2 5
Stabilizzato
Stabilizzato
 
Messaggi: 425
Iscritto il: 7 gen 2009, 14:08

1
voti

[5] Re: [MATLAB]Estrarre dati da un file TXT

Messaggioda Foto UtenteDirtyDeeds » 11 gen 2013, 16:48

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.
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[6] Re: [MATLAB]Estrarre dati da un file TXT

Messaggioda Foto Utenteminidiable » 11 gen 2013, 17:33

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)
Avatar utente
Foto Utenteminidiable
5 1 2 5
Stabilizzato
Stabilizzato
 
Messaggi: 425
Iscritto il: 7 gen 2009, 14:08

0
voti

[7] Re: [MATLAB]Estrarre dati da un file TXT

Messaggioda Foto UtenteDirtyDeeds » 11 gen 2013, 18:07

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)
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

0
voti

[8] Re: [MATLAB]Estrarre dati da un file TXT

Messaggioda Foto Utenteminidiable » 11 gen 2013, 18:09

Grazie ancora :)
Avatar utente
Foto Utenteminidiable
5 1 2 5
Stabilizzato
Stabilizzato
 
Messaggi: 425
Iscritto il: 7 gen 2009, 14:08

0
voti

[9] Re: [MATLAB]Estrarre dati da un file TXT

Messaggioda Foto Utenteminidiable » 11 gen 2013, 18:20

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
Avatar utente
Foto Utenteminidiable
5 1 2 5
Stabilizzato
Stabilizzato
 
Messaggi: 425
Iscritto il: 7 gen 2009, 14:08

0
voti

[10] Re: [MATLAB]Estrarre dati da un file TXT

Messaggioda Foto UtenteDirtyDeeds » 11 gen 2013, 18:24

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.
It's a sin to write sin instead of \sin (Anonimo).
...'cos you know that cos ain't \cos, right?
You won't get a sexy tan if you write tan in lieu of \tan.
Take a log for a fireplace, but don't take log for \logarithm.
Avatar utente
Foto UtenteDirtyDeeds
55,9k 7 11 13
G.Master EY
G.Master EY
 
Messaggi: 7012
Iscritto il: 13 apr 2010, 16:13
Località: Somewhere in nowhere

Prossimo

Torna a Programmi applicativi: simulatori, CAD ed altro

Chi c’è in linea

Visitano il forum: Nessuno e 0 ospiti