Novità

Aiuto per stampa

genios

Advanced Member >PLATINUM<
Come si fa a far stampare il valore di una variabile in un certo punto dello schermo ?

Esempio ho tre variabili a = 10 b = 5 c = 1

e voglio che la variabile
a = 10 venga stampata in posizione 1
la variabile b = 5 venga stampata dopo 6 caratteri
e la variabile c venga stampata dopo 12 caratteri

Mi sembra che si debba usare il comando TAB ma non so cosa fare .

Cordiali Saluti
Eugenio
 
genios;n1996041 ha scritto:
Grazie Joe91 . Quando puoi' anche una lezioncina su TAB .

Ciao Eugenio


Codice:
Sub Main
	For P = 1 To 5
		Scrivi Format2(NumeroCasuale(1,90))& vbTab,True,False
	Next
	Scrivi ""
End Sub

:)
 
ciao , volendo rimanere in ambito "disegni con i caratteri" ecco un altro esempio che fa uso della nuova funzione MidX.
La funzione MidX al contrario di Mid (che serve per estrarre dei caratteri da una stringa) consente di inserirli nella stringa alla posizione voluta (purche la posizione sia valida nella stringa in cui inserire)
Quindi lo script innanzitutto crea un vettore ,questo vettore rappresenta un'area in cui ogni quadratino è identificabile da una coordinata x,y
Ogni elemento del vettore contiene una stringa fatta dal carattere [SPACE] ovvero un Blank ed è lunga il valore previsto per la Base.
Il numero di elementi del vettore corrisponde all'altezza.
Ora tramite MidX possiamo scrivere negli elementi del vettore nelle coordinate volute.
Ecco lo script di esempio (MidX si puo usare ovviamente anche su una sola stringa non necessariamente nel modo in cui è usata nel seguente script)

Codice:
Option Explicit
Sub Main
    Dim aArea
    
    ' creao attraverso un vettore un area di x quadratini alla base e y all'altezza
    aArea = CreaArea ( 50  , 20)
    
    ' arbitrariamente scrivo dei valori alle coordinate volute
    
    
    ' scrivo un valore in alto a sinistra
    Call ScriviValore (1 ,1,"V1" , aArea)
    
    ' scrivo un valore in alto a destra
    Call ScriviValore (49,1,"V2" , aArea)
    
    ' scrivo un valore in basso a sinistra
    Call ScriviValore (1,20,"V3" , aArea)
    
    ' scrivo un valore in basso a destra
    Call ScriviValore (49 , 20,"V4" , aArea)
    
    
    ' scrivo un valore al centro
    Call ScriviValore (25 , 10,"V5" , aArea)

    
    ' quando ho finito di scrivetre nell'area vado a esportare il disegno in output
    
    Call ScriviDisegno (aArea)
    

End Sub

Function CreaArea ( nBase , nAltezza)

    Dim    y
    ReDim aArea (nAltezza)
    
    For y = 1 To nAltezza
        aArea (y) = Space(nBase)    
    Next
    CreaArea = aArea
End Function

Sub ScriviValore (x , y , Valore ,aArea)

    Dim k , p , s
    
    p = x
    For k = 1 To Len(Valore)
        If p >0 And p <= Len(aArea (1)) Then
            s = Mid(Valore ,k,1)
            Call MidX (aArea(y) ,s,p)
            p = p +1
        End If
    Next
End Sub

Sub ScriviDisegno (aArea)
    Dim k
    
    For k = 1 To UBound (aArea)
        Scrivi (aArea ( k))
    Next
End Sub


Codice:
Option Explicit
Sub Main
    
    Dim a, b ,c
    Dim sRiga
    sRiga = Space(100)
    
    a = 10 : b= 5 :c =1
    
    Call MidX( sRiga ,a,1)
    Call MidX( sRiga ,b,6)
    Call MidX( sRiga ,c,12)
    
    Call Scrivi (Trim(sRiga))
    
    
End Sub
 
Ultima modifica di un moderatore:
Per joe91 ( Poi mi studio anche gli script del grande LuigiB anche se la vedo un po' dura ) ho aggiunto un ciclo For Next e vorrei capire per quale motivo se chiudo il ciclo prima o dopo la funzione Scrivi"" in uscita otteniamo risultati diversi ?
Nel senso che nel primo script stampata la variabile P va a capo mentre nel secondo script scrive tutto in orizzontale .

Ciao Eugenio

Codice:
Sub
Codice:
 [B]Main[/B]
      [B]For[/B] a [B]=[/B] 1 [B]To[/B] 90
      [B]For[/B] P [B]=[/B] 1 [B]To[/B] 5
            [B]Scrivi[/B] [B]Format2[/B]([B]NumeroCasuale[/B](1,90))[B]&[/B] [B]vbTab[/B],[B]True[/B],[B]False[/B]
      [B]Next[/B]
      [B]Scrivi[/B] ""
      [B]Next[/B]
[B]End[/B] [B]Sub[/B]


43 14 12 11 51
34 16 05 69 04
67 84 59 13 35
36 25 34 54 28
18 79 46 50 74
24 78 17 87 77
21 81 64 23 36
51 41 04 14 16
Codice:
[B]Sub[/B] [B]Main[/B]
      [B]For[/B] a [B]=[/B] 1 [B]To[/B] 90
      [B]For[/B] P [B]=[/B] 1 [B]To[/B] 5
            [B]Scrivi[/B] [B]Format2[/B]([B]NumeroCasuale[/B](1,90))[B]&[/B] [B]vbTab[/B],[B]True[/B],[B]False[/B]
      [B]Next[/B]
      [B]Next[/B]
      [B]Scrivi[/B] ""
    
[B]End[/B] [B]Sub[/B]


01 78 16 05 65 69 61 18 46 83 81 66 48 16
 
Ultima modifica:
Ciao Eugenio.

Scrivi "" ... "nulla" ... "decide" dove andare "a capo".

Come vedi, questo Scrivi "" è senza altri parametri.

In assenza di parametri ASSUME quelli di default.

Cioè va "a capo".

Mentre ... nell' altra linea dello scrript ....

"Scrivi" ha 2 parametri: ... ,True, False.

* il primo: True, è relativo al grassetto o bold.

* il secondo: False, è relativo all' "andare a capo"

Quindi per tutte le 5 volte, "NON va ...a capo".

Poi l'andare a capo, dipende da dove è presente Scrivi "".

Spostando il "Next" con cui termina il nuovo ciclo che hai inserito

si sposta anche l'andare a capo (o meno) dopo il quinto numero.

Ovvero se "Next" è prima o se è dopo ... include e/o esclude l'andare "a capo"

Perchè spostandolo ... si fa entrare/uscire, dal ciclo questo ... Scrivi ""

Cioè si modifica il "quando" andare "a capo".

Gli esempi, sono quelli che hai fornito.

Se hai voglia di contare ... i numeri presenti, nella tua seconda ipotesi,

dovrebbero essere 450 (90x5) in una sola linea.

:)
 
Ultima modifica:
Ciao Luigi.

Grazie per gli esempi,

molto utili, perchè in modalita diy ... avrei impostato soluzioni alternative.

Terrò presente MidX che mi è naturalmente sconosciuta.

:) Cordiali saluti.
 
ciao Joe .. si , MidX è stata introdotta da qualche versione fa .
In vb6 la funzione Mid assolve sia allo scopo di estrarre dei caratteri da una stringa sia a quello di inserirli , in vbscript invece Mid sebbene esista puo solo estrarre dei caratteri da una stringa.
Il fatto di poter inserire dei caratteri in una stringa è molto utile specie quando si costruiiscono dinamicamente stringhe a runtime usare midX puo aumetare la velocita di esecuszione.

infatti se noi per costruire una stringa ogni volta facciamo

Codice:
s = s & "nuovo valore"

questa operazione ripetuta molte volte in un ciclo costringe ogni volta a creare una nuova variabile in background per poi restituirla col nuovo valore al codice.

invece se noi creiamo gia una stringa di X posizioni e poi ci andiamo a scrivere dentro alla posizione voluta la stringa in memoria rimane sempre quella e non c'è spreco di risorse.

A parte la velocita puo essere comoda anche in altri contesti.
 
???????? Mi sa che ho perso smalto. Se costruisco una stringa e non so quanto sarà lunga come faccio ?
S=""
For id= estrazione fin -200 To estrazionefin
If pari ( id) Then
S=s&id&"-"
End if
Next
Scusate se ho scritto qualche castronerie .

Ciao :)
 
Ciao i legend, non ho capito.

Ovvero Luigi ha previsto uno "spazio grande" in cui scrivere

... poi lo ha ridotto all' essenziale con trim.

Di per sè ha senso appunto andare a scrivere in determinate posizioni

all'interno della stringa predisposta come contenitore ... senza doverla spezzare

o farla crescere ... ed avere "un prima" e/o "un dopo" come spazio in cui aggiungere.

Una sorta di accesso-casuale ... che ha una sua indubbia utilità.

Ho ripreso per provare lo script di Luigi:

Codice:
Option Explicit
Sub Main
	Dim Es,E,R,P
	Dim sRiga
	sRiga = Space(273)
	R = BA_
	Scrivi "Estratti a " & NomeRuota(R) & " nelle ultime 5 Estrazioni"
	For Es = EstrazioneFin - 4 To EstrazioneFin
		For P = 1 To 5
			E = Format2 ( Estratto(Es,R,P))
			Call MidX(sRiga,E,3*E)
		Next
	Next
	Call Scrivi(sRiga)
End Sub


:)
 
Ultima modifica:
Mi servirebbe un altro aiuto .Il più' semplice possibile . Ricerca di un dato numero in una certa estrazione in una data ruota . Stampa del numero estrazione, data estrazione , striga estratti . e stampa del numero trovato.

Cordiali Saluti e Buon Ferragosto a tutti .

Eugenio
 
Ciao Eugenio.

Devi solo tradurre la tua richiesta affinchè

diventi uno script.

Dividi ogni parte di quello che hai scritto

in altrettante linee di programma:


un dato numero =

una certa estrazione =

una data ruota =

...

poi quando hai diviso tutto,

dato il valore appropriato alle variabili,

e c'è "la forma" di un codice eseguibile

Vedremo quali istruzioni utilizzare.

Come correggere gli errori per ottenere,

dai dati che hai inserito, lo script che

elabora ... il risultato voluto.


:)
 
Ultima modifica:
Ciao Joe91 Buon Ferragosto .

Dimmi se il ragionamento è giusto .

Ora occorre mettere una istruzione condizionale tra il ciclo for next che faccia il confronto tra il valore della variabile NumeroCercato e i valori delle variabili p1 p2 p3 p4 p5 cioè i numeri nelle varie posizioni dell' archivio estrazioni in una certa estrazione .

Codice:
Option Explicit
Sub Main
    Dim NumeroEstrazione,RuotadiRicerca,Numerocercato,Ini 
    NumeroEstrazione=8000
    RuotadiRicerca=BA_     
    Numerocercato=10
    For Ini= EstrazioneFin -100 To EstrazioneFin 
    
    
    
    
    
    
    Scrivi NumeroEstrazione &" "&  DataEstrazione (NumeroEstrazione)&" "& StringaEstratti(NumeroEstrazione,RuotadiRicerca)&" "& Numerocercato
    
    Next 
End Sub
 
Ciao Eugenio.

Si e no ... più no che si,

nel senso che hai cambiato le carte in tavola

eppoi hai fatto una sorta di collage ... di cose senza ... valutarne gli effetti.

Torniamo al prima .... così è più semplice.

Intanto ti spiego perchè non funziona.

Cosa hai fatto di sbagliato.

Usciamo anche dal Lotto.

Avevi tre dati diciamoli

Lunghezza/Largezza/Altezza.

Problema: calcoalre il volume del

Parallelepipedo.

Scrivere il Volume

Quindi

'DATI :

Lunghezza = 3

Larghezza = 4

Altezza = 5

'ISTUZIONE RISOLUTIVA:

Volume = Lunghezza * Larghezza * Altezza

'OUTPUT:

Scrivi "Volume = " & Volume

Essendo questo già "codice" ...

Lo si può inserire tra

"Sub Main ()" ed "End Sub" e

eseguire e

salvo gli errori di dattilografia ...

dovrebbe funzionare.

Quindi si ... quanto hai proposto ... è meglio.

Perchè non limiterebbe il controllo ad

una estrazione fissa ... ma ...

MENTRE lo script come e così come era impostato ...

funzionerebbe solo per un caso.

Se scrivi 8000 il Pc ... considera quell' 8000.

Se invece scrivi:

For Ini= EstrazioneFin -100 To EstrazioneFin

E' meglio ma è intuitivamente sbagliato.

"Ini" diventa la variabile di controllo del ciclo For-Next.

Mentre poi viene sempre usato 8000.

... e lo script scrive 100 cose uguali.

:) Segue ...
 
Ultima modifica:
Quindi è molto meglio scrivere:

Codice:
INI = ESTRAZIONEFIN -100


FIN = ESTRAZIONEFIN


FOR ES = INI TO FIN


SCRIVI ES


NEXT


Vedi la piccola grossa differenza


non è "For Ini" ma è "For Es = Ini ..."


In italiano è:

Per ogni Estrazione compresa tra l' Inizio e la Fine
...
Prossima.
 
Ultima modifica:
Apportate correzioni. Ora dovrei trovare trovare un numero usando pero' l' istruzione condizionale If then .

Ora occorre mettere una istruzione condizionale tra il ciclo for next che faccia il confronto tra il valore della variabile NumeroCercato e i valori delle variabili p1 p2 p3 p4 p5 cioè i numeri nelle varie posizioni dell' archivio estrazioni in una certa estrazione .

[CODEOption Explicit
Sub Main
Dim Ini,Fin,es,RuotadiRicerca,NumeroCercato



Ini = EstrazioneFin - 100
Fin = EstrazioneFin
RuotadiRicerca=1

For es = Ini To Fin





Scrivi es &" "& DataEstrazione (es) &" "& StringaEstratti(es,RuotadiRicerca)
Next

End Sub
][/CODE]
 
Ciao ti propongo prima una soluzione più comoda al dover scrivere tuttp da sè.

Utilizza l'istruzione posizione che restituisce un numero da Zero a 5

Zero se non è presente ... oopure la posizione in cui si trova.

Manca un valore per il numerocercato ... quindi P vale sempre zero.

Quando restituirà i valori corretti si potrà eseguire il test condizionale che avevi ipotizzato.

If P > 0 then 'prima dell'istruzione scrivi

End If 'subito dopo l'istruzione scrivi che invia l'output a video.

Codice:
Option Explicit
Sub Main
	Dim Ini,Fin,Es,RuotadiRicerca,NumeroCercato,P
	Ini = EstrazioneFin - 100
	Fin = EstrazioneFin
	RuotadiRicerca = 1
	NumeroCercato = 10 
	For Es = Ini To Fin
		P = Posizione(Es,RuotadiRicerca,NumeroCercato)
		'Scrivi Es & " " & DataEstrazione(Es)& " " & StringaEstratti(Es,RuotadiRicerca)
		Scrivi GetInfoEstrazione (Es) & " " & StringaEstratti(Es,RuotadiRicerca) & "  " & P
	Next
End Sub

:) Buona serata
 

Ultima estrazione Lotto

  • Estrazione del lotto
    sabato 25 gennaio 2025
    Bari
    13
    87
    02
    10
    73
    Cagliari
    55
    40
    76
    82
    50
    Firenze
    23
    51
    44
    84
    72
    Genova
    49
    56
    19
    48
    64
    Milano
    40
    27
    80
    13
    47
    Napoli
    67
    37
    02
    75
    81
    Palermo
    25
    28
    11
    31
    40
    Roma
    20
    25
    59
    10
    22
    Torino
    82
    02
    19
    89
    84
    Venezia
    06
    59
    65
    53
    61
    Nazionale
    45
    72
    80
    76
    32
    Estrazione Simbolotto
    Bari
    16
    41
    08
    11
    43

Ultimi Messaggi

Indietro
Alto