Je possède plusieurs fichiers CSV de 1,5 Go qui contiennent des informations de facturation sur plusieurs comptes pour des clients d'un fournisseur de services. J'essaie de diviser le grand fichier CSV en plus petits morceaux pour traiter et formater les données à l'intérieur.
Je ne veux pas développer mon propre analyseur CSV mais c'est quelque chose que je n'ai pas encore vu donc corrigez-moi si je me trompe. Les fichiers de 1,5 Go contiennent des informations dans l'ordre suivant : informations sur le compte, numéro de compte, date de facturation, transactions, hors taxes, toutes taxes comprises, type et autres lignes.
Notez que la date de facturation ici signifie la date à laquelle la facture a été émise, donc parfois nous avons plus de deux dates de facturation dans le même CSV.
Les factures sont regroupées par : Numéro de compte > Date de facturation > Transactions.
Certains comptes ont 10 lignes de détails de transaction, d'autres ont plus de 300 000 lignes de détails de transaction. Un grand fichier CSV de 1,5 Go contient environ 8 millions de lignes de données (j'utilisais UltraEdit auparavant) pour couper et coller en morceaux plus petits, mais cela est devenu très inefficace et un processus long.
Je veux simplement charger les grands fichiers CSV dans mon WinForm, cliquer sur un bouton, qui divisera ces grands fichiers en morceaux ne dépassant pas 250 000 lignes, mais certaines factures sont en fait plus grandes que 250 000 lignes, auquel cas les laisser en un seul morceau et ne pas diviser les comptes sur plusieurs fichiers puisqu'ils sont déjà classés de toute façon. De plus, je ne veux pas de comptes avec plusieurs dates de facturation dans le CSV, auquel cas le diviseur peut créer une autre division supplémentaire.
J'ai déjà une application WinForm qui formate les CSV en fichiers plus petits automatiquement dans VS C# 2010.
Est-il réellement possible de traiter ces très grands fichiers CSV? J'ai essayé de charger les grands fichiers mais MemoryOutOfException est un problème agaçant car cela plante à chaque fois et je ne sais pas comment le résoudre. Je suis ouvert aux suggestions.
Voici ce que je pense que je devrais faire :
- Charger le grand fichier CSV (mais échoue à cause de l'exception OutOfMemory). Comment résoudre ce problème ?
- Grouper les données par nom de compte, date de facturation et compter le nombre de lignes pour chaque groupe.
- Ensuite, créer un tableau d'entiers.
- Transmettre ce tableau d'entiers à un processus de fractionnement de fichiers qui prendra ces tableaux et écrira les blocs de données.
Toute suggestion sera grandement appréciée.
Merci.