Telefonino.net network
 
| 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 » |

Torna indietro   WinTricks Forum > Software > Programmazione

Notices

Rispondi
 
Strumenti discussione
Vecchio 11-05-2008, 03.43.56   #1
Jamester
Junior Member
 
Registrato: 08-04-2008
Messaggi: 72
Jamester promette bene
[VB6] Errore nel caricamento dati

Visto che attualmente sono le 03:31 immagino debba dire buongiorno a tutti

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:
685
30
155,52
Come codice di caricamento (che dovrebbe riportare i valori salvati in precedenza nelle medesime posizioni) c'e' questo:

Quota:
Text4.Text = ""
Text9.Text = ""
Text11.Text = ""
che servirebbe ad azzerare i precedenti valori rimasti nelle textbox per evitare concatenamenti. Il secondo blocco di istruzioni che poi e' probabilmente imperfetto e' questo:

Quota:
Open App.Path & "\testo.txt" For Input As 1
Do
Input #1, linea
Text4.Text = Text4 & linea
Input #1, linea
Text9.Text = Text9 & linea
Input #1, linea
Text11.Text = Text11 & linea
Ora succede che il parametro decimale viene diviso in 2 e la parte prima della virgola va normalmente al terzo textbox a il 52 va nel quarto scombinando l'ordine dei textbox di uno (per la cronaca i textbox saranno una 40ina)

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
Jamester non è collegato   Rispondi citando
Vecchio 11-05-2008, 11.28.53   #2
UG0_BOSS
Young Promise
 
Registrato: 04-02-2006
Messaggi: 2.114
UG0_BOSS promette bene
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
UG0_BOSS non è collegato   Rispondi citando
Vecchio 11-05-2008, 11.46.06   #3
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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
LoryOne non è collegato   Rispondi citando
Vecchio 11-05-2008, 13.28.38   #4
Jamester
Junior Member
 
Registrato: 08-04-2008
Messaggi: 72
Jamester promette bene
Quota:
Inviato da LoryOne
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.
L'unico errore che mi da e' INPUT OLTRE LA LINEA DEL FILE che appunto vuol dire che mette i valori oltre il numero massimo di textbox e cmq ho visto abbastanza chiaramente cosa succede. Quanto alle MSDN, io nn le ho installate in quanto i cd corrispondenti erano danneggiati quindi nn posso avvalermi delle guide interne...

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
Jamester non è collegato   Rispondi citando
Vecchio 11-05-2008, 15.37.29   #5
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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
Noterai un Do Until EOF(FileNo) ... Loop, spesso sostituito da un While Not EOF(FileNo) ... Wend
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))
Ps: Non mi riferivo alle MSDN, bensì all'aiuto in linea che puoi consultare all' interno dell' ambiente di sviluppo.
LoryOne non è collegato   Rispondi citando
Vecchio 11-05-2008, 15.51.36   #6
Jamester
Junior Member
 
Registrato: 08-04-2008
Messaggi: 72
Jamester promette bene
Codice:
Dim S As string
Dim I As  Integer

S = "156,56"
I = Int( Val( S))
Quanto a questo pezzo, non mi e' molto chiaro in quanto:

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
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?
Jamester non è collegato   Rispondi citando
Vecchio 11-05-2008, 16.58.50   #7
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
"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.
LoryOne non è collegato   Rispondi citando
Vecchio 11-05-2008, 17.03.07   #8
Jamester
Junior Member
 
Registrato: 08-04-2008
Messaggi: 72
Jamester promette bene
Quota:
Inviato da LoryOne
"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.
Ho messo le altre 2 alternative a

Codice:
I = Int(Val(S)) cn CINT e FIX
ma nn cambia nulla

Jamester non è collegato   Rispondi citando
Vecchio 11-05-2008, 18.29.36   #9
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Poi guarda cosa cambia se al posto della virgola metti un punto.

Toglimi una curiosità: VB6 ha l'istruzione Ceil ?
LoryOne non è collegato   Rispondi citando
Vecchio 11-05-2008, 18.34.15   #10
Jamester
Junior Member
 
Registrato: 08-04-2008
Messaggi: 72
Jamester promette bene
Quota:
Inviato da LoryOne
Poi guarda cosa cambia se al posto della virgola metti un punto.

Toglimi una curiosità: VB6 ha l'istruzione Ceil ?
1) Cioe' ? esempio pratico

2) Boh !
Jamester non è collegato   Rispondi citando
Vecchio 11-05-2008, 18.35.48   #11
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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" ?
LoryOne non è collegato   Rispondi citando
Vecchio 11-05-2008, 18.38.16   #12
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
Quota:
Inviato da Jamester
2) Boh !
Come boh
Tu c'ha dda vedè se VB6 'tte dice che ceil nun esisteeeee
LoryOne non è collegato   Rispondi citando
Vecchio 11-05-2008, 18.41.52   #13
Jamester
Junior Member
 
Registrato: 08-04-2008
Messaggi: 72
Jamester promette bene
Quota:
Cambia qualcosa se alla stringa s associ "156,5" oppure "156.5" ?
la stringa nn e' + come l'hai scritta te xche il numero viene generato e nn e' fisso quindi ora la stringa e' cosi

Quota:
S = Text11.Text
quindi la tua domanda nn e' valida
Jamester non è collegato   Rispondi citando
Vecchio 11-05-2008, 18.49.37   #14
LoryOne
Gold Member
WT Expert
 
Registrato: 09-01-2002
Loc.: None of your business
Messaggi: 5.505
LoryOne è un gioiello raroLoryOne è un gioiello raroLoryOne è un gioiello raro
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
LoryOne non è collegato   Rispondi citando
Vecchio 11-05-2008, 18.50.43   #15
Jamester
Junior Member
 
Registrato: 08-04-2008
Messaggi: 72
Jamester promette bene
Quota:
Inviato da LoryOne
La mia domanda è sempre valida, anche se cambia la stringa di testo nel textbox.
Allora nn capisco dove dovrei mettere questa virgola o punto che sia visto che nn c'e' + alcuna stringa numerica nel codice
Jamester non è collegato   Rispondi citando
Rispondi


Utenti attualmente attivi che stanno leggendo questa discussione: 1 (0 utenti e 1 ospiti)
 
Strumenti discussione

Regole di scrittura
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is ON
Gli smilies sono ON
[IMG] è ON
Il codice HTML è OFF

Vai al forum

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

Orario GMT +2. Ora sono le: 02.01.07.


E' vietata la riproduzione, anche solo in parte, di contenuti e grafica.
Copyright © 1999-2017 Edizioni Master S.p.A. p.iva: 02105820787 • Tutti i diritti sono riservati
L'editore NON si assume nessuna responsabilità dei contenuti pubblicati sul forum in quanto redatti direttamente dagli utenti.
Questi ultimi sono responsabili dei contenuti da loro riportati nelle discussioni del forum
Powered by vBulletin - 2010 Copyright © Jelsoft Enterprises Limited.