Bonjour a tous,
je dois parser un fichier csv de plusieurs Go, je voudrais pour le stockage de ce fichier qu'il soit compressé (zip ou autre).
auriez vous une lib permettant l'accès au données d'un fichier txt même si celui-ci est compressé ?
Merci
Version imprimable
Bonjour a tous,
je dois parser un fichier csv de plusieurs Go, je voudrais pour le stockage de ce fichier qu'il soit compressé (zip ou autre).
auriez vous une lib permettant l'accès au données d'un fichier txt même si celui-ci est compressé ?
Merci
Salut,
Regarde du coté de System.IO.Compression, tu y trouvera peut être ton bonheur.
Merci mais j'avais déjà regardé, pas vu de moyen pour lire un fichier en accès aléatoire sans le décompresser.
Bah normal puisque ca tient de l'impossible (ou presque).
Le fait est qu'une fois compressé tu n'as plus aucun repaire sur les lignes. Tu ne peux pas non plus savoir où tu peux démarrer une décompression sans décompressé ce qui précède. Tu ne peux pas non plus être certain qu'un octet n'est pas composé a la fois du début d'une ligne et la fin d'une autre.
Mais si je t'ai pointé sur ca c'est parce que ca implémente l'algorithme de compression et c'est tout ce dont tu as besoin.
A toi de créer ton format de sauvegarde.
Par exemple tu peux sauvegarder ton fichier sous cette forme :
- FileHeader
- RowSet[]
- GzipData[]
FileHeader est une structure contenant :
- De quoi identifier que le fichier est bien dans ton format
- Eventuellement une gestion de la version du format
- Combient de RowSet data il y a
Directement à la suite tu place X RowSet (où X est le nom spécifié dans FileHeader), structure de cette forme :
- Offset du GZipData concerné
- Nombre de lignes contenus dans ce GZipData
- un CRC (ou autre hash) pour vérification que les données décompressées sont bien celles qui avaient été compressée
Les GZipData sont les octets obtenus lors de la compression d'un lot de ligne.
Et voila, tu peux maintenant décompresser uniquement des petits jeux de lignes sans décompresser le tout.
Dans certains cas ca sera vrai aussi pour la compression.