Matlab (estrazione dati da file .xlsx)

di il
14 risposte

Matlab (estrazione dati da file .xlsx)

Salve a tutti. Sono nuovo su questo forum e ancora poco pratico con matlab, quindi mi scuso in anticipo per la poca esperienza e il linguaggio abbastanza "elementare" e vi sarei molto grato se poteste darmi una mano. In pratica ho un file .xlsx da cui dovrei riuscire a estrapolare in matlab solo alcune celle contenenti numeri associati a determinati parametri, e confrontare questi valori numerici con dei valori di riferimento inseriti in una matrice (sempre nel codice matlab) definendo, se possibile, anche delle soglie per valutare di quanto si discostano i valori estrapolati dall' xlsx da quelli di riferimento della matrice. Giusto a livello esplicatico, se alla colonna D4 nell'xlxs ho il valore 3,45 e il valore di riferimento è 5,76 devo riuscire a dire con matlab che il valore in quella cella è minore rispetto a quello di riferimento e così per tutte le altre celle. Come procedereste voi? Qual è il modo più semplice? Ringrazio chiunque possa aiutarmi

14 Risposte

  • Re: Matlab (estrazione dati da file .xlsx)

    Ciao anche io sono abbastanza nuovo del forum , allora per i file Excel esiste in matlab una funzione sia per leggere (xlsread) che per scrivere(xlswrite) e quindi quello che dici tu sarebbe anche semplice farlo il problema è che queste funzioni almeno nella mia versione trattano solo file con estensioni xls e non xlsx .
  • Re: Matlab (estrazione dati da file .xlsx)

    alessio83 ha scritto:


    ciao anche io sono abbastanza nuovo del forum , allora per i file Excel esiste in matlab una funzione sia per leggere (xlsread) che per scrivere(xlswrite) e quindi quello che dici tu sarebbe anche semplice farlo il problema è che queste funzioni almeno nella mia versione trattano solo file con estensioni xls e non xlsx .
    Innanzitutto ti ringrazio per la risposta In realtà ho la versione 2015 e ho visto che con xlsread legge praticamente la tabella excel anche in formato xlsx che viene riportata in matlab senza problemi. Poi come si può andare a prendere solo una cella specifica? Cioè per esempio mi interessa confrontare il valore della cella D4 con un valore presente in una matrice B fissa che creo stesso in matlab (per esempio il valore B(2,2) ) e riportare un testo del tipo "il valore della cella è superiore alla norma"....basta un semplice ciclo if? Mi sapresti aiutare in questo passaggio?
  • Re: Matlab (estrazione dati da file .xlsx)

    La funzione xlsread può riceve come argomenti il percorso del file xlsx (in questo caso) il foglio all'interno del file prendendo quindi tutte le celle o come serve a te soltanto un range di celle in questo modo:
    A=xlsread(percorso,'A2 :B2'); in questo modo recuperi l'intervallo che ti serve e viene inserito in una matrice dentro A, basta accedere all'elemento di tuo interesse per confrontarlo in un semplice blocco if
  • Re: Matlab (estrazione dati da file .xlsx)

    alessio83 ha scritto:


    La funzione xlsread può riceve come argomenti il percorso del file xlsx (in questo caso) il foglio all'interno del file prendendo quindi tutte le celle o come serve a te soltanto un range di celle in questo modo:
    A=xlsread(percorso,'A2 :B2'); in questo modo recuperi l'intervallo che ti serve e viene inserito in una matrice dentro A, basta accedere all'elemento di tuo interesse per confrontarlo in un semplice blocco if
    Ma il blocco if che creo può essere "proiettato" ad un file testo esterno a matlab per esempio? Mi spiego meglio: immagina che A sia la matrice contenente i valori che importo da excel e B sia la matrice coi valori di riferimento che ho creato, quindi ho per esempio il codice:
    A=xlsread (filename,'Q2:Q2') //immaginando che mi serva il valore in cella Q2 da confrontare con uno nella matrice B
    B=[...,...;...,...]
    if A>=B[1,1]
    disp ('il valore è nella norma')
    else
    disp ('errore')
    end;
    A questo punto come faccio a riportare l'output "il valore è nella norma" in un file testo/word esterno a matlab e non stesso in matlab? In pratica devo fare un gran numero di blocchi if e vorrei avere i risultati raccolti in un unico file testo insieme ad altri header testuali standard (per esempio "1)il valore di riferimento per quella determinata grandezza è... , 2)il valore ottenuto in excel è.... 3)il valore è nella norma" e così per tutti gli altri valori che ho in excel)...è possibile? Ho provato con printf ma credo che non sia il comando corretto per quel che mi serve Scusa se mi sono dilungato e grazie ancora tanto per il tuo aiuto
  • Re: Matlab (estrazione dati da file .xlsx)

    Ciao una volta fatto il controllo if basta creare un file txt e scrivere i risultati li dentro, la funzione che ti serve è proprio fprintf. Per prima cosa devi aprire il file o crearlo se non esiste (fopen) e poi vai a scriverci dentro
  • Re: Matlab (estrazione dati da file .xlsx)

    alessio83 ha scritto:


    Ciao una volta fatto il controllo if basta creare un file txt e scrivere i risultati li dentro, la funzione che ti serve è proprio fprintf. Per prima cosa devi aprire il file o crearlo se non esiste (fopen) e poi vai a scriverci dentro
    Ho creato il file txt ma quando uso il comando fopen mi restituisce sempre il valore -1 Ho seguito il costrutto "fileID = fopen(filename,permission)" usando 'wt' come permission, cioè:
    fid = fopen('esempio.txt','wt');
    fprintf(fid, 'testo\n');
    ma mi dà questo errore--> Invalid file identifier. Use fopen to generate a valid file identifier.
    E' come se non riconoscesse il file txt che ho creato. Da cosa può dipendere? Dalla locazione del file?
  • Re: Matlab (estrazione dati da file .xlsx)

    Stavo guardando prova a mettere solo w senza specificare t la sintassi sembra corretta
  • Re: Matlab (estrazione dati da file .xlsx)

    alessio83 ha scritto:


    Stavo guardando prova a mettere solo w senza specificare t la sintassi sembra corretta
    Nulla Ho provato con ogni tipo di permission ma mi dà sempre lo stesso errore! Però ho notato che se digito il comando senza permission (cioè: fileID = fopen('C:\Program Files\MATLAB\bin\esempio.txt')) il fileID ha un valore diverso da -1 e sembra lo legga, poi appena aggiungo una qualsiasi permission 'w' o 'wt' in fopen il valore passa a -1 e con fprintf dà errore! Da cosa può dipendere? I file testo su cui voglio scrivere dove devono stare? Possono essere vuoti? Li dovrei prima aprire? Ho fatto 3000 tentativi ma non riesco a venirne a capo
  • Re: Matlab (estrazione dati da file .xlsx)

    Fai una prova non aprirlo con w forse come condizione richiede l'esistenza del file , hai visto se comunque te lo crea il file?
  • Re: Matlab (estrazione dati da file .xlsx)

    alessio83 ha scritto:


    Fai una prova non aprirlo con w forse come condizione richiede l'esistenza del file , hai visto se comunque te lo crea il file?
    Ma quindi il file txt vuoto dovrei crearlo io prima e aggiungerlo nella cartella, oppure il comando fopen crea in automatico un file txt nella cartella di destinazione? Cmq ora cerco di essere più preciso. Ho creato io un file vuoto txt che ho chiamato "esempio" e l'ho copiata nela cartella bin di Matlab. Usando i comandi:
    fileID = fopen('esempio.txt');
    fprintf (fileID, 'testo');
    fclose (fileID);
    non mi dà errori e i valori del fileID riportati nella workspace aumentano progressivamente partendo da 3 (non ho capito il perchè onestamente), però nel file esempio.txt che ho creato non compare nulla ovviamente; poi appena aggiungo "w" per scrivere la parola 'testo' nel file, cioè:
    fileID = fopen('esempio.txt', 'w');
    fprintf(fileID, 'testo');
    nella workspace il file ID passa subito al valore -1 e riporta l'errore Error using fprintf. Invalid file identifier. Use fopen to generate a valid file identifier.
    E' indifferente la cartella di destinazione di questo file txt? Forse deve riconoscere il percorso per arrivare al file con altri comandi?
  • Re: Matlab (estrazione dati da file .xlsx)

    Penso che se metti w come esegui fopen lui vede che già esiste e ti ritorna errore
  • Re: Matlab (estrazione dati da file .xlsx)

    alessio83 ha scritto:


    Penso che se metti w come esegui fopen lui vede che già esiste e ti ritorna errore
    Ho provato anche a procedere senza un file text esistente ma non cambia appena digito fopen mi dà sempre un fid=-1 e non crea nulla! Una curiosità..se non volessi partire da un file già esistente, in quale cartella Matlab salverebbe poi il file txt che crea?
  • Re: Matlab (estrazione dati da file .xlsx)

    Se non specifichi la destinazione te lo salva nella cartella dove risiede il programma
  • Re: Matlab (estrazione dati da file .xlsx)

    Ciao a tutti, spero stiate bene!
    Ho un grosso problema: devo estrarre il primo sheet di 365*5=1825 files excel (ed ognuno di questi ne contengono una decina) e successivamente salvarli in una cartella sul desktop. sapete come aiutarmi?
    grazie
Devi accedere o registrarti per scrivere nel forum
14 risposte