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
C# / VB.NET - modificare file XML
Forum - C# / VB.NET - modificare file XML - Pagina 3

Pagine: [ 1 2 3 ] Precedente | Prossimo
Avatar
bernie (Normal User)
Pro


Messaggi: 164
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 15:00
Mercoledì, 30/06/2021
Ciao Carlo
Grazie per i due esempi , sono entrambi validi , al momento la necessità è di cambiare tutti i campi dall'1 al 7 con lo stesso valore,non escludo in futuro la necessità di avere valori differenti tra loro nei vari campi . Per il momento ho adottato la prima soluzione adattandola al mio bisogno .
Codice sorgente - presumibilmente VB.NET

  1. Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
  2.         XML = File.ReadAllText("C:\Digitalframe\XUSB.xml") ' carico il file
  3.         Dim pos As Integer = 1 ' lo uso anche come startindex, ricerca in sequenza
  4.         For p = 1 To 7
  5.             pos = XML.IndexOf("<PaletteRemap" & p.ToString, pos) ' indice del nome progressivo
  6.             XML = XML.Remove(pos + 37, 1).Insert(pos + 37, livello.ToString) ' sostituzione con valore livello
  7.         Next
  8.         File.WriteAllText("C:\Digitalframe\XUSB.xml", XML)
  9. End Sub


Così facendo modifico solo da 1 a 7 e il valore da inserire(livello) è il risultato di un calcolo eseguito in altro posto .
Grazie di nuovo

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 17:13
Mercoledì, 30/06/2021
Perfetto,
Testo quotato


Così facendo modifico solo da 1 a 7 e il valore da inserire(livello) è il risultato di un calcolo eseguito in altro posto .


perché il for parte da 1, non perché hai messo pos=1 nell'istruzione in riga 3:
Codice sorgente - presumibilmente C# / VB.NET

  1. Dim pos As Integer = 1


Questa correzione mi ha fatto capire che non hai compreso il duplice compito di pos.

pos è la posizione in cui si trova il primo carattere di: "<PaletteRemap" & p.ToString
ma pos è anche il punto di partenza di ricerca di IndexOf: XML.IndexOf("<PaletteRemap" & p.ToString, pos)

Averlo messo a uno nella dichiarazione, significa che la prima ricerca che effettuerai per trovare: "<PaletteRemap" & p.ToString, partirà dalla posizione 1 nel file invece che da 0, di fatto non cambia nulla.
Mentre il ciclo For con p=1, fa quello che vuoi, iniziare da "<PaletteRemap1"

Il ciclo  For p = 1 To 7 funziona così:
pos = 0
p = 1
IndexOf scorrerà tutto il file XML a partire dalla posizione zero, e quando trova la prima occorrenza di: "<PaletteRemap1", si ferma e mette nella variabile pos la posizione del primo carattere di: "<PaletteRemap1"  (4480)

al secondo ciclo pos=4480
p = 2

IndexOf scorrerà il file XML a partire dalla posizione 4480, e quando trova la prima occorrenza di: "<PaletteRemap2", si ferma e mette nella variabile pos la posizione del primo carattere di: "<PaletteRemap2"  (4532)

e così via, praticamente il file XML viene scansionato sequenzialmente senza ripartire dall'inizio ogni volta.

Sono piccolezze, ma la consapevolezza di quello che si fa e perché è essenziale per scrivere un programma con la propria testa.


Ultima modifica effettuata da Carlo il 15/07/2021 alle 20:00


in programmazione tutto è permesso
PM Quote
Avatar
bernie (Normal User)
Pro


Messaggi: 164
Iscritto: 23/10/2019

Segnala al moderatore
Postato alle 17:41
Mercoledì, 30/06/2021
AHHHH
Grazie per la spiegazione, infatti non lo avevo capito. Quindi lui scansiona tutto il file,a partire dalla posizione 0, poi quando trova la stringa allora cambia il valore. Il secondo giro riparte da dove si era fermato prima. Hai fatto benissimo, perché per assurdo, se dovevo scansionate un file dove la stringa interessata era in posizione 0 non lo avrei mai trovato.
Grazie 1000
Gentilissimo.

PM Quote
Avatar
Carlo (Member)
Guru


Messaggi: 1344
Iscritto: 29/01/2018

Segnala al moderatore
Postato alle 20:47
Mercoledì, 30/06/2021
Esatto!!! :rotfl::k:


in programmazione tutto è permesso
PM Quote
Pagine: [ 1 2 3 ] Precedente | Prossimo