in data 06-23-2009 06:09 PM
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??
in data 06-24-2009 01:51 PM
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ù.
in data 06-24-2009 04:48 PM
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.
in data 06-26-2009 07:15 AM
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
in data 06-27-2009 02:43 AM
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