Forum Italiano sui Prodotti NI

annulla
Visualizzazione dei risultati per 
Cerca invece 
Intendevi dire: 

Math script e Math node

Salve a tutti

ho scritto uno script matlab che mi modifica un file di testo per poi acquisirlo con labview.

Per non installare matlab sul pc di destinazione volevo usare un Math script ma sfortunatamente non funziona.

lo script è il seguente:

 

 

d='new filename.txt'; s='PROVA.txt'; fid=fopen(s) ; % the original file fidd=fopen(d,'w') ; % the new file while ~feof(fid) ; % reads the original till last line tline=fgets(fid) ; % if (size(findstr(tline, 'MEASUREMENT'),1) ); for i=1:5 tline=fgets(fid) ~= 0 ; end else if (size(findstr(tline, '/'),1) ~= 0) ; else fwrite(fidd,tline) ; end end end fclose all ; [MHz, dBuV]=textread('new filename.txt', '%f %f');

 


 

 

allego lo script matlab e un file txt di prova per testare lo script.

 

 Qualche idea??

 

 

Scarica tutti
0 Kudos
Messaggio 1 di 5
5.875Visualizzazioni

Non ho potuto provare il codice Matlab ma a prima vista vorrei chiederti una cosa: sei sicuro della correttezza dell'istruzione:

 

tline=fgets(fid) ~= 0

 

c'è una assegnazione e un confronto.

 

Prova a togliere ~=0 e dimmi se funziona. Appena ho l'opportunità di provare il codice posso dirti qualcosa di più.

D. Beninato
0 Kudos
Messaggio 2 di 5
5.863Visualizzazioni

Il seguente codice viene eseguito correttamente:

 

 

d='new filename.txt';
s='PROVA.txt';
fclose all ;
fid=fopen(s) ; % the original file
fidd=fopen(d,'w') ; % the new file
while ~feof(fid) ; % reads the original till last line
    tline=fgets(fid) ; %
indexis = findstr(tline, 'MEASUREMENT');
dimen = size(indexis,1)
     if (size(findstr(tline, 'MEASUREMENT'),1) );
                                   for i=1:5
                                   tline=fgets(fid) ~= 0 ;
                                   end  
     else
         if (size(findstr(tline, '/'),1) ~= 0) ;
         else fwrite(fidd,tline) ;
         end
     end
end
fclose all ;

fidd=fopen('new filename.txt');

[MHz, dBuV]=textread('new filename.txt', '%f %f');
fclose all;

 

ATTENZIONE: la variabile "dimen" vale sempre 1 anche se la funzione "findstr" non trova la stringa. Quindi l'esecuzione entra sempre nel primo "if".

Non penso sia ciò che tu volessi fare quindi ti consiglio di modificare la condizione.

D. Beninato
0 Kudos
Messaggio 3 di 5
5.855Visualizzazioni

Ciao Daniele

grazie per il supporto.

Hai ragione la variabile dimen è sempre 1, è un'istruzione inutile

size(findstr(tline, 'MEASUREMENT'),1)

 basta

if (findstr(tline, 'MEASUREMENT' );

 


 

ora però ho altri 2 dubbi.

 

- fwrite in matlab scrive in un file in colonna, mentre in Mathscript no. Esiste una funzione che mi scrive in colonna i valori letti o devo modificare io il file scritto. allego una copia del file in uscita dal Mathscript.

 

-Ho notato che se eseguo lo script in Matlab l'esecuzione è instantanea mentre in ambiente Mathscript è notevolmente più lento. sai se esistono dei parametri da modificare? 

 

Grazie ancora dell'aiuto

 

Aldo

 

0 Kudos
Messaggio 4 di 5
5.840Visualizzazioni

per scrivere i valori in colonna prova a concatenare la stringa che scrivi con '\n'

ad esempio newline = tline + '\n'

 

Per velocizzare l'esecuzione prova scrivere il codice in Labview.

Il VI in allegato mi sembra abbastanza veloce. Tieni comunque presente che la lettura e scrittura in file non è un'operazione velocissima.

 

Daniele

 

D. Beninato
0 Kudos
Messaggio 5 di 5
5.833Visualizzazioni