Accedere a file di testo

di il
4 risposte

Accedere a file di testo

Salve, ho un problema.
Devo importare dati da un file .txt in Matlab.

Il file è formattato in questo modo:

15:00:00.000 7.0 ABABABABAB
16:00:00.000 7.6 ABABABABAB
17:00:00.000 6.9 ABABABABAB
18:00:00.000 6.8 ABABABABAB
19:00:00.000 6.9 ABABABABAB
20:00:00.000 0 ABABABABAB

Vorrei importare solo i valori del ph, quelli al centro.
Ho provato così:

file_name=fopen('ph_acquario.Atxt');
A=textscan(file_name,'%f %f %f ');
fclose(file_name);

pH=A{:,2};

Ho provato a considerare le altre due colonne come stringhe inserendo %s ma non funziona.
Poi eventualmente vado ad eliminare gli errori:

for j=1:length(pH)
if ph=0;
ph=NaN;
end

e plotto pH.

PS ho problemi con gli spazi tra i valori incollati. C'è un tab tra l'orario, il ph ed il nome dell'acquario

4 Risposte

  • Re: Accedere a file di testo

    Per leggere correttamente il file con la funzione "textscan", devi specificare il "formato".
    Nel caso dell'esempio che hai pubblicato:

    15:00:00.000 7.0 ABABABABAB

    il formato è '%s%f%s' perchè la stringa da leggere è formata da:

    15:00:00.000 che, pur essendo composta da "numeri" non è uno scalare e, quindi, si può considerare una strunga ==> %s
    7.0 uno scalare ==> %f
    ABABABABAB una stringa ==> %s

    Per trovare gli eventuali valori =0 (vedi punto nel quale riferisci di voler "correggere gli errori"), non è necessario un ciclo for.

    Puoi usare la funzione "find".

    pH(find(pH == 0))=NaN

    Hope this helps.
  • Re: Accedere a file di testo

    Funziona.. però ovviamente non posso plottare un vettore con valori interi e nan.. meglio eliminarli che ne dici?
  • Re: Accedere a file di testo

    Nella risposta ho sostituito i valori "0" con "NaN" perchè così avevi scritto tu nella domanda.

    Lo scopo dell'istruzione:

    pH(find(pH == 0))=NaN

    era solo quello di suggerirti una implementazione alternativa al "ciclo for" che avevi inserito nella domanda.

    In realtà è possibile plottare un vettore che contiene valori numerici e "NaN", semplicemente, MatLab, "ignora" i valori "NaN" e:

    - se hai scelto come "stile" del grafico di rappresentare solo i markers dei punti, i punti con valore "NaN" non verranno plottati
    - se hai scelto come "stile" del grafico, un linea, questa verrà interrotta nei punti con valore "NaN".

    Non so dirti se eliminare i punti sia la soluzione migliore.
    Dipende molto dal tipo di post-processing che devi fare dei dati e dallo scopo dell'analisi.

    Non mi sembra corretto, dal punti di vista dell'analisi dei risultati "cancellare" (nascondere) quelli che "non mi piacciono".

    Potrebbe essere utile tenere traccia dei valori "errati" (o "strani" ...) perchè da quelli si possono comunque estrarre delle informazioni o possono essere indice di qualche cosa che "non funziona" correttamente sul quale eventualmente intervenire.

    Hope this helps.
  • Re: Accedere a file di testo

    Grazie!
Devi accedere o registrarti per scrivere nel forum
4 risposte