Lire Csv à l'aide de LINQ
J'ai un fichier csv comme ce
A, 22, 23, 12
B, 32, 4, 33
C, 34, 3 ,33
Je veux imprimer la somme et la moyenne de chaque ligne et de sauter la première colonne. Comment faire en LINQ en utilisant la Lambda
Vous devez vous connecter pour publier un commentaire.
Si vous êtes à la lecture de gros fichiers et l'utilisation de la mémoire est un sujet de préoccupation, alors la liste suivante sera mieux travailler de .NET 4:
Dans les deux cas, la
stuff
variable contient une énumération qui n'est pas le fait d'être exécutée jusqu'à ce que vous commencer à lire (p. ex. à l'intérieur d'unforeach
boucle).X = (int)x[1]
ne compile pas. Essayez d'utiliserInt32.Parse()
ouConvert.ToInt32()
.ReadAllLines
àReadLines
.ReadLines
dans le deuxième exemple.ReadAllLines
charge l'intégralité du fichier dans un tableau de chaînes dans la mémoire, maisReadLines
lit une ligne à la fois comme unIEnumerable<string>
, qui fonctionnera mieux pour les très gros fichiers.Essayez d'utiliser cette vieille mais toujours de bonne bibliothèque:
FileHelpers Bibliothèque
Il est très facile à utiliser:
puis il suffit de faire:
J'ai juste découvert LinqToCsv de la bibliothèque, il ne l'analyse des trucs et puis vous pouvez interroger des objets comme des collections et il supporte la lecture différée:
http://www.codeproject.com/Articles/25133/LINQ-to-CSV-library
Hi
vous êtes à la recherche de quelque chose comme cela
Quelque chose comme ceci peut-être:
En général, je vous suggère de ne pas faire quelque chose comme cela. Vous devez utiliser une pleine soufflé CSV reader pour analyser le fichier CSV et vous devez inclure le traitement des erreurs.
Le streaming aporoach vous permettra de gérer laregr fichiers, car vous n';t besoin toload en mémoire de la première.
N'ont pas VS ici, vous n'avez pas vérifié la syntaxe, peut ne pas compiler comme est.
Ce qui concerne GJ
Merde, beaucoup de réponses déjà, plus besoin de taper plus vite!
En fait pour la plupart des cas, vous devriez éviter le fractionnement basé sur
','
seulement parce que vous pourriez avoir coma dans la chaîne.Je vous donner une meilleure solution générique à l'aide de Regex et facile à utiliser:
Et vous pouvez trouver plus de détails ici https://stackoverflow.com/a/18147076/196526