[MATLAB] Automatizzare caricamento dati
Salve a tutti
vi espongo subito il mio problema con la speranza che qualche anima pia mi aiuti 
Ho a che fare con un programma che gestisce dei dati,in pratica dopo averli caricati si posso filtrare,rimuovere parti con problemi eccetera.I dati in questione sono delle strutture contenenti un certo numero di matrici.In pratica ho questa struttura,chiamiamola dataset,dentro di essa ho 5 matrici (non è importante quante matrici ho al suo interno).Il programma è stato creato per lavorare con un dataset alla volta che viene caricato,(si elabora tutte le matrici al suo interno e restituisce i risultati che si vogliono) adesso io avendo a che fare con piu dataset dovrei automatizzare il tutto e far si che il programma lavori con più dataset.
Cioè in pratica il programma anzichè chiedermi con che dataset voler lavorare,li deve prendere in automatico tutti. Come dovrei fare?? Io ho pensato a un ciclo for che me li carica tutti ma non saprei comunque come aprirli..
Spero di essere stato chiaro e spero in un vostro aiuto...grazieee


Ho a che fare con un programma che gestisce dei dati,in pratica dopo averli caricati si posso filtrare,rimuovere parti con problemi eccetera.I dati in questione sono delle strutture contenenti un certo numero di matrici.In pratica ho questa struttura,chiamiamola dataset,dentro di essa ho 5 matrici (non è importante quante matrici ho al suo interno).Il programma è stato creato per lavorare con un dataset alla volta che viene caricato,(si elabora tutte le matrici al suo interno e restituisce i risultati che si vogliono) adesso io avendo a che fare con piu dataset dovrei automatizzare il tutto e far si che il programma lavori con più dataset.
Cioè in pratica il programma anzichè chiedermi con che dataset voler lavorare,li deve prendere in automatico tutti. Come dovrei fare?? Io ho pensato a un ciclo for che me li carica tutti ma non saprei comunque come aprirli..
Spero di essere stato chiaro e spero in un vostro aiuto...grazieee

Risposte
Non ho capito perché non dovrebbe andar bene il ciclo for, se ne sei aprire uno basta che lo fai in sequenza.
Grazie per l'aiuto intanto.Allora si il ciclo for va bene,intendevo dire che forse sono io a non indicizzare bene..io uso questo codice
poi c'è un blocco operativo e infine i dati li deve restituire di nuovo separati..(dataset1,dataset2 e così via..)
for k = 1:numfiles myfilename = sprintf('dataset', k); mydata{k} = importdata(myfilename); end
poi c'è un blocco operativo e infine i dati li deve restituire di nuovo separati..(dataset1,dataset2 e così via..)
Aspetta, non capisco bene come usi sprintf().
Secondo me invece dovresti usare una cosa del tipo
Però non ho capito se poi i tuoi dataset1, dataset2 sono dei files di testo da importare.
Se è così allora ok, puoi usare importdata().
Secondo me invece dovresti usare una cosa del tipo
myfilename = strcat('dataset',num2str(k))
Però non ho capito se poi i tuoi dataset1, dataset2 sono dei files di testo da importare.
Se è così allora ok, puoi usare importdata().
scusa effettivamente non ho precisato..comunque si tratta di file .mat
Allora i ho questo: In una cartella ho 4 file .mat, chiamiamoli dataset_1.mat,dataset_2.mat,dataset_3.mat e dataset_4.mat
Il programma originale prende un dataset alla volta,lo elabora e restituisce il dataset modificato tipo resdataset_1.mat
Io devo fare in modo che vengano presi tutti e 4,vengono elaborati e restituiti sempre divisi.Intanto dovrei caricarli correttamente e poi magari penso al salvataggio.Effettivamente dentro il ciclo non ho messo l'estensione del file ma comunque mi da errore lo stesso.QUesto codice che hai postato tu lo devo mettere al posto di fprint giusto?
Allora i ho questo: In una cartella ho 4 file .mat, chiamiamoli dataset_1.mat,dataset_2.mat,dataset_3.mat e dataset_4.mat
Il programma originale prende un dataset alla volta,lo elabora e restituisce il dataset modificato tipo resdataset_1.mat
Io devo fare in modo che vengano presi tutti e 4,vengono elaborati e restituiti sempre divisi.Intanto dovrei caricarli correttamente e poi magari penso al salvataggio.Effettivamente dentro il ciclo non ho messo l'estensione del file ma comunque mi da errore lo stesso.QUesto codice che hai postato tu lo devo mettere al posto di fprint giusto?
Se i file che hai sono di tipo .mat allora il discorso è diverso, ti conviene usare il comando load().
Ti invito a guardare questa pagina che spiega tutto il necessario.
Ti invito a guardare questa pagina che spiega tutto il necessario.
SI si io il comando load lo so usare..ma solo per caricarne uno..uso questo in pratica
in questo modo ne carico uno..per esempio dataset_1
se uso quel ciclo for in realtà non li carica tutti quelli presenti in quella cartella
struttura = load ('percorso file','nomefile_',num2str(dataset))
in questo modo ne carico uno..per esempio dataset_1
se uso quel ciclo for in realtà non li carica tutti quelli presenti in quella cartella
Ok, facciamo così:
se hai, per dire, 3 file, di nome dataset_1.mat, dataset_2.mat, dataset_3.mat:
Ora nella tua cartella avrai anche 3 ulteriori file mat, di nome dataset_1_elab.mat, dataset_2_elab.mat e dataset_3_elab.mat che puoi comodamente riusare con il comando load.
se hai, per dire, 3 file, di nome dataset_1.mat, dataset_2.mat, dataset_3.mat:
for i = 1:3 dataset = load(strcat('dataset_',num2str(i),'.mat') ) ..... % quello che facevi prima con un solo dataset save(strcat('dataset_',num2str(i),'_elab.mat'),dataset) % ho assunto che dataset, la variabile che assegni all'inizio di ogni loop, % sia anche la variabile che salvi in uscita dopo opportune modifiche. % se è un'altra la variabile che vuoi in uscita mettici quella come secondo % argomento di save(). end
Ora nella tua cartella avrai anche 3 ulteriori file mat, di nome dataset_1_elab.mat, dataset_2_elab.mat e dataset_3_elab.mat che puoi comodamente riusare con il comando load.
ok ho provato ma fa la stessa cosa che faceva prima ossia non carica tutti i file ma va a prenderne solo uno,il primo..per altro deve chiamarsi dataset_1 per forza.
Se per esempio ho tre file chiamati dataset_3,dataset_4,dataset_5 non funziona piu il ciclo perche se lo metto for i = 1:3 non sto richiamando il numero di file ma l indice che quindi non è esatto
Se per esempio ho tre file chiamati dataset_3,dataset_4,dataset_5 non funziona piu il ciclo perche se lo metto for i = 1:3 non sto richiamando il numero di file ma l indice che quindi non è esatto
Boh, ascolta, a me sembra che non ti sforzi molto però...
Se i=1:3 e tu hai dataset_3,dataset_4,dataset_5 ovvio che non funziona... dovrai mettere i=3:5
Insomma, vedi te, in base alle tue esigenze, che io, non essendo te, non posso conoscere.
Il mio era solo un esempio banale che serviva per indirizzarti.
Se i=1:3 e tu hai dataset_3,dataset_4,dataset_5 ovvio che non funziona... dovrai mettere i=3:5
Insomma, vedi te, in base alle tue esigenze, che io, non essendo te, non posso conoscere.
Il mio era solo un esempio banale che serviva per indirizzarti.
si c ero arrivato pure io che quello è un indice..purtroppo non ho molta dimestichezza con la programmazione quindi alcune cose non le do subito per scontate.Comunque vabbè adesso mi metto un po a capire come poter fare..Grazie comunque
