Importare file txt su MATLAB

di il
4 risposte

Importare file txt su MATLAB

Ciao a tutti,

Ho bisogno di aiuto.

Devo importare un file con tante righe e poche colonne (circa 23).

Ho trovato il seguente ciclo su questo sito:
% Apertura del file di testo
%
fp_orig=fopen('file_di_testo_char_num.txt','rt');
% 
% Inizializzazione matrice "vuota"
% 
M=[];
%
% Loop per la lettura del file di testo
%
while(1)
   %
   %    Lettura di una riga
   %
   tline=fgetl(fp_orig)
   %
   %    Identificazione della fine del file ed uscita dal loop di lettura
   %
   if ~ischar(tline)
      break
   end
%    
%    Conversione della stringa in numero (scalare o vettore)
%    
   tmp=str2num(tline);
%    
%    Se la riga contiene solo numeri, la varaibile "tmp" conterrà i valori
%    letti dal file i quali verranno assegnati alla matrice "M"
% 
   if(~isempty(tmp))
      M=[M;tmp]
   end
end
% 
% Chiusura dei file
% 
fclose(fp_orig);
Però dato che la prima colonna è nel formato 00:00:00 (hh:mm:ss)
il ciclo mi preleva dati solo fino a 00:00:59, quando i minuti passano ad 0 a 1 il ciclo si interrompe.
Come posso risolvere? per me andrebbe bene anche eliminare la prima colonna.
Grazie mille per le risposte

4 Risposte

  • Re: Importare file txt su MATLAB

    Dovresti pubblicare un esempi significativo del file di input.

    Hai dato un'occhiata al codice che stai usando?
    Ha capito cosa "fa"?

    Mi sembra strano che "funzioni" anche solo per la prima riga.

    Senza avere a disposizione il file di input, si può suggerire di usare un'altra funzione per leggerlo, ad esempio "textscan"

  • Re: Importare file txt su MATLAB

    Il file di input è fatto in questo modo:

    00:00:00 12 0.222 0 54 1.002
    00:00:01 10 0.325 0 57 1.003
    00:00:02 11 0.236 1 25 1.0085
  • Re: Importare file txt su MATLAB

    Funziona per tutte le righe (anche più di mille) fino a che il tempo non raggiunge 00:01:00. Ovviamente nell'esempio che ho riportato ogni riga corrisponde ad 1 secondo, ma nel file di input non è così(perchè ogni riga corrisponde a circa 40ms).
  • Re: Importare file txt su MATLAB

    A quanto pare, le righe di testo vengono convertite in numeri, ma non il primo campo (che è una data).
    Questo dovrebbe farti capire che la procedura che usi non è la più adatta.

    A parte questo:
    [*] scrivi che ad un certo punto il ciclo "si interrompe". Cosa vuol dire? Genera un messaggio di errore?
    [*] scrivi che il codice riesce a leggere un certo numero di righe e poi che il ciclo si interrompe. Ho provato ad eseguire il codice e, a parte il fatto che la prima colonna non viene convertita, sembra funzionare.
    [*] scrivi che (perchè ogni riga corrisponde a circa 40ms)", ma dall'esempio che hai pubblicato non si evince. Se pubblichi un esempio di file di testo il formato del quale non corrisponde a quello che usi, come pensi che ti si possa aiutare?

    Usando al funzione "textscan" come ti ho suggerito nella risposta precedente, pupi leggere il file, compressa la prima colonna (fatto salvo che forse il formato non è quello che hai pubblicato) con poche righe di codice:
    
    fp_orig=fopen('i.txt','rt');
    C=textscan(fp_orig,'%s%f%f%f%f%f');
    fclose(fp_orig)
    tempo=cell2mat(C(:,1))
    M=cell2mat(C(:,2:end))
    
Devi accedere o registrarti per scrivere nel forum
4 risposte