Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - Eliminare riga file xml in .NET
Forum - C# / VB.NET - Eliminare riga file xml in .NET

Avatar
arterella (Normal User)
Rookie


Messaggi: 37
Iscritto: 14/07/2012

Segnala al moderatore
Postato alle 9:31
Mercoledì, 25/07/2012
Ciao a tutti,
avrei bisogno di una mano :)

Io ho un file .xml dove vengono salvati tutti i nomi dei file che il mio programma crea (programma in .NET).
Praticamente il programma estrae i dati di vendita dal nostro gestionale, li elabora e crea vari files (il file con le giacenze, il file delle vendite etc).

Esempio:
-<FileState>
       <FileName>
             C:\Documents and Settings\All Users\Dati applicazioni\128.20120428.Z
        </FileName>
  <Uploaded>true</Uploaded>
  <UploadDate>2012-04-28T22:10:49.53125+02:00</UploadDate>   <DataDate>2012-04-29T00:00:00</DataDate> <CheckedFTPPresence>true</CheckedFTPPresence> </FileState>

Quando il negozio è chiuso non crea il file ma salva solo nel file xml che ha cercato di estrarre i dati scrivendo il nome del file "Fittizio.txt". e quindi filename sarà

<Filename>
    Fittizio.txt
</Filename>

Ora è successo che in un negozio hanno avuto problemi e invece di creare i dati corretti mi ha creato tanti dati fittizi quante sono state le giornate problematiche.
Siccome il programma è pensato per estrarre i dati una sola volta (tranne il caso in cui vengano estratti manualmente giorno per giorno), non riesco a fargli ricreare le giornate "mancanti".
se controllo le date non riesco a controllare il nome del file, se controllo il nome del file e cerco di ricrearlo gli dà la data sbagliata.
Ho pensato quindi di cancellare dal file di controllo .xml tutte le righe che contengono "fittizio.txt" ma sinceramente non so come si fa....
esiste una funzione Delete() che mi faccia fare ciò?
Non posso nè estrarre i dati manualmente, nè modificare l'xml manualmente, perchè deve essere tutto automatizzato..... (capo docet!)
Grazie se riuscite a darmi una dritta

Ingrid

Ultima modifica effettuata da arterella il 25/07/2012 alle 9:43


...per fare un uomo non basta un cervello....
PM Quote
Avatar
HeDo (Founder Member)
Guru^2


Messaggi: 2763
Iscritto: 21/09/2007

Segnala al moderatore
Postato alle 9:58
Mercoledì, 25/07/2012

a parte la pratica abominevole di creare delle entry fittizie, puoi risolvere il tutto utilizzando un po di xquery. In questo post su msdn ti spiegano come fare: http://social.msdn.microsoft.com/Forums/en-US/csharpgenera ...


Ingegnere Informatico
https://ldlagency.it
PM Quote
Avatar
arterella (Normal User)
Rookie


Messaggi: 37
Iscritto: 14/07/2012

Segnala al moderatore
Postato alle 10:03
Mercoledì, 25/07/2012
Testo quotato

Postato originariamente da HeDo:


a parte la pratica abominevole di creare delle entry fittizie, puoi risolvere il tutto utilizzando un po di xquery. In questo post su msdn ti spiegano come fare: http://social.msdn.microsoft.com/Forums/en-US/csharpgenera ...



A mia discolpa posso solo dire che il programma non l'ho fatto io! L'ha fatto un programmatore che si è licenziato e io ho dovuto prendere in mano sto casino immenso :S
Adesso guardo il link.
Grazie
Ingrid


...per fare un uomo non basta un cervello....
PM Quote
Avatar
arterella (Normal User)
Rookie


Messaggi: 37
Iscritto: 14/07/2012

Segnala al moderatore
Postato alle 11:58
Mercoledì, 25/07/2012
Sono riuscita a risolvere il problema che o controllavo le date o il nome del file facendo un controllo sull'xml

Codice sorgente - presumibilmente VB.NET

  1. [CODE]
  2.  
  3.     Private Sub _RegenerateDummyFiles()
  4.  
  5.         ' crea i file corretti ma bisogna cancellare la riga dummy.txt sennò
  6.         ' la ricrea in eterno!
  7.    
  8.         Dim oFileState As New Settings.FileState
  9.         Dim oTempSettings = CType(Me.Settings.Clone, Phoenix.DataCollect.Settings.Settings)
  10.  
  11.  
  12.         For Each xDate In Me.Settings.SalesHeader.DatesExtracted
  13.             For Each oElement In Me.Settings.SalesHeader.FileState
  14.  
  15.                 If oElement.CheckedFTPPresence = False Then
  16.                     If oElement.DataDate = xDate Then
  17.                         _CreateAndUploadFilesPeriod2(xDate, xDate)
  18.                     End If
  19.                 End If
  20.  
  21.             Next
  22.         Next
  23.  
  24.       End Sub
  25. [/CODE]



E già ho fatto un passo avanti :k: , il problema è che non cancellando la parte sbagliata nel foglio xml mi continuerà a ricreare ogni giorno i dati che sono fittizi.....
Vediamo se con le xquery ci riesco..... :pat:


...per fare un uomo non basta un cervello....
PM Quote
Avatar
arterella (Normal User)
Rookie


Messaggi: 37
Iscritto: 14/07/2012

Segnala al moderatore
Postato alle 17:57
Giovedì, 26/07/2012
Allora con le xquery non sono riuscita.... allora mi sono "studiata" per bene l'xml, e i file fittizi segnano FALSE nell'upload, siccome il controllo per ricreare i files lo faccio su questo FALSE ho pensato di cancellare il <CheckedFTPPresence>false</CheckedFTPPresence>, perchè sennò ogni giorno alla partenza del programma mi ricreerebbe i dati di queste giornate...

Ho fatto così:


Codice sorgente - presumibilmente VB.NET

  1. Private Sub _DeleteDummyFiles()
  2.      
  3.         Dim lineaRicerca As String = "<CheckedFTPPresence>false</CheckedFTPPresence>"
  4.         Dim lineaSostituzione As String = " "
  5.         Dim linee As String() = IO.File.ReadAllLines("C:\ProgramData\settings.xml")
  6.        
  7.  
  8.         For i As Integer = 0 To linee.Count - 1
  9.             If linee(i) = lineaRicerca Then
  10.                 linee(i) = lineaSostituzione
  11.             End If
  12.         Next
  13.         IO.File.WriteAllLines("C:\ProgramData\settings.xml", linee)
  14.        
  15.         _SaveLocalSettings(Me.Settings)
  16.  
  17.     End Sub



In poche parole, scorro il file xml e se trovo la riga uguale a quella che io cerco la cancello.... potrei anche mettere qualcosa tipo <CheckedFTPPresence>RICREATO</CheckedFTPPresence>

Devo solo aggiungere un piccolo controllo.... perchè se per caso un file "vero" non è stato "uploaddato" sull'ftp rischio che poi questo non venga più caricato.




...per fare un uomo non basta un cervello....
PM Quote