Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
Visual Basic 6 - 2 problemi: Tasto annulla su apri file e il programma non legge interamente un file di testo
Forum - Visual Basic 6 - 2 problemi: Tasto annulla su apri file e il programma non legge interamente un file di testo

Avatar
Pierga (Normal User)
Newbie


Messaggi: 14
Iscritto: 14/04/2009

Segnala al moderatore
Postato alle 22:21
Giovedì, 31/03/2011
Ciao a tutti,
sto scrivendo un programma che mi faccia dei calcoli su due colonne di dati "Potenziale" (E) e "Corrente" (i). Lo strumento mi fornisce un file txt con dei dati di intestazione "Estart", "Eswitch", "Eend" etc. e successivamente parte con le due colonne di dati "E" ed "i", separati da virgola. Ne ho allegato uno.
Il codice funziona, ho solo due problemi che non riesco a sormontare:

1) Quando si apre la finestra di apertura file, se si preme il tasto Annulla mi appare l'errore "Run-time error '75'".

2) Alla fine il frutto dei calcoli appare nella textbox "Result". Pero' se il file txt di partenza e' troppo lungo non mi appaiono tutti i dati. Mi vengono tagliati. Inoltre, se il file fosse corto ma volessi avere tre colonne di dati, quelle iniziali "E" ed "i" e la colonna che deriva dal calcolo "curconv", lo stesso il programma mi taglia i dati. Sembra che la texbox possa contenere solo un certo un numero di caratteri, il che mi sembra strano.

La form e' composta da una Textbox "Result" ed un bottone.

Codice sorgente - presumibilmente VB.NET

  1. Private Sub Command2_Click()
  2.  
  3. Result.Text = "" 'Cleaning textbox
  4. CommonDialog1.Filter = "Text files|*.txt"
  5. CommonDialog1.ShowOpen
  6.  
  7. Open CommonDialog1.FileName For Input As #1 'Apre il file in lettura
  8.  
  9. 'Variables declaration
  10. Dim Take As String
  11. Dim scanrate As Double
  12. Dim Estart As Double
  13. Dim Eend As Double
  14. Dim Eswitch As Double
  15. Dim potential() As Double
  16. Dim current() As Double
  17. Dim ndata As Integer
  18. ndata = 0
  19. Dim counter1 As Integer
  20. counter1 = 0
  21. Dim time() As Double
  22. Dim deltat As Double
  23.  
  24.  
  25. 'Reading cycle
  26. Do Until EOF(1)
  27. Line Input #1, Take 'N.B.: Takes the whole line in input, otherwise takes just the first
  28.                     'characters before the first space!
  29.  
  30.  
  31. If InStr(Take, "v (V/s):") > 0 Then
  32. b = Split(Take, ": ") 'The line is divided in an array b(i) at each comma.
  33. scanrate = b(1)
  34. End If
  35.  
  36. If InStr(Take, "Estart (V):") > 0
  37. b = Split(Take, ": ") 'The line is divided in an array b(i) at each comma.
  38. Estart = b(1)
  39. End If
  40.  
  41. If InStr(Take, "Eswitch (V):") > 0
  42. b = Split(Take, ": ") 'The line is divided in an array b(i) at each comma.
  43. Eswitch = b(1)
  44. End If
  45.  
  46. If InStr(Take, "Eend (V):") > 0
  47. b = Split(Take, ": ") 'The line is divided in an array b(i) at each comma.
  48. Eend = b(1)
  49. End If
  50.  
  51. If InStr(Take, "number of E(V), I(A) couples:") > 0 Then 'For Echem Files
  52. b = Split(Take, ": ") 'The line is divided in an array b(i) at each comma.
  53. ndata = b(1)
  54. ReDim potential(ndata) As Double
  55. ReDim current(ndata) As Double
  56. ReDim time(ndata) As Double
  57. End If
  58.  
  59. If InStr(Take, ",") > 0 And InStr(Take, "e-") > 0 Then
  60. b = Split(Take, ",") 'The line is divided in an array b(i) at each comma.
  61. potential(counter1) = b(0)
  62. current(counter1) = b(1)
  63. counter1 = counter1 + 1
  64. End If
  65.  
  66. Loop
  67. Close #1 'Closes the file *.txt
  68.  
  69.  
  70. 'Tensformation of E scale to time scale
  71. counter1 = 0
  72. deltat = 0.001 / scanrate
  73.  
  74. For counter1 = 0 To ndata - 1
  75. time(counter1) = counter1 * deltat
  76. Next
  77.  
  78. 'Calculation of convolute convolute current
  79. Dim curconv() As Double
  80. ReDim curconv(ndata) As Double
  81. counter1 = 0 'equal to K
  82. Dim counter2 As Double 'equal to J
  83. counter2 = 1
  84. Dim calc1 As Double
  85. Dim calc2 As Double
  86. calc1 = 0
  87. calc2 = 0
  88.  
  89. For counter1 = 0 To ndata - 1
  90. calc2 = 0
  91.      For counter2 = 1 To counter1
  92.      calc1 = ((deltat ^ 0.5) * current(counter2)) / ((counter1 - counter2 + 0.5) ^ 0.5)
  93.      calc2 = calc2 + calc1
  94.      Next counter2
  95. calc2 = (3.14 ^ -0.5) * calc2
  96. curconv(counter1) = calc2
  97. Next counter1
  98.  
  99. 'Write on text box the results
  100. counter1 = 0
  101. Result.Text = Result & "Estart (V): " & Estart & vbCrLf
  102. Result.Text = Result & "Eswitch (V): " & Eswitch & vbCrLf
  103. Result.Text = Result & "Eend (V): " & Eend & vbCrLf
  104. Result.Text = Result & "v (V/s): " & scanrate & vbCrLf
  105. Result.Text = Result & "Diffusion Coefficient (cm/s): " & Text1 & vbCrLf & vbCrLf
  106. For counter1 = 0 To ndata - 1
  107. Result.Text = Result & potential(counter1) & " , " & current(counter1) & " , " & curconv(counter1) & vbCrLf
  108. Next counter1
  109.  
  110. End If
  111. End Sub





Se qualcosa non e' chiaro, vi prego, fatemi sapere. Cercherò di essere più' esaustivo.
Vi avverto che sono un neofita e che conosco solo le basi della programmazione e tutto quello che ho scritto e frutto di innumerevoli ricerche in rete. Se potete, cercate di darmi delle indicazioni più' semplici possibile. Grazie mille a chiunque risponda.

PM
Avatar
lorenzo (Normal User)
Guru


Messaggi: 1178
Iscritto: 15/04/2008

Up
0
Down
V
Segnala al moderatore
Postato alle 22:41
Giovedì, 31/03/2011
Codice sorgente - presumibilmente Delphi

  1. Open CommonDialog1.FileName For Input As #1 'Apre il file in lettura



l'errore di runtime l'hai perché anche schiacciando il tasto di annulla, tu tenti di aprire il file prendendo il path scelto nella dialog. Se premi annulla quel path non è valido quindi tenti di aprire un file che non esiste



per il resto, adesso non ho molto tempo, però è ovvio che la textbox abbia un limite massimo di lunghezza, non crederai mica che sia infinita no?


c'e' modo di sapere quanto riescono a contenere? I miei file hanno 1800 righe... - Pierga - 01/04/11 12:02
PM
Avatar
poeo85 (Normal User)
Pro


Messaggi: 104
Iscritto: 27/01/2010

Up
0
Down
V
Segnala al moderatore
Postato alle 9:04
Venerdì, 01/04/2011
allora un mio consiglio...
per quanto concerne il commondialog ti consiglio di fare

ti metti il fileName dentro ad una variabile poi testi il risultato e se tutto va bene vai avanti.

per il resto visto che devi mettere su 3 colonne i tuoi dati, te li metti in una griglia???

Il primo problema, quello del bottone annulla l'ho risolto con questo codice: - Pierga - 01/04/11 11:37
ops, comunque primo problema risolto, ti ho mandato un pm! Per il secondo, cos'e' una griglia? - Pierga - 01/04/11 11:59
PM