Importazione file testo e numeri discontinui

di il
2 risposte

Importazione file testo e numeri discontinui

Ciao,
ho bisogno di importare un file di dati (.txt o .csv) in cui la prima riga è testo (preceduta da #) le seguenti 10.000 sono numeri poi ho un'altra riga di testo (preceduta da #) e altre 10.000 di numeri e la cosa si ripete per una terza volta.
Utilizzo importdata Input_Data = importdata(XXX.txt') e mi carica una structure array in cui nell'array cell ho la prima riga di testo mentre nella matrice ho le prime 10.000 righe di numeri (correttamente separati in 4 colonne).
Come posso caricare anche le successive senza dover riarrangiare "fuori" il file di input?
Grazie

2 Risposte

  • Re: Importazione file testo e numeri discontinui

    Se sei sicuro che la struttura del file di sia sempre la stessa:
    [*] riga con "#" da "saltare"
    [*] 10000 numeri
    ...

    Puoi usare la funzione "textscan" per leggere il file.

    Nell'esempio che segue il file viene letto ed i dati vengono assegnati sia ad un'unica matrice di output sia ad una struct nella quale ogni campo contiene i dati di una sezione de file.
    L'esempio è stato testato su un file con 10 righe di dati invece di 10000: sostituisci 10 con 10000 nella riga "C=textscan(fp,'%s',10,'delimiter','\n')".
    Se i dati si ripetono per più di 3 volte, modifica di conseguenza la definizione del ciclo "for".
    
    % Open the input file
    fp=fopen('dati.csv','rt');
    % Initialize the output matrix
    m1=[];
    % Loop over the input file sections
    for i=1:3
       % Read the "header" line (line with #)
       C=textscan(fp,'%s',1,'delimiter','\n')
       % Read the data of the current section
       C=textscan(fp,'%s',10,'delimiter','\n')
       % Assign the data to the output matrix
       m1=[m1;str2num(char(C{1}))]   
       % Store the data in a struct, a field for each section
       data_str.(['section_' num2str(i)])=str2num(char(C{1}));
    end
    % Close the input file
    fclose(fp);
    
  • Re: Importazione file testo e numeri discontinui

    Grazie! L'ho leggermente riadattato ma era quello che cercavo, grazie ancora!
Devi accedere o registrarti per scrivere nel forum
2 risposte