Newsgroup: it.comp.lang.javascript
Titolo: Per Pippopd... tabella riassuntiva dei 60 file esterni punteggio !!

Sono ancora quà .
Ho generato dei file ( sono 60 ) tramite :
var fileRisultati="c:\\m1.txt";
..........
fso = new ActiveXObject("Scripting.FileSystemObject");
  (fso.FileExists(fileRisultati))? a = fso.OpenTextFile(fileRisultati,8,
false):a = fso.CreateTextFile(fileRisultati, true);
  a.WriteLine(nome+';'+total);
  a.Close();
............
Essi contengono il nome ed il punteggio raggiunto (total) dai vari solutori
(nome) relativamente a 60 "quiz".
Ora vorrei fare una tabella che mostri per tutti i 60 file, il contenuto dei
punteggi relativi allo stesso nome e che mi faccia il totale ordinando in
base a quest'ultimo i migliori risultati complessivi.
Non ho assolutamente idea di come si faccia !
Grazie
Marco

 ha scritto nel messaggio
news:93qo74$vv1$1...@lacerta.tiscalinet.it...

Perche' hai fatto 60 file? In questo modo devi aprirli tutti ed estrarre
da ognuno il record che ti interessa.
Mi sembra preferibile inserire tutto in un file unico basta aggiungere
ad ogni record il riferimento al quiz e potrai fare qualsiasi estrazione
in modo piu' semplice.
Comunque, con la struttura da te indicata il codice seguente, una
piccola modifica di quello che gia' usi,  estrae tutti i risultati di un
utente, li ordina secondo il risultato e riporta il totale.
Saluti, Paolo
------------------
<script language="javascript">
function ris(){
 nome=prompt('Per visualizzare il tuo risultato complessivo\nDigita il
tuo nome','');
 fso = new ActiveXObject("Scripting.FileSystemObject");
 risultati= new Array;
 totale=0;
 for (i=1;i<=60;i++){
  fileRisultati="c:\\M"+i+".txt";
   if (fso.FileExists(fileRisultati)) {
   a =fso.OpenTextFile(fileRisultati,1, false);
   r =  a.ReadAll();
   a.Close();
   while (r.length>0){
    var risu=r.substr(0,r.indexOf('\n')-1);
    var indice=risu.substr(risu.indexOf(';')+1);
    if (indice<100) indice=(indice<10)?'00'+indice:'0'+indice;
    if (risu.indexOf(nome)>=0){
     risultati[i]= new
Array(indice,risu.substr(risu.indexOf(';')+1),risu.substr(0,risu.indexOf
(';')),i);
     totale+=parseInt(risultati[i][1]);
    }
    r=r.substr(r.indexOf('\n')+1);
   }
  }
 }
 risultati.sort();
 testo='';
 testo+='<html><head><title>Risultati di '+nome+'</title></head><body
bgColor="#00bfff">'
 testo+='<table border="0"><tr><td colspan="2">Risultati di
'+nome+'</td></tr>'
 testo+='<tr><td>quiz</td><td>risultato</td></tr>'
 for (i=risultati.length-1;i>=0;i--){
  if
(risultati[i])testo+='<tr><td>'+risultati[i][3]+'</td><td>'+risultati[i]
[1]+'</td></tr>';
 }
 testo+='<tr><td>Totale:</td><td>'+totale+'</td></tr>'
 testo+='</table>'
 testo+='</body></html>'
aa=window.open('','newWin','toolbar=0,location=0,directories=0,status=0,
menubar=0,scrollbars=1,resizable=0,copyhistory=0,width=200,height=300,sc
reenX=10,screenY=10,top=10,left=10');
 aa.document.write(testo);
 aa.document.close();
}
ris();
// -->
</SCRIPT>
-------------------

Grande Paolo !!
E' esattamente quello che volevo fare ma con due problemi!!
Ho notato che se in uno dei file un nome compare due volte con due punteggi
diversi ( il che č giusto che sia perchč un singolo utente puň fare diversi
tentativi ) nello score del tabellone complessivo mi segnala "giustamente"
il punteggio piů alto ottenuto nel singolo test ma poi nel totale somma
tutti e due i punteggi e non solo il migliore , se invece i tentativi di uno
stesso solutore sono piů di due in uno stesso file, mi si inchioda tutto.
Secondo problema ....tu mi desti modo di rendere utilizzabile il tutto anche
con NN4.x tramite
if (document.layers) {
netscape.security.PrivilegeManager.enablePrivilege('UniversalFileAccess');
Io ho provato a ficcarlo in mezzo allo script che mi hai dato ma credo di
aver fatto un po di casino...con la variabile r1
function ris(){
 nome=prompt('Per visualizzare il tabellone con il risultato dei tuoi
test\nDigita iltuo nome','');
if (document.layers) {
netscape.security.PrivilegeManager.enablePrivilege('UniversalFileAccess');
  r1 = new java.io.BufferedReader(new java.io.FileReader(fileRisultati));
 } else {
  fso = new ActiveXObject("Scripting.FileSystemObject");
  if (fso.FileExists(fileRisultati)) {
   r1 =fso.OpenTextFile(fileRisultati,1, false);
   r =  r1.ReadAll();
   r=r.length;
   r1 =fso.OpenTextFile(fileRisultati,1, false);
  }
 }
 risultati= new Array;
 totale=0;
 for (i=1;i<=60;i++){
  fileRisultati="c:\\m"+i+".txt";
   if (fso.FileExists(fileRisultati)) {
   a =fso.OpenTextFile(fileRisultati,1, false);
   r =  a.ReadAll();
   a.Close();
   while (r.length>0){
    var risu=r.substr(0,r.indexOf('\n')-1);
    var indice=risu.substr(risu.indexOf(';')+1);
    if (indice<100) indice=(indice<10)?'00'+indice:'0'+indice;
    if (risu.indexOf(nome)>=0){
     risultati[i]= new
Array(indice,risu.substr(risu.indexOf(';')+1),risu.substr(0,risu.indexOf(';'
)),i);
     totale+=parseInt(risultati[i][1]);
    }
    r=r.substr(r.indexOf('\n')+1);
   }
  }
 }
 risultati.sort();
 testo='';
 testo+='<html><head><title>Risultati di
'+nome+'</title></head><bodybgColor="#00bfff">'
 testo+='<table border="0"><tr><td colspan="2">Risultati di
'+nome+'</td></tr>'
 testo+='<tr><td>n°quiz</td><td>risultato</td></tr>'
 for (i=risultati.length-1;i>=0;i--){
  if
(risultati[i])testo+='<tr><td>'+risultati[i][3]+'</td><td>'+risultati[i][1]+
'</td></tr>';
 }
 testo+='<tr><td>Totale:</td><td>'+totale+'</td></tr>'
 testo+='</table>'
 testo+='</body></html>'
aa=window.open('','newWin','toolbar=0,location=0,directories=0,status=0,menu
bar=0,scrollbars=1,resizable=0,copyhistory=0,width=200,height=300,screenX=15
0,screenY=150,top=10,left=10');
 aa.document.write(testo);
 aa.document.close();
}
ris();
Grazie
Marco!!

 aver fatto un po di casino...con la variabile r1
[]
Prova se funziona, altrimenti sappimi dire in modo specifico gli errori
che riporta IE o NS.
Saluti, Paolo
--------------------
<SCRIPT LANGUAGE=javascript>
<!--
r=10000;
r1=null;
function ris(){
 nome=prompt('Per visualizzare il risultato complessivo\nDigita il tuo
nome','');
// nome='pippopd'
 if(document.all) fso = new ActiveXObject("Scripting.FileSystemObject");
 risultati= new Array;
 totale=0;
 for (i=1;i<=60;i++){
  fileRisultati="c:\\M"+i+".txt";
  if (document.layers) {
netscape.security.PrivilegeManager.enablePrivilege('UniversalFileAccess'
);
   if (!java.io.File(fileRisultati).exists())continue
   r1 = new java.io.BufferedReader(new
java.io.FileReader(fileRisultati));
  } else if (document.all) {
   if (fso.FileExists(fileRisultati)) {
    r1 =fso.OpenTextFile(fileRisultati,1, false);
    r =  r1.ReadAll();
    r=r.length;
    r1 =fso.OpenTextFile(fileRisultati,1, false);
   } else continue
  } else {return}
  linea=null;
  while (r>2 && (linea=r1.readLine())!=null){
   risu=(''+linea.toString()).split(';');
   if (risu[0]==nome) {
    var indice=parseInt(risu[1]);
    if (indice<100) indice=(indice<10)?'00'+indice:'0'+indice;
    if (risultati[i]) {
     if (parseInt(risultati[i][1])<parseInt(risu[1])){
      totale-=parseInt(risultati[i][1]);
      risultati[i]= new Array(indice,risu[1],risu[0],i);
      totale+=parseInt(risultati[i][1]);
     }
    } else {
     risultati[i]= new Array(indice,risu[1],risu[0],i);
     totale+=parseInt(risultati[i][1]);
    }
   }
   r-=(''+linea.toString()).length+2
  }
  if (document.all)r1.Close();
 }
 risultati.sort();
 testo='';
 testo+='<html><head><title>Risultati di '+nome+'</title></head><body
bgColor="#00bfff">'
 testo+='<table border="0"><tr><td colspan="2">Risultati di
'+nome+'</td></tr>'
 testo+='<tr><td>quiz</td><td>risultato</td></tr>'
 for (i=risultati.length-1;i>=0;i--){
  if
(risultati[i])testo+='<tr><td>'+risultati[i][3]+'</td><td>'+risultati[i]
[1]+'</td></tr>';
 }
 testo+='<tr><td>Totale:</td><td>'+totale+'</td></tr>'
 testo+='</table>'
 testo+='</body></html>'
aa=window.open('','newWin','toolbar=0,location=0,directories=0,status=0,
menubar=0,scrollbars=1,resizable=0,copyhistory=0,width=200,height=300,sc
reenX=10,screenY=10,top=10,left=10');
 aa.document.write(testo);
 aa.document.close();
}
ris();
// -->
</SCRIPT>
--------------------

Alla grande Paolo !!
Sia IE che NN4.x.
Ho voluto mantenere i 60 file separati da quello che sarà il "tabellone"
riepilogativo perchè cosi posso controllare quanti tentativi ha fatto il
singolo allievo sulla serie di test singola pur mantenendo la classifica
generale basata sul miglior risultato.
Fatto girare su un PC di una scuola l'insegnante/istruttore può vedere non
solo il risultato assoluto ma anche la storia dei progressi , se tengo i
file separati mi sembra che sia piu chiaro che un unico file ....un guru del
Newsgroup non avrebbe difficoltà ad interpretare una tabella complessa ma io
ho spesso a che fare con gli insegnanti di scuola elementare....sono duro io
ma loro..........
Grazie ancora
Marco