Questo è il Db...è in formato .txt
Il Db, è troppo lungo per scriverlo tutto (circa 6800 righe)...vi scrivo soltanto le ultime 3 righe
16/03/2010 189 85 79 65 56 40 29 2 6 88 71 10 27 57 29 65 33 43 1 15 82 37 51 36 34 33 75 4 81 36 56 53 82 83 14 70 41 88 77 75 26 19 89 32 16 57 73 81 74 30 89 53 86 9 60 4
18/03/2010 190 16 48 41 74 87 72 51 17 60 45 4 20 44 2 62 23 1 48 20 55 77 22 48 38 80 68 78 38 58 67 59 66 46 13 45 59 28 38 53 22 37 18 1 38 51 56 32 30 70 2 8 13 62 69 27
20/03/2010 191 46 65 34 29 24 64 84 26 20 38 80 50 45 42 58 70 50 11 39 16 9 82 18 24 75 38 80 74 39 79 59 31 84 35 67 56 15 5 68 45 3 39 6 18 25 41 35 12 30 70 47 85 16 36 52
Questo è il codice che uso per leggere il Db e trasportare ogni campo in una label
PUBLIC Db AS NEW String[10000, 5000]
PUBLIC Record AS Integer
PUBLIC Campo AS Integer
PUBLIC SUB Form_Open()
ME.center
Leggi
textlabel13.Caption = label2.caption
textlabel12.Caption = "Ultima estrazione inserita N°"
textlabel14.Caption = "del"
textlabel15.Caption = label1.Caption
IF label2.Caption = textlabel13.Caption THEN
Avanti.Enabled = FALSE
ENDIF
END
PUBLIC SUB Leggi()
DIM i, x, z AS Integer
DIM percorso, sLine AS String
DIM hFile AS File
campo = 0
record = 0
percorso = User.Home & "/KdeLotto/DataB/Archivio.txt"
hFile = OPEN percorso FOR INPUT
WHILE NOT Eof(hFile)
LINE INPUT #hFile, sLine
x = Len(sLine) 'mette in x il numero di caratteri della stringa in esame
record = record + 1 'aumenta di uno il contatore dei record
campo = 1 'parte dal primo campo
z = 0 ' serve da promemoria per spazi separatori di campo
FOR i = 1 TO x 'imposta il ciclo per prelevare i caratteri uno alla volta
IF Mid(sLine, i, 1) <> " " THEN 'controllo se il carattere non è uno spazio
IF z = 1 THEN ' se è uno spazio allora
z = 0
campo = campo + 1 'incremento il contatore dei campi
ENDIF
db[record, campo] = db[record, campo] & Mid(sLine, i, 1) ' salvo nel vettore il carattere prelevato con Mid
ELSE ' se il carattere è uno spazio invece...
z = 1 'z mi ricorda che ho trovato un separatore di campo
ENDIF
NEXT
WEND
Esegui
END
PUBLIC SUB Esci_Click()
ME.close
END
PUBLIC SUB Esegui()
DIM Oggetto AS Object
DIM K AS Integer
Campo = 1
FOR k = campo TO 57 ' i campi sono 57 come le label che contiene il form
FOR EACH Oggetto IN ME.Children
IF Object.Type(Oggetto) = "Label" THEN
Oggetto.text = (db[record, k])
INC K
ENDIF
NEXT
NEXT
END
PUBLIC SUB Indietro_Click() ' il pulsante mi servre per scorrere indietro di 1 riga alla volta
DIM Oggetto AS Object
DIM K AS Integer
Avanti.Enabled = TRUE
Campo = 1
record = record - 1
FOR k = campo TO 57
'i = record
FOR EACH Oggetto IN ME.Children
'se il tipo l'oggetto è una Label
IF Object.Type(Oggetto) = "Label" THEN
'imposto il text
Oggetto.text = (db[record, k])
INC K
ENDIF
NEXT
NEXT
END
PUBLIC SUB Avanti_Click() ' scorre in avanti tra i record
DIM Oggetto AS Object
DIM K AS Integer
IF label2.Caption = textlabel13.Caption THEN
Avanti.Enabled = FALSE
ELSE
Campo = 1
record = record + 1
FOR k = campo TO 57
'i = record
FOR EACH Oggetto IN ME.Children
'se il tipo l'oggetto è una Label
IF Object.Type(Oggetto) = "Label" THEN
'imposto il text
Oggetto.text = (db[record, k])
INC K
END IF
NEXT
NEXT
END IF
END
Il form è formato da 11 textlabel con i nome delle ruote e da 57 label per visualizzare i vari campi
Fin qui, tutto bene!
adesso, con un'altro form più o meno uguale all'altro (al posto delle 57 label, ci sono 57 textbox) vorrei aggiungere altre righe, ma putroppo, con i codice che ho postato all'inizio, non riesco
L'unico sistema che conosco in gambas, sarebbe quello di scrivere:
PRINT #Hfile, textbox1.text & "" & textbox2.text & "" &....ecc..ecc.. fino ad arrivare alla ultima textbox
io al posto tuo avrei utilizzato una tableview invece di tante label...
cmq per il tuo problema potresti fare una cosa del genere:
PUBLIC SUB Button1_Click()
DIM Oggetto AS Object
DIM i AS Integer
DIM s AS String
DIM data AS String
DIM string AS String
i = 1
stringa = data & " "
FOR EACH Oggetto IN ME.Children
IF Oggetto.name = "TextBox" & i THEN
stringa = stringa & oggetto.text & " "
ENDIF
INC i
NEXT
stringa1 = File.Load(percorso e nome file di testo)' carico il file dove sono presenti altre estrazioni
stringa1 = stringa1 & "\n" & stringa 'aggiungo le estrazioni odierne
file.Save(percorso e nome file, stringa1)' salvo il file
END
ps:visto che siamo su gambas io preferisco utilizzare texlabel.text piuttosto che textlabel.caption
Problema risolto!!
..dire che avevo la soluzione sotto al naso e non me n'ero accorto...bastava scrivere TextBox" & i per creare una sorta di indice
Senza mettere le mani le codice del mio progetto, ho voluto crearne un'altro da tenere come esempio (non si sa mai! :D)
...è un normalissimo form con dentro 4 TextBox e un pulsate
Questo è il codice
PUBLIC Percorso AS String
PUBLIC hFILE AS FILE
PUBLIC SUB Form_Open()
Percorso = User.Home & "/EsempioScrittura/MioFile.txt"
hfile = OPEN Percorso FOR APPEND
ME.center
END
PUBLIC SUB Salva_Click()
DIM Oggetto AS Object
DIM i AS Integer
DIM Stringa AS String
FOR EACH Oggetto IN ME.Children
FOR i = 1 TO 4
IF Oggetto.name = "TextBox" & i THEN
Stringa = Stringa & Oggetto.Text & " "
ENDIF
NEXT
NEXT
PRINT #hfile, stringa ' aggiungo il contenuto delle 4 Textbox
CLOSE #file
END
Grazie a tutti
Allora potrebbe funzionare anche con un più semplice IF Instr(Oggetto.Name,"TexBox") THEN
?
Non corriamo...diciamo che il metodo usato non sfrutta gli indici così come fanno altri linguaggi tipo visual basic.....gli indici richiamerebbero la textbox semplicemente con
textbox.text
mentre il metodo qui illustrato è una "pezza" al metodo degli indici....
vero qui non si possono mettere gli indici, ma sfruttando il n° delle tex come indice si possono utilizzare nei cicli, se poi ci aggiungiamo last.tag la cosa diventa molto interessante e più performante di visuabasic
Che sia più performante non so dirlo...bisognerebbe vedere cosa c'è dietro l'uso degli indici di VB...
Per quanto mi riguarda, gli indici in visual basic 6.0, li ho sempre trovati utilissimi
Supponiamo di voler progettare una rubrica con NOME,COGNOME,E INDIRIZZO
in sintesi,Il codice protrebbe essere più o meno questo
>PRINT textbox1.text & textbox2.text & texbox3.text
con gli indici,risparmio tempo e snellisco il codice
..poi, come mi avete fatto notare, esistono sicuramente altre metodologie per scavalcare questo problema, ma il mio manuale intellettivo in questa materia, essendo molto limitato e conoscendo da poco GAMBAS, mi limita ancora di più nella ricerca di altre soluzioni sicuramente migliori di quelle che ho scelto in questo progetto