Newsgroup: it.comp.lang.javascript
Titolo: numeri con lo zero davanti

ciao
Sono un programmatore moooolto junior ed ho bisogno di un aiuto...
il mio problema e' il seguente:
devo far stapare a schermo per un numero
"n" di volte delle coppie di numeri sequenziali "dir" e "imm" in questo
modo:
(dir)01 , (imm)01
(dir)01 , (imm)02
(dir)01 , (imm)03
(dir)01 ,
(imm)04
...
(dir)02 , (imm)01
(dir)02 , (imm)02
(dir)02 , (imm)03
(dir)02 , (imm)04
...
(dir)03 , (imm)01
(dir)03 , (imm)02
(dir)03 ,
(imm)03
(dir)03 , (imm)04
...
queste coppie di numeri saranno poi
concatenate ad una stringa html (document.write) in luogo da generare
dinamicamente degli URLs dove 'dir' e' la directory ed 'imm' il file (nel
mio caso delle immagini).
ho cercato e trovato ad opera di ZERO (se non
sbaglio) su questo NG un codice molto utile per aggiungere lo zero
[
http://groups.google.it/groups?hl=it&selm=8pa9h1%243as%241%40fe1.cs.interbusiness.it&rnum=2
]
in una sequenza di numeri da 1 a 9, ora ho trattato quel codice in questo
modo (rozzo e primitivo):
d=1; 
i=1;
(d<10) ? '0'+d : d; /*il codice
in questione: aggiunge lo zero nei numeri da uno a nove*/
(i<10) ? '0'+i :
i;
/*ecco... ma non ci sarebbe un modo per salvare una variabile sola (i o
d)
in modo da riutilizzarla per tutti e due i valori (dir e imm)?*/
for(dir=d;dir<20;dir++)
for(imm=i;imm<20;imm++)
document.write(dir+"|"+imm+"<br>");
in questo modo funziona... solo che
stampa i numeri senza lo zero iniziale... ho provato a tradurre il tutto in
un ciclo 'while':
i=1;
d=1;
dir=(d<10) ? '0'+d : d;
while(i<20){
imm=(i<10) ? '0'+i : i;
i++;
document.write(dir+"~"+imm+"|");
}
ma
ovviamente stampa la serie di numeri una sola volta... forse dovrei
incorporare questo ciclo in un altro, per cui finito un 'blocco' di codice
passa ad un altro... voi come risolvereste questo problema?
Spero di
essermi espresso in modo chiaro e comprensibile, ringrazio anticipatamente
quanti vorranno darmi una mano, inoltre se qualcuno ha da consigliare un
testo o altra risorsa di *matematica* orientata alla programmazione
(probabilmente questo mio problema ha gia' un nome e molteplici
soluzioni...) sarei riconoscente se volesse indicarmelo.
ciao e grazie!
orso
--------------------------------
Inviato via 
http://usenet.iol.it

 Spero di essermi espresso in modo chiaro e comprensibile
In effetti non del tutto. Ti chiedo spiegazioni per poterti aiutare
efficacemente.
- dir (nome cartella) e imm (nome immagine) sono due numeri da 1 a 19?
- nella cartella "01" ci sono le immagini "01","02", ... , "19"?
Fammi un esempio degli url completi che vuoi generare.
Ciao

Fammi un esempio degli url
completi che vuoi generare.
Gli URL sono solo delle stringhe che
aggiungo, il punto e' semplicemente questo:
//d=1;
//i=1;
//for(dir=d;dir<20;dir++)
//for(imm=i;imm<20;imm++)
//if(d<10){
//document.write('0'+dir+"|"+'0'+imm+"<br>");
//}   
ecco la stampa a
schermo:
01|01
01|02
01|03
01|04
...
02|01
02|02
02|03
02|04
...
03|01
03|02
03|03
03|04
...
e fin qui va bene... i problemi
cominciano dopo il '9':
010|01
010|02
010|03
010|04
...
019|010
019|011
019|012
019|013
019|014
...
in definitiva dovrei generare
questa sequenza di numeri con lo zero davanti solo per i numeri da 1 a 9,
sia per 'dir' che per 'imm'.
ho provato
//if(d<10){
//document.write('0'+dir+"|"+'0'+imm+"<br>");
//}
//else
//{
//document.write(dir+"|"+imm+"<br>");
//}   
ovvero: SE 'd' e' minore
di 10, aggiungi '0' a dir, OPPURE non aggiungere nulla...
il
ragionamento mi sembra corretto ma non funziona, come se l'ELSE non lo
leggesse neppure...
Se lanci il codice che ho messo all'inizio verra'
fuori una sequenza di coppie di numeri, devo fare in modo che lo '0' non
venga stampato davanti ai numeri uguali e maggiori di 10.
Credo si
tratti di un 'problema' di tipo aritmetico, purtroppo non ho la conoscenza
necessaria a descrivertelo in un modo piu' "proprio".
ciao e grazie
=)


 necessaria a descrivertelo in un modo piu' "proprio".
Non č sicuramente un problema aritmetico, comunque il risultato a video di
quello che volevi lo ottieni cosě:
var str="";
for(var i=1;i<20;i++)
    for(var i2=1;i2<20;i2++)
        str+=(i<10?"0"+i:i)+"|"+(i2<10?"0"+i2:i2)+"<br>";
document.write(str);
Non č detto che sia questa la strada migliore, visto che il problema lo
ritengo logico e non so che cosa volevi fare esattamente.
Ciao

Ciao


Il 02
Apr 2002, 16:34, "Andrea Scartabelli"
Caro Andrea (o chiunque altro
possa esserne interessato), il tuo script va benissimo [(i<10?"0"+i:i)],
solo che mi si e' presentato un altro problema...
nel caso mi sia
necessario generare, ad esempio, una sequenza di numeri da 001 a 350,
(dipende dal numero di immagini o files presenti nella directory) come
dovrebbe comportarsi lo script? 
ho provato istintivamente:
(i2<10?"00"+i2:i2,i2>10?"0"+i2:i2) 
ma mi rendo conto da solo che non fa
molto senso... come faccio a 'dire' as 'i' che se e' inferiore a 10, deve
aggiungersi DUE zeri, mentre se e' compreso tra >10 e <100 deve aggiungersi
uno '0' solo?
Ma non esiste una qualche funzione gia' definita? sono
ilprimo ad avere questa necessita' di numeri interi con lo '0' davanti?
Lo '0' mi e' necessario in quanto se non salvo i files con un numero
progressivo e lo 0 davanti, il file "1" inisce accanto al file "10", il "2"
al "20" etc. etc...
grazie ancora se vorrai aiutarmi.
ciao
orso
=)


Il 02 Apr 2002, 18:57, 
anic...@hotmail.com
 (orso) ha scritto: 
Ops...
ecco il codice completo...
//var hlin="<a href='";
//var
hurl="
http://www.ilmiosito.com/imieidisegni/
";
//var hima=".jpg'
target='_blank'><img src='";
//var hclo=".jpg'></a>";
//var str="";
//for(var i=1;i<11;i++)
//for(var i2=1;i2<31;i2++)
//str+=hlin+hurl+(i<10?"0"+i:i)+"/"+
//(i2<10?"00"+i2:i2,i2<100?"0"+i2:i2)
ecco il codice che non funziona! 
//+hima+hurl+(i<10?"0"+i:i)+"/"+
//(i2<10?"00"+i2:i2,i2<100?"0"+i2:i2)+hclo;
//document.write(str);
Il
codice di Andrea: 
(i<10?"0"+i:i)
Il codice mio che ovviamente non
funziona:
(i2<10?"00"+i2:i2,i2<100?"0"+i2:i2)
E' possibile in un codice
come questo definire piu' di una condizione?
ovvero SE 'i2' e' minore di
dieci aggiungi tot zeri (2), MA SE e' maggiore di 10 MA minore di 100,
aggiungi tot zeri meno uno (1).
Spero di essere stato chiaro, anche se
ho paura di no...
Ringrazio chiunque vorra' o sapra' darmi una mano!


 dovrebbe comportarsi lo script?
La condizione potrebbe cambiare cosě:
(i2<10?"00"+i2:i2<100?"0"+i2:i2)
solo che 350*19=6650 cicli ... non č propriamente prestante ...
Due o tre strade per non fare tutti questi cicli le ho in testa, ma sei poi
sicuro di avere 350 files per ogni cartella? E di voler stampare a video
tutta quella pappardella? Non ti converrebbe gestire la cosa lato server?
Prova a spiegare bene il tuo problema (non relativo allo script, ma a quello
che vuoi realizzare), con i dovuti parametri del caso (immagini, cartelle,
quante, dove, come, cosa, con chi e perché)  e potremo esserti sicuramente
piů utili.
A domani, ormai, che il ritorno in ufficio l'ho fatto fin troppo lungo...

piů utili.
Ok.
Devo creare delle immagini (con Corel), salvarle in
"batch" (Corel consente di automatizzare certe funzionalita' con VBA, ma
questo e' un altro discorso)con un numero progressivo, in una certa
directory;
//
http://www.miosito.it/galleria/01/01.jpg
//
http://www.miosito.it/galleria/01/02.jpg
come potrebbe essere:
//
http://www.miosito.it/galleria/01/002.jpg
A quel punto, impostando
l'URL di partenza come variabile
//
http://www.miosito.it/galleria/
recupero le immagini e le stampo con lo script che mi hai dato tu.
una
volta creato lo script, posso decidere di passare la variabile URL con un
FORM cosi' come stampare assieme alle immagini un altro Form per
selezionarle, raccogliere le immagini selezionate come argomenti ed in un
altra pagina visualizzarle.
E' un po' quello che fa un programma come
ACDSEE, solo che vorrei farlo da me.
Il codice che mi hai dato e' molto
utile ed in questa fase mi interessa capire piu' che altro "come funziona",
infatti me lo studiero' per benino... a proposito, questo tipo di
assegnazione ha un nome? e' un tipo di operazione specifica?
Non avendo
studi ne' di matematica ne' di logica devo procedere a piccoli passi...
meno male che esiste questo NG e ci siete voi! =)
ancora grazie!
ciao
orso


(i2<10?"00"+i2:i2<100?"0"+i2:i2)
Funziona
perfettamente! ti devo una birra!!
Solo che ho un altro problema... il
document.write lo metto nel BODY, e mi aspettavo che una volta elaborato
stampasse la stringa, solo che se vado a vedere il codice della pagina in
realta' non ha stampato... come se si tenesse le immagini in memoria, e
questo non va bene!
come si fa a fargli "scrivere" le stringhe? devo
mettere lo script nell' header del documento???
ciao
orso


 mettere lo script nell' header del documento???
Quello sarebbe sempre buona cosa. Quindi o scrivi in un layer, magari dopo
il caricamento della pagina, o metti il document.write nel corpo pagina. La
sintassi più corretta è questa:
document.open("text/html");
document.write(str);
document.close();
Ciao