Auteur de questions
Lecture fichier CSV et intégration données dans dictionnaire

Discussion générale
-
Bonjour,
Je dois lire un fichier CSV pour récupérer les données qui s'y trouve afin de les insérer ou non dans un dictionary<string,Dictionary<Guid, string>>.
Voici la structure de mon fichier CSV (par exemple):
GUID|FR|EN|DE|NL|ES
9530393e-330f-4987-80e1-62e152943271|Bonjour|Hello|Hallo||
4ff6a5b3-514f-4aba-8332-29811bf74333|Aurevoir||||
436c5760-97f6-45a1-b006-aeb42bd3494f|Fin||||Mon dictionnaire aura la structure suivante (ici):
FR, 9530393e-330f-4987-80e1-62e152943271, Bonjour
EN, 9530393e-330f-4987-80e1-62e152943271, Hello DE, 9530393e-330f-4987-80e1-62e152943271, Hallo NL, 9530393e-330f-4987-80e1-62e152943271,
ES, 9530393e-330f-4987-80e1-62e152943271,
FR,4ff6a5b3514f4aba833229811bf74333, Aurevoir etc...Ma question est donc : comment récupérer les données d'un fichier CSV, puis les comparer avec un dictionnaire afin de les y insérer si la valeur est vide ?
Par exemple ici, Il faut que je regarde si à ma clé "FR", toutes les values correspondant à la clé "9530393e-330f-4987-80e1-62e152943271" sont renseignées, et si non, regarder si il y une nouvelle valeur dans le fichier CSV correspondant à cette clé pour ainsi l'insérer dans le dictionnaire.
Merci
- Type modifié nikhoModerator jeudi 28 juillet 2011 08:12
- Type modifié nikhoModerator jeudi 28 juillet 2011 08:12
Toutes les réponses
-
Bonjour,
La première étape est de lire le fichier CSV
Soit vous écrivez votre fonction pour les lire les lignes soit vous utilisez une méthode déjà écrite comme celle-ci
Ensuite il faut boucler sur le tableau de chaque ligne pour voir si l'entrée existe dans le dictionnaire ou bien l'ajouter comme ceci:
using System; using System.Collections.Generic; using System.Windows.Forms; namespace cs_dico { public partial class Form1 : Form { public Form1() { InitializeComponent(); } private void Form1_Load(object sender, EventArgs e) { Dictionary<string, int> dico = new Dictionary<string, int>(); dico.Add("chaine1", 2); dico.Add("chaine2", 5); dico.Add("chaine3", 21); dico.Add("chaine11", 32); dico.Add("chaine101", 102); foreach (var item in dico) { MessageBox.Show("La clef est: " + item.Key + " et la valeur est: " + item.Value.ToString()); } } private bool InDico(Dictionary<string, int> dico2, string chaine2) { bool itIsInDico = false; foreach (var item in dico2) { if (dico2.ContainsKey(chaine2)) { itIsInDico = true; break; } } return itIsInDico; } } }
fred -
Bonjour,
J'ai écris un compteur de mot dont vous pouvez vous inspirer:
ArrayList lines = new ArrayList(); Dictionary<string, int> dico = new Dictionary<string, int>(); StreamReader sr = new StreamReader("C:\\fichier.txt"); while (sr.Peek() > -1) { lines.Add (sr.ReadLine()); } sr.Close(); lines.TrimToSize(); foreach (string line in lines) { //Console.WriteLine(line); string[] split = line.Split(new Char[] { ' ', '\t' }); foreach (string mot in split) { if (dico.ContainsKey(mot)) { if (( mot.Trim() != "") && (mot.Length > 0)) { dico[mot]++; } } else { dico.Add(mot,1); } } } StreamWriter sw = new StreamWriter("C:\\result.txt"); foreach (var item in dico) { //Console.WriteLine(item.Key + " appears " + item.Value + " times"); sw.WriteLine(item.Key + "," + item.Value); } sw.Close();
fred -
Le constructeur IEqualityComparer sert à la comparaison
-