Write / Edit CSV-file (ne pas réécrire le fichier entier!)

Je suis en mesure de remplacer certaines fonctionnalités d’un client fonctionnant directement sur un fichier CSV, qui servait de fichier de configuration pour un système.

La plupart des cas disponibles sur la recherche concernent la lecture de fichiers CSV vers d’autres formats.

Autre prend tout le fichier CSV en mémoire, en joignant les lignes et les modifications dédiées, puis en les écrivant dans un nouveau fichier (ou écrasant le fichier existant).

Je voudrais faire cette tâche plus intelligemment et demander des conseils et des idées de code.
Nous pouvons supposer qu’un seul utilisateur à la fois devrait avoir access au fichier.
Le fichier est lu avec File.ReadLines () .NET 4.

En plus de mon exemple de projet,

var lines = from l in File.ReadLines("/Linq2Csv/data.csv") where l.Split(',')[0].StartsWith("Jonas") //Just test 'n pick 1 line select new { Name = l.Split(',')[0], ... 

Un fichier CSV est juste un fichier texte séquentiel.

Si vous souhaitez modifier le contenu, vous devez lire le fichier entier en mémoire, le modifier et l’écrire à nouveau.

Supposons un cas plus général d’un fichier contenant les éléments suivants:

ABCDEFGHIJKLMNOPQRSTUV

Si vous souhaitez supprimer “IJLKM” du milieu, vous devez lire le rest du fichier (NOP …) pour pouvoir le mélanger afin de le rencontrer (… FGH).

Si vous souhaitez insérer “0123456789” entre “M” et “N”, vous devez lire NZ, sinon les nouveaux caractères remplaceront simplement “NOPQRSTUVW”.

Le .NET Framework v4.0 est livré avec une nouvelle classe pour la prise en charge des fichiers mappés en mémoire, voir

  1. msdn
  2. article

Vous aurez une bonne chance de faire ce travail pour vous. Vous serez toujours confronté au problème à résoudre lorsque les changements de linnerghts. Toutefois, si vous souhaitez un access aléatoire et des mises à jour parasites (en remplaçant “MSFT” par “UNIX”, par exemple), vous obtiendrez des performances inégalées.

Vous pouvez utiliser des stratégies de rembourrage pour disposer d’une “pièce de rechange” dans chaque cellule / ligne afin de résoudre les problèmes liés à la modification de la longueur des champs / lignes.

En général, je ne pense pas que le coût des fichiers CSV vaille la peine, mais la technique est utilisée de temps en temps et mérite d’être mentionnée.

A bientôt, Seth

La seule façon d’y parvenir dans .NET consiste à le déplacer d’un fichier csv à une véritable firebase database.

Vous pouvez ouvrir un fichier texte comme s’il s’agissait d’une table dans une firebase database. Voir les exemples de ConnectionSsortingng pour vous y connecter ici: http://www.connectionssortingngs.com/textfile

Cependant, même utiliser .NET comme firebase database n’empêchera pas le code sous-jacent de remplacer tout le fichier lorsqu’il sera mis à jour.

Les fichiers texte n’étaient tout simplement pas destinés aux utilisateurs simultanés. C’est pourquoi les vraies bases de données existent.