[MATLAB] Automatizzare caricamento dati

MadHarvey
Salve a tutti :D vi espongo subito il mio problema con la speranza che qualche anima pia mi aiuti :D
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 :smt039

Risposte
elgiovo
Non ho capito perché non dovrebbe andar bene il ciclo for, se ne sei aprire uno basta che lo fai in sequenza.

MadHarvey
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
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..)

elgiovo
Aspetta, non capisco bene come usi sprintf().
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().

MadHarvey
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?

elgiovo
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.

MadHarvey
SI si io il comando load lo so usare..ma solo per caricarne uno..uso questo in pratica
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

elgiovo
Ok, facciamo così:

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.

MadHarvey
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

elgiovo
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.

MadHarvey
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 :-D

Rispondi
Per rispondere a questa discussione devi prima effettuare il login.