Trovare i doppioni di righe

Posted on 3 marzo 2022. Filed under: Senza categoria |

Ormai sono 10 mesi che sto dietro ai dati di 10 anni della mia stazione meteo e devo ammettere che il software di gestione dato in dotazione è pieno di problemi e bug.

Succede che per un qualche motivo a me sconosciuto, ma che scoprirò, vengono registrate delle doppie registrazioni. Credo, ma non ne ho avuto conferma, che se scarica i dati solari prima e poi quelli dei sensori meteo, vengono create le doppie righe. Non sono tante (un centinaio su un milione di righe) però danno fastidio e le voglio eliminare.

Ma come faccio a trovare cento righe su un milione? E’ come cercare un ago in un pagliaio. Innanzitutto, come ho scoperto la presenza di queste righe? Se dalla query SELECT * FROM DataLog che mi dà il milione di righe, io la modifico in SELECT DISTINCT * FROM DataLog, quindi aggiungo il “DISTINCT”, vedo che mi dà queste 100 righe in meno.

Quindi come le troviamo queste righe? Ho provato a fare il copia e incolla su Excel e poi con i subtotali, ma ci impiega settimane, ho provato a ordinare per data e poi mettere una formula per calcolare la differenza con la riga superiore. Se la differenza è zero, allora nella riga prima c’è la stessa data.

Ma anche in questo caso Excel “EXplode” e se metto in ordine di differenze mette in ordine di come vuole lui. Ho forse scoperto un bug su Excel? Non mi interessa, a me interessa che i dati del Metelog siano ok.

Oppure non li trova.

Andiamo avanti.

Ecco che penso che sono anche un programmatore e mi creo un programmino in VB.NET e poi mettendo un ciclo dove verifico quante righe ci sono per ogni data e dove è maggiore di 1 me lo scrive su un file di testo.

Ecco quindi il codice e il risultato.

    Dim enti As New crystalweb_it_meteoEntities
    Dim linqu = (From www In enti.DataLog Order By www.Realtime Select www.idLog, www.Realtime).ToList
    FileOpen(1, My.Application.Info.DirectoryPath & "\datedoppie.txt", OpenMode.Output)
    For Each qqq In linqu
        Dim idLog = qqq.idLog
        Dim RealTime = qqq.Realtime

        Dim linquu = (From wwww In enti.DataLog Where wwww.Realtime = RealTime).ToList
        If linquu.Count > 1 Then
              Write(1, idLog & ";" & RealTime)
        End If
    Next
    FileClose(1)

Enti è l’oggetto Data Entities, collegato su app.config.

Per questa fase è tutto, ora nuova e forse ultima fase (e forse articolo).

Make a Comment

Rispondi

Inserisci i tuoi dati qui sotto o clicca su un'icona per effettuare l'accesso:

Logo di WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione /  Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione /  Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione /  Modifica )

Connessione a %s...

Liked it here?
Why not try sites on the blogroll...

%d blogger hanno fatto clic su Mi Piace per questo: