Importazione dato

di il
7 risposte

Importazione dato

Ciao a tutti
Devo importare dei dati da un file esterno, in cui sono presenti dei dati non numerici.
Si può utilizzare il comando load? oppure qualsiasi altro comando va bene. Deve funzionare in modo da trascurare le scritte e e vedere solo i numeri


Grazie a tutti

7 Risposte

  • Re: Importazione dato

    Affinchè un file di testo (assumo che "file esterno" significhi file ASCII) sia leggibile con la funzione "load" deve contenere solo numeri (stesso numero di colonne per ogni riga).

    La risposta alla domanda;

    https://www.iprogrammatori.it/forum-programmazione/matlab-simulink/importare-file-testo-txt-t24092.html

    dovrebbe risolvere il tuo problema.

    In caso contrario dovresti pubblicare un estratto significativo del file di input in moda da capirne la struttura.

    Hope this helps.
  • Re: Importazione dato

    Vorrei caricare il file ma non so quali estensioni accetta il forum e tutte quelle che ho provato le rifiuta
  • Re: Importazione dato

    Se è un file ASCII, puoi copiarne una parte ed inserirla come "Quote" o "Code": valuta il numero di righe da inserire in modo che la porzione di file inserito sia rappresentativo del cntenuto di tutto il fie.

    Esemio di introdzione testo con "Quote"
    File di testo di esempio
    con righe di testo
    0.00000 0.00000 0.00000 0.00000 0.00000
    0.01000 0.00000 0.00000 0.00000 0.00000
    0.02000 0.00000 0.00000 0.00000 0.00000
    0.03000 0.00000 0.00000 0.00000 0.00000
    0.04000 0.00000 0.00000 0.00000 0.00000
    0.05000 0.00000 0.00000 0.00000 0.00000
    0.06000 0.00000 0.00000 0.00000 0.00000
    0.07000 0.00000 0.00000 0.00000 0.00000
    0.08000 0.00000 0.00000 0.00000 0.00000
    0.09000 0.00000 0.00000 0.00000 0.00000
    Esemio di introdzione testo con "Code"
    
    File di testo di esempio
    con righe di testo
           0.00000        0.00000        0.00000        0.00000        0.00000
           0.01000        0.00000        0.00000        0.00000        0.00000
           0.02000        0.00000        0.00000        0.00000        0.00000
           0.03000        0.00000        0.00000        0.00000        0.00000
           0.04000        0.00000        0.00000        0.00000        0.00000
           0.05000        0.00000        0.00000        0.00000        0.00000
           0.06000        0.00000        0.00000        0.00000        0.00000
           0.07000        0.00000        0.00000        0.00000        0.00000
           0.08000        0.00000        0.00000        0.00000        0.00000
           0.09000        0.00000        0.00000        0.00000        0.00000
    
  • Re: Importazione dato

     XFOIL         Version 6.96
      
     Calculated polar for:                                                 
      
     1 1 Reynolds number fixed          Mach number fixed         
      
     xtrf =   1.000 (top)        1.000 (bottom)  
     Mach =   0.000     Re =     0.160 e 6     Ncrit =   9.000
      
       alpha    CL        CD       CDp       CM     Top_Xtr  Bot_Xtr
      ------ -------- --------- --------- -------- -------- --------
       1.000   0.3859   0.01317   0.00713  -0.0539   0.7168   0.9582
       1.500   0.4859   0.01330   0.00710  -0.0625   0.6851   0.9800
       2.000   0.5862   0.01338   0.00690  -0.0716   0.6531   0.9995
       2.500   0.6274   0.01336   0.00682  -0.0696   0.6254   1.0000
       3.000   0.6699   0.01365   0.00693  -0.0674   0.5990   1.0000
       3.500   0.7095   0.01381   0.00702  -0.0644   0.5724   1.0000
       4.000   0.7522   0.01428   0.00746  -0.0620   0.5469   1.0000
    


    Questo è il file
  • Re: Importazione dato

    Non posso nemmeno usare 'uiimport' perché è un'operazione che devo iterare più volte.
  • Re: Importazione dato

    Due possibili soluzioni (ma sicuramente non le uniche) per leggere il file di testo proposto possono essere:

    Soluzione "semplice":
    [*] apertura del file di testo con funzione "fopen"
    [*] lettura del file con la funzione "textscan" specificando il numero di righe "da saltare" (11, nel caso dell'estratto del file inserito nella domanda) ed il numero di colonne da leggere (7, nel caso dell'estratto del file inserito nella domanda).
    [*] La funzione "textscan" restituisce un cell array per cui, si può (ma questo passo non è strettamente necessario) convertire il cellarray in una matrice
    [*]chiusura del file di input con la funzione "fclose"

    Soluzione "meno semplice"
    [*] apertura del file di testo con funzione "fopen"
    [*] loop per la lettura delle righe di intestazione (quelle che vengono scartate con la "soluzione semplice" con la funzione "textscan"
    [*] identificazione delle parole chiave (es. "xtrf", "Mach")
    [*] lettura dei valori corrispondenti e loro assegnazione ad una variabile di tipo "struttura"
    [*] lettura dei nomi delle variabili e loro assegnazione alla variabile di tipo "struttura"
    [*] identificazione del termine delle righe di intestazione ("------") ed uscita dal loop per la loro lettura
    [*] lettura dei dati numerici con la funzione "textscan" specificando il numero di colonne da leggere (7, nel caso dell'estratto del file inserito nella domanda).
    [*] aggiunta alla struttura dei campi contenenti i valori numerici letti; sfruttando la funzione "eval" (ma si può anche usare la funzione "assignin") si possono creare i campi dando loro il nome della variabile corrispondente, letti in precedenza.
    [*] in aggiunta (o in alternativa) i valori letti si possono assegnare ad una matrice (come nel caso della "soluzione semplice".
    Al termine del processo tutti i dati del file saranno contenuti all'interno della variabile di tipo struttura
    [*]chiusura del file di input con la funzione "fclose"

    Le due soluzioni proposte sono state implementate nei due script che seguono.

    Soluzione semplice
    
    %
    % Apertura del file di testo
    %
    fp_orig=fopen('importazione_dato.txt','rt');
    % 
    % Lettura delle righe da scartare
    % 
    n=textscan(fp_orig,'%f%f%f%f%f%f%f','headerlines',11);
    % 
    % Conversione dell'output in una matrice
    % 
    M=[n{1}(:) n{2}(:) n{3}(:) n{4}(:) n{5}(:) n{6}(:) n{7}(:)];
    % 
    % Chiusura del file di input
    % 
    fclose(fp_orig);
    
    Soluzione meno semplice
    %
    % Apertura del file di testo
    %
    fp_orig=fopen('importazione_dato.txt','rt');
    % 
    % Lettura del file "per righe" (parametro 'delimiter' = '\n'
    % 
    while(~feof(fp_orig))
       c=textscan(fp_orig,'%s',1,'delimiter','\n');
    %    
    %    Conversione da cellarray a stringa
    %    
       a=c{1}{1};
    % 
    %    Estrazine della prima parola della stringa
    %    
       [str,res]=strtok(a);
    % 
    %    Assegnazine dei campi alla struttura "data"
    %    
       if(strcmp(str,'xtrf'))
          c=textscan(a,'%s%s%s%s%s%s');
          data.xtrf_1=str2double(char(c{3}));
          data.xtrf_1_mode=char(c{4});
          data.xtrf_2=str2double(char(c{5}));
          data.xtrf_2_mode=char(c{6});
       end
       if(strcmp(str,'Mach'))
          a=strrep(a,' e ','e');
          c=textscan(a,'%s%s%s%s%s%s%s%s%s');
          data.Mach=str2double(char(c{3}));
          data.Re=str2double(char(c{6}));
          data.Ncrit=str2double(char(c{9}));
       end
    %    
    %    assegnazione nomi variabili alla struttura "data"
    %    
       if(strcmp(str,'alpha'))
          c=textscan(a,'%s%s%s%s%s%s%s');
          for i=1:7
             data.var_name{i}=char(c{i});
          end
       end
    %    
    %    Identificazione termine delle righe di testo ed uscita dal loop per la
    %    loro lettura
    %    
       if(~isempty(str))
          if(strfind(str,'---'))
             break
          end
       end
    end
    % 
    % Lettura dei valori numerici (7 colonne
    % 
    n=textscan(fp_orig,'%f%f%f%f%f%f%f');
    % 
    % Assegnazione dei valori letti ai corrispondenti campi della struttura
    % "data"
    % 
    for i=1:7
       eval(['data.' char(data.var_name{i}) '=n{' num2str(i) '}(:);cls'])
    end
    % 
    % Conversione dell'output in una matrice
    % 
    M=[n{1}(:) n{2}(:) n{3}(:) n{4}(:) n{5}(:) n{6}(:) n{7}(:)];
    % 
    % Chiusura del file di input
    % 
    fclose(fp_orig);
    
    Hope this helps.
  • Re: Importazione dato

    Grazie mille ancora Ask_raf sei il mio salvatore
Devi accedere o registrarti per scrivere nel forum
7 risposte