Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 12
  1. #1

    ciclo for in un ciclo for....

    ho fatto un programmino molto complicato e molto incasinato secondo me:

    devo creare in modo automatico un file .tex per poi compilarlo in latex e creare una presentazione automatica, ma il problema sta nel programma che è ciclo e che secondo me potrebbe essere semplificato:
    leggo da un database il numero di record totrec e in funzione del numero creo una presentazione che contiene P pagine che variano in funzione di totrec, dato che in ogni pagina ho 3 righe che contengono ognuna un record letto,
    quindi se ho totrec=4 allora P=2 perché in ogni pagina ci vanno solo 3 record.

    Il codice ha la struttura seguente:
    Dim j
    For j=1 to P
    if j=1 then
    for i=0 to totrec

    if i=0 then
    objCreaFile.Write ("pagina 1 riga 1 ")

    elseif i=1 then
    objCreaFile.Write ("pagina 1 riga 2 ")
    elseif i=2 then
    objCreaFile.Write ("pagina 1 riga 3 ")
    end if

    next
    end if

    if j=2 then
    for i=3 to totrec

    if i=3 then
    objCreaFile.Write ("pagina 2 riga 1 ")

    elseif i=4 then
    objCreaFile.Write ("pagina 2 riga 2 ")

    elseif i=5 then
    objCreaFile.Write ("pagina 2 riga 3 ")
    end if

    next
    end if

    next


    come si può semplificare l'operazione per fare in automatico le varie pagine che sono uguali tra loro? anche perché io devo costruire fino a j=50 e quindi i=150, come farlo in automatico senza ripetere ogni volta if j=1,2, ..., 50?
    grazie mille.
    Sabry

  2. #2
    sabry scusa se te lo dico ma non ci si capisce una mazza


    PS se funziona lascialò sta...

  3. #3
    no non si capisce in effetti


    faccio un esempio concreto di quello che devi ottenre...che ne so partendo da 4 record e 2 pagine, facci vedere che dovrebbe venire....
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  4. #4
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    1,150
    In effetti non si capisce molto...

    Io credo di aver avuto la tua stessa esigenza, ma creando pagine Acrobat.

    Spiegati un tantino meglio e vediamo che ne esce fuori


  5. #5

    Re: ciclo for in un ciclo for....

    codice:
    <%
    	Dim i				' indice su cui scorrere i record'
    	dim row				' riga'
    	dim totRec			' recordCount da select su database'
    	dim rowsXpag			' numero di rige da visualizzare per pag'
    	dim pag				' pagine'
    	row = 1
    	pag = 1
    	totRec = 16
    	rowsXpag = 3
    	For i = 1  to totRec 
    
    		response.Write ("pagina ["&pag&"] pag; Record = "&i&"; riga "&row&"
    ")
    		'objCreaFile.Write ("pagina ["&pag&"] riga "&row)  
    		if(i mod rowsXpag = 0) then
    			pag = pag + 1
    			row = 1
    		else
    			row = row + 1
    		end if
    		
    	next 
    %>

  6. #6

    in realtà...

    ...quello che ho scritto è una semplificazione del problema, è lungo da spiegare...
    Allora ho un database contenenti n eventi da visualizzare su un televisore con i campi evento, data dell'evento, persona correlata all'evento, e luogo di riferimento.
    In un file asp vado a leggere dal database la data del giorno e mi ricavo totrec che indica il numero di eventi in quel giorno.
    In base a tale numero di eventi (totrec) vado a creare una presentazione latex con P pagine che dipende dal numero di eventi. Se totrec= 15 e voglio mettere 3 eventi in ogni pagina avrò 5 pagine con 3 righe contenente ognuna un evento.
    Le presentazioni latex non sono altro che, (per chi non lo sa) delle presentazioni tipo Powerpoint dove però vado a programmare tutto con il latex (per scrivere Buongiorno in rosso centrato nella pagina bisogna scrivere con quale colore lo si vuole, quale carattere, ..., è un linguaggio programmato che permette perciò di parametrizzare il numero di pagine)
    Quindi ritornando al nostro problema, non so all'inizio, ne quanto vale totrec, ne quanto vale P.
    Nell'esempio che ho riportato ieri, specificavo per i=1, i=2, i=3, cosa doveva essere scritto nella riga. In realtà non è "pagina 1 riga 1" ma contiene: "evento1, data1, persona1, luogo1". Non so se è chiaro?
    Poi sicome non so quanti eventi ci sono, ma al massimo non superano 150 per ogni giorno, Ho creato 50 cicli for del tipo:
    for j=1 to P
    if j=1,...., 50 then
    for i= 0 to totrec
    if i=0 then ....
    elseif i=1 then...
    elseif=2 then...
    ....
    Ieri ho semplificato un pò la cosa ma è ancora poco automatizzata:
    per esempio per j=1, invece di specificare le 3 condizioni:
    for i=0 to totrec
    if i=0, if i=1, if i=2,
    ho scritto for i=0 to 2
    e cosa deve conparire nella pagina
    (ho scritto la stessa cosa nelle 3 righe variando solo i, prima scrivevo 3 volte le 3 righe)
    adesso vorrei anche scrivere solo una volta le pagine? se si può?
    Comunque cosi funziona, solo che il file asp contiene 3306 righe e se devo fare una modifica su una riga, allora deve corregere 50 volte il codice sulle 50 if (J=1 to 50)
    Grazie dell'aiuto o del consiglio.
    E' che io non ho tanto tempo per perfezionare la mia programmazione asp, e quindi faccio quello che mi serve per il lavoro, solo che la forma in cui programmo non è perfetta.
    Come vedete la prima volta non mi sono dilungata perché per spiegare il problema ci vuole tempo e non so se avete il tempo di leggere una risposta cosi lunga!
    comunque grazie.
    Sabry

  7. #7
    posta una parte del codice che usi cosi vediamo di correggere quello

    non serve che posti tutte le tue 3306 righe, ma sono sufficenti i primi 2/3 if che fai all'interno del ciclo for

    P.s. hai provato a lanciare in locale l'esempio che ti ho fatto?

  8. #8
    ma se tu puoi mettere solo 3 eventi per pagina, le pagine saranno eventi/3....

  9. #9
    Utente di HTML.it
    Registrato dal
    Feb 2005
    Messaggi
    1,150
    io ho avuto lo stesso problema con la creazione di una pagina Html a due colonne che prevedeva inserimento di bollettini gare.
    Questi hanno due tipologie che identificano anche la grandezza e quindi ho calcolato (più o meno) quanti ce ne potevano entrare per pagina e sono arrivato a una conclusione simile a quella di Optime...

    In particolare (ma credo che non serva a nessuno), 1 avviso completo = 1, mentre un avviso collegato = 3/8

    Comunque, questa dovrebbe essere la strada.

    Considera che degli spazi li avrai sempre a fine pagina. Infatti è impossibile (a meno che gli eventi non sono tutti della stessa dimensione), calcolare precisamente quanti nel dovranno entrare in una pagina.

    Io sono andato a tentativi e poi ho trovato la "percentuale" giusta.
    Considera inoltre che i bollettini che produco, arrivano anche a 300 pagine. Con l'aggiunta di altre informazioni finali (sempre calcolate così).

    Vabbè... mi sono dilungato troppo... ma spero ti possa aver dato qualche consiglio


  10. #10

    allora....

    questo è un pezzo di codice contente la scrittura di un file di testo in latex:

    -------------------------------------------------------------------------------------
    Dim j
    For j=1 to P
    objCreaFile.Write ("%Inizio n-esima slide")
    objCreaFile.Write ("\begin{slide}[Blinds]{} ")
    \textcolor{white}{\scriptsize{\textbf{Esami del }}}\orange{\scriptsize{\textbf{")
    objCreaFile.Write (DataDie)
    objCreaFile.Write ("}}}\\ ")
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write ("\hline")
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write ("\end{tabular}")
    objCreaFile.Write ("\\")
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write ("\end{tabular}")
    objCreaFile.WriteBlankLines(1)

    if j=1 then
    for i=0 to totrec

    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write ("\begin{tabular}{|>{\columncolor{white}}p{10 cm}l|} ")
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write ("\hline ")
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write ("\textcolor{bleuf}{\tiny{\textbf{")
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write (replace(thetext(i),"_"," "))
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write ("}}}")
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write ("\textcolor{bleuf}{\tiny{ - }} ")
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write ("\textcolor{bleuf}{\tiny{\emph{ore:}}}")
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write ("\textcolor{bleuf}{\tiny{\emph{")
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write (OraX(i))
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write ("}}} ")
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write ("\textcolor{bleuf}{\tiny{ - }} ")
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write ("\textcolor{bleuf}{\tiny{\emph{docente:}}}")
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write ("\textcolor{bleuf}{\tiny{\emph{")
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write (replace(DocenteX(i),"_"," "))
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write ("}}} ")
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write ("\textcolor{bleuf}{\tiny{ - }} ")
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write ("\textcolor{bleuf}{\tiny{\emph{aula:}}}")
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write ("\textcolor{bleuf}{\tiny{\emph{")
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write (AulaX(i))
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write ("}}} ")
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write ("\\")
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write ("\hline ")
    objCreaFile.WriteBlankLines(1)
    objCreaFile.Write ("\end{tabular}")
    objCreaFile.WriteBlankLines(1)
    next
    end if
    ---------------------------------------------------------------------------------------
    adesso mi da il problema seguente:
    ho semplificato ed invece di scrivere
    if i=1, if i=2, if i=3...
    scrivendo if i= 0 to totrec, ho il problema seguente:
    supponiamo di avere totrec=14 quindi P=5 però se scrivo
    if i=o to totrec, allora mi crea l'ultima riga i=15 con tutti i parametri =0,
    però questo mi crea problemi in latex.
    mentre prima di fare la semplificazione, quando scrivevo tre volte il codice per i=0, i=1, i=2, questo problema non l'avevo perché la riga 15 me la scriveva solo se i arrivava a 15.
    quindi non si può semplificare in questo modo? altrimenti come posso risolvere?
    grazie

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 © 2025 vBulletin Solutions, Inc. All rights reserved.