Salvataggio Dati List Ctrl in txt

di il
6 risposte

Salvataggio Dati List Ctrl in txt

Ho una list ctrl con 3 variabili, Nome che inserisco io, ora (presa dal sistema) , data (presa dal sistema)
Al click di un pulsante conferma (chè è anche quello che inserisce il nome) vorrei che salvasse ogni singola riga andando a capo per ogni riga quante sono quelle nella list ctrl

Esempio:

Nome 1 - 00:00 - 00/00/0000
Nome 2 - 00:00 - 00/00/0000
Nome 3 - 00:00 - 00/00/0000

Con questo codice mi scrive la riga che inserisco doppia

self.file25 = open(r"C:\Users\Tizio\Desktop\Log.txt","a")
for row in range(self.list_ctrl.GetItemCount()):
self.file25.write(" - ".join([self.list_ctrl.GetItem(row, col).GetText() for col in range(self.list_ctrl.GetColumnCount())])+ '\n')
self.file25.close()

Dove sbaglio?

Grazie in anticipo!

6 Risposte

  • Re: Salvataggio Dati List Ctrl in txt

    Usa i tag CODE per allegare codice. Se non mostri come è indentato il tuo spezzone, non possiamo valutare cosa fa (anche se è intuibile). Inoltre, dovresti specificare con che libreria stai lavorando (penso sia wxWidgets/wxPython, ma se lo specifichi è meglio).
  • Re: Salvataggio Dati List Ctrl in txt

    Andrea Quaglia ha scritto:


    Usa i tag CODE per allegare codice. Se non mostri come è indentato il tuo spezzone, non possiamo valutare cosa fa (anche se è intuibile). Inoltre, dovresti specificare con che libreria stai lavorando (penso sia wxWidgets/wxPython, ma se lo specifichi è meglio).
    Buongiorno, si la libreria che utilizzo e WX, Di seguito la funzione che utilizzo:
    
    def add_line(self,event):
            val = str(self.CTesto.GetValue())
            dataCorrente = datetime.datetime.now()
            oraAttuale =(dataCorrente.strftime("%H:%M:%S"))
            plus = (datetime.datetime.strptime(oraAttuale, "%H:%M:%S") + datetime.timedelta(minutes=5))
            plus2 = plus.strftime("%H:%M:%S")
    
            if val == ' ':
                
                msg = wx.MessageDialog(self, "Errore Campo Operatore Vuoto", "Errore", wx.OK| wx.ICON_ERROR)
                msg.ShowModal()
                msg.Destroy()
                
            else:
            
                self.list_ctrl.InsertItem(self.index, val)
                self.list_ctrl.SetItem(self.index, 1, oraAttuale)
                self.list_ctrl.SetItem(self.index, 2, str(plus2))
                self.index += 1
                InsVal = (val + " - " + oraAttuale + " - " + plus2 + '\n')
                self.CTesto.Clear()
    
                print (InsVal)
                
                self.file25 = open(r"C:\Users\Tizio\Desktop\Log.txt","a")
    	   for row in range(self.list_ctrl.GetItemCount()):
    		self.file25.write(" - ".join([self.list_ctrl.GetItem(row, col).GetText() for col in range(self.list_ctrl.GetColumnCount())])+ '\n')
    		self.file25.close()
    
    Con questa funzione mi inserisce i dati nella listCtrl e poi vorrei salvarli in un txt. Pero con quel salvataggio, l output ottenuto nel txt è il seguente:

    Prova - 08:23:55 - 08:28:55
    Prova - 08:23:55 - 08:28:55
    Prova 1 - 08:23:56 - 08:28:56

    Mi ripete la prima riga due volte quando lo inserita solo 1 volta.
  • Re: Salvataggio Dati List Ctrl in txt

    Sicuro di aver indentato così?
     self.file25 = open(r"C:\Users\Tizio\Desktop\Log.txt","a")
    for row in range(self.list_ctrl.GetItemCount()):
    	self.file25.write(" - ".join([self.list_ctrl.GetItem(row, col).GetText() for col in range(self.list_ctrl.GetColumnCount())])+ '\n')
    	self.file25.close()
    Questa indentazione dovrebbe darti un ValueError dopo la prima scrittura.
    Se comunque funziona, allora significa che o c'è un elemento in più nella ListCtrl, o c'è qualcosa che viene ritornato due volte. Prova ad usare un debugger o a stampare i risultati ritornati da self.list_ctrl.GetItemCount().
  • Re: Salvataggio Dati List Ctrl in txt

    Andrea Quaglia ha scritto:


    Sicuro di aver indentato così?
     self.file25 = open(r"C:\Users\Tizio\Desktop\Log.txt","a")
    for row in range(self.list_ctrl.GetItemCount()):
    	self.file25.write(" - ".join([self.list_ctrl.GetItem(row, col).GetText() for col in range(self.list_ctrl.GetColumnCount())])+ '\n')
    	self.file25.close()
    Questa indentazione dovrebbe darti un ValueError dopo la prima scrittura.
    Se comunque funziona, allora significa che o c'è un elemento in più nella ListCtrl, o c'è qualcosa che viene ritornato due volte. Prova ad usare un debugger o a stampare i risultati ritornati da self.list_ctrl.GetItemCount().
    Ti ringrazio per la risposta, per quanto riguarda l'indentazione ti garantisco che è corretta nel mio editor.
    Inoltre ho provato il tuo consiglio ma se eseguo un print di self.list_ctrl.GetItemCount()) quello che ottengo è un numero (crescente) per ogni volta che inserisco un dato nella listCtrl. Ti allego un esempio:

    Questi risultati di esempio stampati nella shell inserendo i 3 dati .

    prova - 08:05:25 - 08:06:25 (Questo è un print di una variabile che mi sono creato che contiene i 3 valori)

    1 il risultato di print (self.list_ctrl.GetItemCount())
    prova 2 - 08:05:32 - 08:06:32 (Questo è un print di una variabile che mi sono creato che contiene i 3 valori)

    2 il risultato di print (self.list_ctrl.GetItemCount())
    prova 3 - 08:05:36 - 08:06:36 (Questo è un print di una variabile che mi sono creato che contiene i 3 valori)

    3 il risultato di print (self.list_ctrl.GetItemCount())


    Un altro esempio del risultato che ottengo:

    aaa --> inserito solo 1 volta me lo scrive 2 volte nel file.txt
    dddd --> inserito solo 1 volta

    RISULTATO:
    aaa - 08:11:13 - 08:12:13
    aaa - 08:11:13 - 08:12:13
    dddd - 08:11:15 - 08:12:15

    Secondo me c'è qualche errore nel codice del For per il salvataggio.
  • Re: Salvataggio Dati List Ctrl in txt

    Prova così:
    for row in range(self.list_ctrl.GetItemCount()):
    	print(" - ".join([self.list_ctrl.GetItem(row, col).GetText() for col in range(self.list_ctrl.GetColumnCount())])+ '\n')
    Così vediamo se è un problema del file o no.
  • Re: Salvataggio Dati List Ctrl in txt

    Andrea Quaglia ha scritto:


    Prova così:
    for row in range(self.list_ctrl.GetItemCount()):
    	print(" - ".join([self.list_ctrl.GetItem(row, col).GetText() for col in range(self.list_ctrl.GetColumnCount())])+ '\n')
    Così vediamo se è un problema del file o no.
    Buongiorno,

    direi che non è un problema del file ma del ciclo, in quanto inserendo solo il ciclo senza apertura e chiusura del file, ecc... Provando a inserire 2 dati Prova 1 e Prova 2 il risultato del print è il seguente:

    Prova 1 - 08:32:43 - 08:33:43

    Prova 1 - 08:32:43 - 08:33:43

    Prova 2 - 08:32:46 - 08:33:46

    Quando in realtà dovrebbe essere:

    Prova 1 - 08:32:43 - 08:33:43

    Prova 2 - 08:32:46 - 08:33:46

    Diciamo che ho risolto il problema in questo modo: io questi 3 dati li metto in una variabile, che viene incrementata, salvo semplicemente la variabile nel file.
    Non so se poi per altri scopi può crearmi delle limitazioni o altro, ma per il momento mi sono "tolto" il problema...
    Ma sarei comunque curioso di capire perchè con il ciclo for non funziona.

    Grazie!
Devi accedere o registrarti per scrivere nel forum
6 risposte