Visualizzazione dei risultati da 1 a 10 su 10
  1. #1

    individuare valori più alti tra quelli acquisiti

    Buonasera,

    sto modificando un PDF inserendo del codice javascript; ho 20 valori numerici associati a venti valori alfanumerici es testo1= "t1" e numero1 = x (x è una variabile che cambia a seconda delle operazioni precedenti).

    adesso la mia struttura testo va da testo1...testo20 e anche la mia struttura numero numero1...numero20.

    vorrei confrontare i vari numeri nelle varie caselle e individuare i 4 più alti abbinati al loro identificativo testo.

    una volta individuati if x>80 {event.value = (x/80*100-100);}
    else {event.value = "";}

    è possibile?

    vi ringrazio anticipatamente per il vostro aiuto...
    sono giorni che ci provo ma non sto cavando un ragno dal buco

  2. #2
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,726
    Ciao, la questione non è così semplice, in linea di massima puoi usare la funzione Math.max() per recuperare il valore massimo. In tal caso, per recuperare i 4 valori massimi, si dovranno fare diversi passaggi.

    In alternativa si può utilizzare il metodo sort() che serve per ordinare i membri di un array; ovviamente in questo caso i tuoi valori vanno inseriti appunto dentro un array; dopo di che puoi usare il metodo slice() per recuperare gli ultimi 4 membri (che saranno i valori più alti).

    Per recuperare i testi abbinati, personalmente farei un array bidimensionale dove ogni membro dell'array principale non è altro che un array che contiene testo e numero. A quel punto si potrebbe riordinare questo array con sort().

    Per me è più semplice farlo che spiegarti come fare.
    Qui un semplice esempio:
    codice:
    var dati = [
       ['t1', 35]
      ,['t2', 6]
      ,['t3', 76]
      ,['t4', 87]
      ,['t5', 45]
      ,['t6', 23]
      ,['t7', 98]
      ,['t8', 76]
      ,['t9', 54]
      ,['t10', 23]
      ,['t11', 56]
      ,['t12', 54]
      ,['t13', 23]
      ,['t14', 12]
      ,['t15', 32]
      ,['t16', 34]
      ,['t17', 65]
      ,['t18', 256]
      ,['t19', 2]
      ,['t20', 3]
    ];
    
    dati.sort(function(a,b) { return a[1] - b[1]; });
    
    console.log(dati.slice(-4));
    In console sarà restituito un array dei relativi testi con i primi 4 numeri più alti.

    Chiaramente questo è giusto un esempio di una possibile soluzione, bisognerà poi capire come può essere integrato sul tuo elaborato; vedi un po' tu o fornisci maggiori indicazioni se ti serve ulteriore aiuto.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  3. #3
    Ciao KillerWorm,
    purtroppo non riesco a usare il tuo codice perchè i numeri all'interno nell'array non sono fissi ma letti da caselle di testo.
    potrei anche tralasciare la parte identificativa che posso risolvere dopo con dei confronti in un altra casella ma sembra che io non riesca a far funzionare le array con delle variabili invece che con valori fissi.

    mi servirebbe una cosa del genere:

    var CDP = getField("Testo6498").value;
    var TI1 = getField("Testo23").value;
    var TI2 = getField("Testo114").value;
    var TI3 = getField("Testo115").value;
    var TI4 = getField("Testo26").value;
    var TI5 = getField("Testo27").value;
    var TI6 = getField("Testo28").value;
    var TI7 = getField("Testo29").value;
    var TI8 = getField("Testo116").value;
    var TI9 = getField("Testo117").value;
    var TI10 = getField("Testo118").value;
    var TI11 = getField("Testo119").value;
    var TI12 = getField("Testo120").value;
    var TE1 = getField("Testo113").value;
    var TE2 = getField("Testo121").value;
    var TE3 = getField("Testo122").value;
    var TE5 = getField("Testo123").value;
    var TE6 = getField("Testo124").value;
    var TE7 = getField("Testo125").value;
    var TE8 = getField("Testo126").value;
    var TE9 = getField("Testo127").value;
    var TE10 = getField("Testo128").value;
    var dati = [
    [TI1]
    ,[TI2]
    ,[TI3]
    ,[TI4]
    ,[TI5]
    ,[TI6]
    ,[TI7]
    ,[TI8]
    ,[TI9]
    ,[TI10]
    ,[TI11]
    ,[TI12]
    ,[TE1]
    ,[TE2]
    ,[TE3]
    ,[TE5]
    ,[TE6]
    ,[TE7]
    ,[TE8]
    ,[TE9]
    ,[TE10]
    ];


    dati.sort(function(a,b) { return a[1] - b[1]; });


    console.log(dati.slice(-4));

  4. #4
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,726
    purtroppo non riesco a usare il tuo codice perchè i numeri all'interno nell'array non sono fissi ma letti da caselle di testo.
    E' irrilevante che siano fissi o meno, l'importante è che ricrei quell'array con quella struttura; nota che ho usato un array in cui ogni suo membro è a sua volta un array che ha due valori (il testo e il numero), nella funzione definita per il metodo sort() viene eseguito un ordinamento in base al secondo valore di ogni membro (cioè il numero), infatti l'indice [1] si riferisce proprio a quello, mentre l'array che hai definito tu non ha questo secondo valore, per questo non può funzionare.

    potrei anche tralasciare la parte identificativa che posso risolvere dopo con dei confronti in un altra casella
    Per "parte identificativa" intendi l'associazione testo-numero?
    Nell'esempio che ho postato infatti tu otterrai un array di 4 membri, ciascuno contenente testo e numero, quindi già stai ottenendo quello che avevi chiesto; per cui fammi capire, questa caratteristica ti serve o no?
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  5. #5
    mi serve ma devo mettere il numero in una casella e il nome in un altra e se non ho capito male questa li stampa insieme, o sbaglio?

  6. #6
    comunque o provato anche a riscriverla come mi dicevi tu ma non mi fa vedere niente sul campo

    var CDP = getField("Testo6498").value;
    var TI1 = getField("Testo23").value;
    var TI2 = getField("Testo114").value;
    var TI3 = getField("Testo115").value;
    var TI4 = getField("Testo26").value;
    var TI5 = getField("Testo27").value;
    var TI6 = getField("Testo28").value;
    var TI7 = getField("Testo29").value;
    var TI8 = getField("Testo116").value;
    var TI9 = getField("Testo117").value;
    var TI10 = getField("Testo118").value;
    var TI11 = getField("Testo119").value;
    var TI12 = getField("Testo120").value;
    var TE1 = getField("Testo113").value;
    var TE2 = getField("Testo121").value;
    var TE3 = getField("Testo122").value;
    var TE5 = getField("Testo123").value;
    var TE6 = getField("Testo124").value;
    var TE7 = getField("Testo125").value;
    var TE8 = getField("Testo126").value;
    var TE9 = getField("Testo127").value;
    var TE10 = getField("Testo128").value;
    var dati = [
    ["TI.1",TI1]
    ,["TI.2",TI2]
    ,["TI.3",TI3]
    ,["TI.4",TI4]
    ,["TI.5",TI5]
    ,["TI.6",TI6]
    ,["TI.7",TI7]
    ,["TI.8",TI8]
    ,["TI.9",TI9]
    ,["TI.10",TI10]
    ,["TI.11",TI11]
    ,["TI.12",TI12]
    ,["TE.1",TE1]
    ,["TE,2",TE2]
    ,["TE.3",TE3]
    ,["TE.5",TE5]
    ,["TE.6",TE6]
    ,["TE.7",TE7]
    ,["TE.8",TE8]
    ,["TE.9",TE9]
    ,["TE.10",TE10]
    ];




    dati.sort(function(a,b) { return a[1] - b[1]; });


    console.log(dati.slice(-4));

  7. #7
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,726
    Ripeto, quello è un semplice esempio che ti mostra il risultato in console; per poterlo applicare al tuo elaborato bisogna capire cosa vuoi farne esattamente di quei valori.

    Qual'è il campo di cui parli?

    I dati recuperati sono i 4 valori più alti e i 4 relativi testi, come hai chiesto:
    vorrei confrontare i vari numeri nelle varie caselle e individuare i 4 più alti abbinati al loro identificativo testo.
    Ora di quei dati puoi farne quello che vuoi.

    Personalmente non ho capito cosa hai chiesto in seguito; cos'è questa roba?
    una volta individuati if x>80 {event.value = (x/80*100-100);}
    else {event.value = "";}
    .
    Dove e come vorresti mostrare i dati recuperati?

    Come ho già scritto su:
    fornisci maggiori indicazioni se ti serve ulteriore aiuto
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  8. #8
    Cerco di spiegarmi meglio, io prendo i 4 valori più alti, e li colloco nei campi “Testo56”, “Testo57”, “Testo58”’, “Testo59” se questi sono inferiori ad 80 i relativi campi rimangono vuoti e così quelli relativi all’identificativo.
    Se il valore è superiore a 80 (ammettiamo 88) devo mostrare l’identificativo (ammettiamo TI.1) nell’apposito campo, e la percentuale di eccedenza da 80 (per l’appunto 88\80*100-100= 10%) nel relativo campo.

  9. #9
    Moderatore di CSS L'avatar di KillerWorm
    Registrato dal
    Apr 2004
    Messaggi
    5,726
    Bene, è già qualcosa in più.
    I campi che hai indicato sono quelli dove vanno i valori numerici, giusto?
    Però non hai indicato i campi dove vanno gli identificativi.

    Ad ogni modo prova una cosa del genere:
    codice:
    var dati = [
        ["TI.1",TI1]
       ,["TI.2",TI2]
       ,["TI.3",TI3]
       ,["TI.4",TI4]
       ,["TI.5",TI5]
       ,["TI.6",TI6]
       ,["TI.7",TI7]
       ,["TI.8",TI8]
       ,["TI.9",TI9]
       ,["TI.10",TI10]
       ,["TI.11",TI11]
       ,["TI.12",TI12]
       ,["TE.1",TE1]
       ,["TE,2",TE2]
       ,["TE.3",TE3]
       ,["TE.5",TE5]
       ,["TE.6",TE6]
       ,["TE.7",TE7]
       ,["TE.8",TE8]
       ,["TE.9",TE9]
       ,["TE.10",TE10]
    ];
    
    dati.sort(function(a,b) { return a[1] - b[1]; }); // ordino dal valore minore al maggiore
    dati = dati.slice(-4); // riduco agli ultimi 4
    
    for(var i in dati){ // ciclo i 4 valori
       var testo = dati[i][0]; // recupero il valore
       var valore = dati[i][1]; // recupero l'identificativo
       
       getField(['Testo56', 'Testo57', 'Testo58', 'Testo59'][i]).value = (valore>80 ? (valore/80*100-100) : ""); // scrivo il valore nel relativo campo
       getField(['Id56', 'Id57', 'Id58', 'Id59'][i]).value = (valore>80 ? testo : ""); // scrivo l'identificativo nell'apposito campo
    }
    .
    chiaramente dovrai sostituire opportunamente i nomi dei campi per gli identificativi.

    Ho messo qualche commento ma capisco che il codice non è di facile comprensione per un principiante, quindi se hai bisogno di chiarimenti chiedi pure.
    Installa Forum HTML.it Toolset per una fruizione ottimale del Forum

  10. #10
    funziona perfettamente!!!

    grazie mille KillerWorm.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.