alpi39 (Normal User)
Pro
Messaggi: 63
Iscritto: 07/03/2008
|
Postato originariamente da Il Totem:
Tu hai dichiarato due Z, non una sola! Noi non ti abbiamo detto di dichiararne due, mi pare. Se due variabili non nello stesso blocco hanno lo stesso nome viene usata quella appartenente all'ambito più interno e particolare. In questo caso solo la Z dichiarata DENTRO la procedura viene usata, mentre quella fuori non ne risente. Tu devi utilizzare solo quella fuori! |
E in effetti Totem, me ne sono accorto anch'io in quanto non capivo come mai ieri funzionava ed oggi no.
Così ho cambiato "Public Z As Integer" con "Public PosizioneRecord As Integer e nel Private Sub, Z è restato un contatore e una volta trovato il Nominativo da correggere, ho inserito l'istruzione PosizioneRecord = Z e tutto è tornato a funzionare.
Mi rimane sempre il problema di dove inserire la variabile PosizioneRecord in modo da eliminare il precedente Nominativo ed inserire al suo posto quello corretto.
Ti rinnovo la richiesta di un tuo aiuto ringraziandoti anticipatamente.
alpi39 (Alberto) |
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Non capisco. Non è che la posizione delle variabile te lo elimini automaticamente XD Devi scrivere del codice, di cui noi non sappiamo niente. Magari se postassi qualcosa in più...
|
|
alpi39 (Normal User)
Pro
Messaggi: 63
Iscritto: 07/03/2008
|
Hai ragione Totem, ma io pensavo che il codice da me inviato in precedenza sarebbe stato sufficiente.
Comunque,quello che allego qui sotto è il codice corretto nel quale tu potresti intervenire dandomi un validissimo aiuto. Come sicuramente capirai, la variabile che identifica la posizione del nominativo da correggere è PosizioneRecor.
Grazie infinite.
alpi39 (alberto)
Public Class Form1
Public PosizioneRecord As Integer
_____________________________________________________
'Button2 DOVREBBE SERVIRE per registrare un nominativo corretto
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'Apre il file C:\Agenda.txt
Dim Nominativo As String = ""
Dim Percorso As String = "C:\Agenda"
Dim PercorsoFile As String = "C:\Agenda\Agenda.txt"
For I As Byte = 1 To 11
If I < 11 Then Nominativo = Nominativo + Me.Controls("TextBox" & I).Text + (",")
Next I
Nominativo = Nominativo + Me.Controls("TextBox" & 11).Text + Chr(13)
'Crea la cartella “Agenda” ed al suo interno, il file “Agenda.txt” se assente
'oppure lo apre in lettura e lo aggiorna attraverso la determinazione della sua esistenza (metodo fileExist)
System.IO.Directory.CreateDirectory(Percorso)
' È possibile utilizzare Metodo My.Computer.FileSystem.
'WriteAllText per scrivere del testo all'interno dei file.
'Se il file specificato non esiste, viene creato automaticamente.
My.Computer.FileSystem.WriteAllText(PercorsoFile, Nominativo, True)
End Sub
|
|
alpi39 (Normal User)
Pro
Messaggi: 63
Iscritto: 07/03/2008
|
Ti faccio presente che le variabili Z e PosizioneRecord vengono attivate nella private sub precedente, quella che cerca e richiama il Nominativo.
|
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Io dovrei correggere la procedura che usa Z e posizioneNominativo, ossia quella che non hai postato. Con l'altra non so cosa fare.
|
|
alpi39 (Normal User)
Pro
Messaggi: 63
Iscritto: 07/03/2008
|
Postato originariamente da Il Totem:
Io dovrei correggere la procedura che usa Z e posizioneNominativo, ossia quella che non hai postato. Con l'altra non so cosa fare. |
OK Totem.
Pensavo che il tuo intervento dovesse avvenire nella procedura che serve a salvare il Nominativo corretto. Ti chiedo scusa e posto il codice della procedura che usa le variabili Z e posizioneNminativo.
___________________________________________________
'Button3 serve per richiamare un Nominativo
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
'Apre il file C:\Agenda.txt
Dim r As New IO.StreamReader("C:\Agenda\Agenda.txt")
Dim Record As String = ""
Dim A As Integer
Dim I As Integer
Dim Z As Integer
Dim NumTextBox As Integer = 11
Dim Dato(NumTextBox) As String
Dim TextBox(NumTextBox)
Dim Parola As String = ""
'Cerca nelle varie TextBox.Text quale sarà¡ la parola da cercare
For Each MyControl In Me.Controls
If TypeOf MyControl Is TextBox Then
Dim temp As String = MyControl.Text
If temp <> "" Then
Parola = Parola + MyControl.Text
Exit For ' trovata la parola presente esco dal ciclo in quanto non serve leggere altro
End If
End If
Next
'Va a cercare tra i vari record del file 'Agenda.txt quale
'di questi contiene 'Parola'
Z = 0
Do While Not r.EndOfStream
'Attribuisce alla variabile Record
'la stringa che sta leggendo
Record = r.ReadLine
Z = Z + 1
'Controlla con l'istruzione inStr
'se all'interno della stringa Record esiste la stringa Parola
A = InStr(Record, Parola)
'se esiste...
If A <> 0 Then
PosizioneRecord = Z
For I = 1 To 10
'Va a cercare all'interno della stringa Record dove si trova la virgola
'ed assegna ad A la sua posizione
A = InStr(Record, ",")
'Trovata la virgola, assegna alla TextBox di turno il valore
'dall'inizio di Record fino alla posizione precedente alla virgola
For Each MyControl In Me.Controls
If MyControl.Name = ("TextBox" & (I)) Then
MyControl.Text = Mid$(Record, 1, A - 1)
End If
Next
'Assegna a Record il suo nuovo valore che va da dopo la virgola fino alla fine di Record
Record = Mid$(Record, A + 1, Len(Record))
Next I
'Se nelle Note non è stato inserito niente e quindi Record (con l'ultimo inserimento) si è esaurito.
If Len(Record) <= 1 Then
Record = "Per questo nominativo non sono state inserite Note"
End If
'L'ultimo tratto di Record (poiché non ci sono più virgole)
'viene assegnato all'ultima TextBox l'11ª
For Each MyControl In Me.Controls
If MyControl.Name = ("TextBox" & (I)) Then
MyControl.Text = Record
End If
Next
End If
Loop
End Sub
___________________________________________________
Ecco Totem ciò di cui tu mi hai detto di aver bisogno per venirmi in aiuto. Ora li hai entrami sia quello che richiama il Nominativo in visione, che quello che dovrebbe salvare la correzione.
Ti ringrazio tantissimo
alpi39 (Alberto) Ultima modifica effettuata da alpi39 il 20/06/2008 alle 14:56 |
|
Il Totem (Admin)
Guru^2
Messaggi: 3635
Iscritto: 24/01/2006
|
Ho visto che nella seconda procedura hai usato un For per trovare la posizione di un record. Nella prima, invece, hai solamente aggiunto il record modificato al file esistente, duplicandolo.
Dovresti fare nella prima ciò che hai fatto nella seconda, ossia cercare il record di posizione PosizioneNominativo. Usa il metodo IO.File.ReadAllLines("file") per ottenere un array di stringhe rapppresentanti tutte le linee, quindi preleva la (PosizioneNominativo-1)esima linea, modificala, e quindi riscrivi tutto l'array sullo stesso file sovrascrivendolo.
|
|