Importare file txt su MATLAB

di Anonimizzato23321 il
4 risposte
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

  • 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"

  • 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
  • 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).
  • 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