Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //CSV di test utilizzati
- //
- //roma.csv
- //Data,mercurio,cromo
- //2005/5/12,56,22
- //2002/8/25,2,300
- //2011/1/1,30,6
- //
- //milano.csv
- //Data,cadmio
- //2001/5/2,33
- //2004/3/30,3
- //2014/2/5,2
- //
- //funzione che esegue la chiamata asincrona, callbacks per inserire filtri
- function multiCsv(selString, callback) {
- var results = [];
- var error = "";
- var files = [];
- //ciclo per trovare path file csv
- for (var i = 0; i < selString.length -1; i++) {
- if (i%2 !== 0) {
- cittaSelezionata = selString[i-1].replace("-",".");
- var path = location.origin+"/CSV/"+cittaSelezionata+".csv";
- //compongo array con path csv
- files.push(path);
- }
- }
- //conto quanti file sono
- var filesLength = (files || []).length;
- var callbackInvoked = false;
- //ciclo tra i file
- for (var i = 0; i < filesLength; i++) {
- //definisco funzione anonima per ciclare
- (function(url) {
- //apro file
- d3.csv(url, function(data) {
- if (data === null) {
- error += "Error retrieving \"" + url + "\"\n";
- } else {
- //inserisco i dati nello stile di nvd3 poi inserisco chiave e tolgo campi in eccesso
- results.push({values: data , key: NaN});
- }
- // all files retrieved or an error occurred
- if (!callbackInvoked && (error || results.length === filesLength)) {
- if (error) {
- callback(error, null);
- } else {
- callback(null, d3.merge(results));
- }
- callbackInvoked = true;
- }
- });
- //definisco argomenti per eseguire funzione
- })(files[i]);
- }
- }
- //funzione per filtrare i dati dentro la chimata asincrona
- function filterData(results, selString) {
- var chiavi = [];
- var sostanze = [];
- var maxYindex = 0;
- //creo array ordinati di chiavi e sostanze
- for (var i = 0; i < selString.length -1; i++) {
- if (i%2 !== 0) {
- cittaSelezionata = selString[i-1].replace("-",".");
- sostanzaSelezionata = selString[i];
- chiave = cittaSelezionata + "#" + sostanzaSelezionata;
- chiavi.push(chiave);
- sostanze.push(sostanzaSelezionata);
- }
- }
- //ciclo sopra i dati in uscita dai file
- for (var i = 0; i < results.length; i++) {
- //assegno la chiave che non ho inserito prima
- results[i].key = chiavi[i];
- var riferimento = 0;
- //array temporaneo per salvare oggetti {x,y}
- var tmpA = [];
- //ciclo attraverso i valori
- for (var c = 0; c < results[i].values.length; c++) {
- //oggetto temporaneo per salvare x e y
- tmpO = new Object();
- // data parsata
- tmpO.x = d3.time.format("%Y/%m/%d").parse(results[i].values[c].Data).getTime();
- // sostanza inserita
- tmpO.y = parseInt(results[i].values[c][sostanze[i]]);
- //controllo per ripulire i doppioni di date
- if(tmpO.x > riferimento){
- //controllo per ripulire tutti i numeri con "<" davanti, se c'è stampo 0
- if(!isNaN(tmpO.y)){
- //salvo il valore più alto in assoluto per poi fissare l'asse y nel grafico principale
- if (tmpO.y > maxYindex) maxYindex = tmpO.y;
- }else{
- tmpO.y = 0;
- }
- // ricreo oggetto con solo i dati che mi servono
- tmpA.push(tmpO);
- }
- //assegno nuovo riferimento
- riferimento = tmpO.x;
- }
- //sovrascrivo porzione di oggetto con nuovo array
- results[i].values = tmpA;
- }
- //ritorno il nuovo oggetto e l'indice massimo
- return [results, maxYindex];
- }
- // funzione per simulare checkbox
- function aggiungiElemento() {
- return "roma#mercurio#milano#cadmio#roma#cromo#";
- }
- var selString = aggiungiElemento().split("#");
- multiCsv(selString, function (err, results) {
- if (err) {
- alert(err);
- return;
- }
- //ATTENZIONE
- //eventuale altro codice va eseguito qui dentro poichè il caricamento è asincrono
- //e quindi il codice fuori da questa funzione viene eseguito dopo che ha finito di caricare i CSV
- [results, maxYindex] = filterData(results, selString);
- console.log(results);
- console.log(maxYindex);
- });
Advertisement
Add Comment
Please, Sign In to add comment