|
| HOMEPAGE | INDICE FORUM | REGOLAMENTO | ::. | NEI PREFERITI | .:: | RSS Forum | RSS News | NEWS web | NEWS software | |
| PUBBLICITA' | | | ARTICOLI | WIN XP | VISTA | WIN 7 | REGISTRI | SOFTWARE | MANUALI | RECENSIONI | LINUX | HUMOR | HARDWARE | DOWNLOAD | | | CERCA nel FORUM » | |
11-05-2008, 03.43.56 | #1 | |||
Junior Member
Registrato: 08-04-2008
Messaggi: 72
|
[VB6] Errore nel caricamento dati
a..."grande richiesta" ecco un altra domanda che suppongo sia molto + semplice dell'altra di qualche ora fa: Ci sono 2 funzioni nel mio programma: una di salvataggio e una di caricamento. Il salvataggio viene fatto prendendo tt i dati di tutte le textbox e vengono salvati uno sotto l'altro in un comunissimo file txt. Ora il problema si presenta durante il caricamento: il terzo valore nel file e' decimale apparendo cosi: Quota:
Quota:
Quota:
Ora la mia richiesta e' la seguente: - Arrotondare i valori delle textbox qualora si verifichi che il risultato sia decimale quindi da 155.52 venga arrotondato a 156 - Oppure scrivere 155.52 tutto nella stessa textbox (sarebbe preferibile la prima opzione e la seconda magari per capire come si fa). Ringrazio anticipatamente |
|||
11-05-2008, 11.28.53 | #2 |
Young Promise
Registrato: 04-02-2006
Messaggi: 2.114
|
Prova a utilizzare come istruzione la Line Input al posto della Input:
Line Input #1, linea Che dovrebbe prendere in input tutta la linea fino al byte di ritorno a capo |
11-05-2008, 11.46.06 | #3 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Buongiorno, dormito bene ?
Se vuoi un consiglio, quando torni dalla disco vai a dormire e non accendere il PC ! Tornando in topic, ci sarebbero parecchie cose da dire. Prima di tutto, considerato che avrai bisogno di numerosi textbox, ti converrà utilizzare le matrici di controlli perchè ti sarà più facile gestire gli eventi comuni ad essi associati e scriverai sicuramente meno codice, ottimizzando il tutto con poche righe. Per creare una matrice di controlli, devi inserire il primo textbox sul form e poi effettuare un copia-incolla. VB ti chiederà se considerare l'oggetto incollato come matrice monodimensionale. Una matrice monodimensionale è un insieme di oggetti dello stesso tipo identificati da un solo indice numerico. Nel tuo caso, quando avrai inserito tutti i textbox di cui necessiti, avrai n textbox identificati con textbox(0), textbox(1), textbox(2), ,... textbox(n) Noterai che anche gli eventi associati ad ogni textbox avranno un identificativo numerico (index) tra i parametri associati all'evento stesso, in modo che tu possa scrivere codice relativo all'elemento(index) di elemento(n). Dai un'occhiata non solo ad input #, ma anche all' istruzione line input # (come ti è stato suggerito), cercando di capire quali siano le differenze nell' utilizzo delle due istruzioni. Per quanto riguarda l'arrotondamento, esistono funzioni di conversione del tipo di dato, ad esempio int. Un ultimo consiglio che è indipendente dal linguaggio che utilizzi, è quello di non partire in quarta, ma di dotarsi di parecchia pazienza, magari scrivendo il codice strettamente necessario a comprendere il funzionamento di un'unica istruzione, cambiando i parametri di input e leggendo l'errore che il compilatore ti restituisce quando il parametro non obbedisce alle regole di compilazione adottate. Ultima modifica di LoryOne : 11-05-2008 alle ore 11.52.38 |
11-05-2008, 13.28.38 | #4 | |
Junior Member
Registrato: 08-04-2008
Messaggi: 72
|
Quota:
Quanto alla matrice di controlli, e' quello che ho fatto solo che i numeri delle textbox sono un po' sballati e il codice ora e' fissato cosi quindi nn mi conviene ora rimettere gli indici in ordine cmq grazie per il suggerimento. Per quanto riguarda la funzione INT, potresti farmi un esempio pratico ? Suppongo che questa funzione vada messa da qualche parte prima che io faccia SALVA DATI cosi nel file viene gia salvato intero e cn il successivo carica dati nn mi darà problemi |
|
11-05-2008, 15.37.29 | #5 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Prendo spunto da uno script trovato in rete che ben si adatta alle tue esigenze:
Codice:
Public Sub DumpFile_V01(ByVal FileName As String) Dim FileNo As Long Dim LineNo As Long Dim LineText As String FileNo = FreeFile ' Get next available file number. Open FileName For Input Access Read Shared As #FileNo Do Until EOF(FileNo) ' Repeat until end of file... Line Input #FileNo, LineText ' Read a line from the file. LineNo = LineNo + 1 Debug.Print Format(LineNo, "00000"); ": "; LineText DoEvents ' Allow Windows to handle other tasks. Loop Close #FileNo End Sub Di particolare rilevanza è l' istruzione EOF(FileNo) perchè indica la fine del file letto: Tutte le istruzioni contenute all'interno del Do Until EOF(FileNo) ... Loop, verranno eseguite fino a quando non verrà raggiunta la fine del file in lettura. Poichè hai utilizzato le matrici di controlli, quel LineNo = LineNo + 1 all'interno del ciclo Do Until ... Loop ti fornirà l'indice relativo al controllo textbox di cui vorrai modificare il testo. Per quanto riguarda Int, l'unica cosa da dire è che è un'istruzione che trasforma in intero un valore es: Codice:
Dim S As string Dim I As Integer S = "156,56" I = Int( Val( S)) |
11-05-2008, 15.51.36 | #6 |
Junior Member
Registrato: 08-04-2008
Messaggi: 72
|
Codice:
Dim S As string Dim I As Integer S = "156,56" I = Int( Val( S)) La prima riga definisce la variabile S come stringa, la seconda la variabile I come un numero intero. Ora la terza riga S da un numero che poi sarebbe un esempio decimale ma il numero in questione e' contenuto nella text11 (nel mio caso) quindi suppongo vada messo S = text11.text. Ora la 4a riga nn l'ho ben capita: Dice che il parametro I è uguale al numero intero del valore S. Ora quando vado a salvare, cosa dovrei dirgli di stampare? S ? Codice:
Private Sub salva_Click() On Error GoTo fine Open App.Path & "\testo.txt" For Output As #1 Dim S As String Dim I As Integer S = Text11.Text I = Int(Val(S)) Print #1, Text4.Text Print #1, Text9.Text Print #1, I |
11-05-2008, 16.58.50 | #7 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
"Io ho fatto cosi ma il valore viene messo a 155 e nn 156 come per arrotondamento inoltre ai lati del 155 vengono messi 2 spazi 1 a dx e uno a sx. Dove sbaglio?"
Ha ha haaaa Prova a vedere cosa succede con Int, CInt e Fix Poi guarda cosa cambia se al posto della virgola metti un punto. |
11-05-2008, 17.03.07 | #8 | |
Junior Member
Registrato: 08-04-2008
Messaggi: 72
|
Quota:
Codice:
I = Int(Val(S)) cn CINT e FIX |
|
11-05-2008, 18.29.36 | #9 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Poi guarda cosa cambia se al posto della virgola metti un punto.
Toglimi una curiosità: VB6 ha l'istruzione Ceil ? |
11-05-2008, 18.34.15 | #10 | |
Junior Member
Registrato: 08-04-2008
Messaggi: 72
|
Quota:
2) Boh ! |
|
11-05-2008, 18.35.48 | #11 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Intendo dire con "punto al posto della virgola" associare al punto la funzione di separatore decimale.
Cambia qualcosa se alla stringa s associ "156,5" oppure "156.5" ? |
11-05-2008, 18.38.16 | #12 | |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
Quota:
Tu c'ha dda vedè se VB6 'tte dice che ceil nun esisteeeee |
|
11-05-2008, 18.41.52 | #13 | ||
Junior Member
Registrato: 08-04-2008
Messaggi: 72
|
Quota:
Quota:
|
||
11-05-2008, 18.49.37 | #14 |
Gold Member
WT Expert
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
|
La mia domanda è sempre valida, anche se cambia la stringa di testo nel textbox.
Dammi retta per un attimo. Lascia perdere il tuo programmino e creane un altro semplice, semplice. Inserisci una textbox, tre label ed un pulsante. Alla pressione del pulsante, la label1 deve restituire: int(val(text1)) la label2 deve restituire: cint(val(text1)) la label3 deve restituire fix(val(text1)) La prima volta in text1 inserisci 156,5 e premi il pulsante La seconda volta in text1 inserisci 156.5 e premi il pulsante. Ultima modifica di LoryOne : 11-05-2008 alle ore 18.55.08 |
11-05-2008, 18.50.43 | #15 | |
Junior Member
Registrato: 08-04-2008
Messaggi: 72
|
Quota:
|
|
Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti) | |
Strumenti discussione | |
|
|
Discussioni simili | ||||
Discussione | Autore discussione | Forum | Risposte | Ultimo messaggio |
Errore nella periferica \Device\Harddisk6\D durante un'operazione di pagin | marconazzi1 | Windows 7/Vista/XP/ 2003 | 4 | 30-05-2009 08.57.04 |
Impossibile copiare VTS_09: errore nei dati (controllo di ridondanza ciclico) Aiuto | lorenzo84 | Windows 7/Vista/XP/ 2003 | 1 | 07-09-2008 13.27.34 |
Errore "Nome duplicato sulla rete" | primoair | Windows 7/Vista/XP/ 2003 | 1 | 08-04-2006 00.36.04 |
Help: "lsass.exe errore di sistema impossibile trovare il nome dell'oggetto | Giatar | Windows 7/Vista/XP/ 2003 | 5 | 11-12-2004 20.32.03 |
Top 10 dati persi | Ghandalf | Archivio News Web | 2 | 11-12-2004 20.03.08 |