Pivello ha scritto:
ho un file di testo dove ci sono diverse migliaia di righe con dati che hanno una logica particolare.
Lo conosciamo... è sempre quello stesso file di testo di cui vai parlando da settimane, quello creato dal famigerato collega tanti anni fa, che ha una "logica particolare" di cui però - in ben tre discussioni che hai aperto sempre per lo stesso motivo - ancora non c'è stato verso di sapere né come è fatto, né come è strutturato, né c'è stata la possibilità di vederne un pezzettino, nonostante questo sia stato richiesto innumerevoli volte.
Pivello ha scritto:
chi ha impostato questi file inizialmente aveva un senso.
No, è del tutto probabile che un senso non ce l'abbia mai avuto.
Pivello ha scritto:
cmq per non divagare prendo una riga alla volta la splitto e metto in un array (per fare esperienza) il codice del prodotto e il prezzo.
Non so che tipo di esperienza possa derivare da questa operazione: è come lavorare in una cucina e, per esperienza, mettersi a fissare i cucchiai da minestra riflettendocisi dentro prima di riporli. Si tratta di una operazione elementare: l'array è una delle strutture più basiche con cui si può avere a che fare, e lo "split" delle informazioni di fatto viene eseguito dal framework chiamando l'apposito metodo, quindi più che "per esperienza" si tratta di una banale logica di parsing di un file di testo che probabilmente è assimilabile a un CSV. Dico "probabilmente" perché, di nuovo, non lo abbiamo mai visto, e non starò qui a chiederlo di nuovo.
Pivello ha scritto:
Lo aggiungo in un dictionary e nel frattempo sommo ogni vendita effettuata negli ultimi 3 anni.
Lo so la scrittura è molto elementare. Però sembra gira tutto bene.
Ne dubito. Ci sono pezzi di codice che non hanno un senso evidente, oppure contengono errori formali e anche sostanziali.
Segue qualche esempio.
StreamReader leggi = new StreamReader("C:\\Users\\PC\\Desktop\\CONSOLLE\\ricavo_prodotti.txt");
Perché lo StreamReader viene istanziato in questa posizione e assegnato a un campo del Form? Rimarrà attivo fino a quando il Form sarà in memoria, tenendo bloccato il file e occupando risorse inutilmente. Il file va aperto nel momento in cui serve, e va chiuso una volta che i dati sono stati caricati. Leggi la
documentazione su StreamReader.
string[,] prodotto = new string[1,2];
string[] subrigo;
string rigo;
Dictionary<string, decimal> dizionario = new Dictionary<string,decimal>();
Idem come sopra: sono tutte variabili che possono essere locali, forse tranne
dizionario visto che è usato da più metodi.
public Form1()
{
InitializeComponent();
prodotto[0, 0] = "0";
prodotto[0, 1] = "0";
System.Globalization.CultureInfo.CurrentCulture = new System.Globalization.CultureInfo("en-US", false);
}
Questo uso di prodotto e la sua inizializzazione globale (che mi pare non venga nemmeno modificata) non ha senso: i dati dei prodotti vengono caricati quindi non serve tenere in memoria questa informazione, né si capisce a cosa serve (anche per via del fatto che si chiama "prodotto" e quindi non dice nulla).
else
{
dic.Add(codice, prezzo);
dic = dic.OrderBy(x => x.Key).ToDictionary(x => x.Key, x => x.Value);
}
}
A che serve ordinare continuamente il dizionario ogni volta? Il dizionario è "naturalmente" ordinato per chiave, quindi non va riordinato a mano, tra l'altro creando in seguito un altro dizionario che è già appunto ordinato per chiave, per definizione.
Mi fermo qui, ma ci sono tantissimi altri errori che rendono illeggibile il codice, poco comprensibile, ed è evidente che stai usando elementi (classi, metodi, ecc.) un po' a casaccio, senza vedere esempi corretti di utilizzo o leggere la relativa documentazione per capire qual è l'uso corretto degli strumenti che usi.