public static FichierCsv LireCsv(string code, bool skipHeaders = false) { var newline = Helper.DetecterLigne(code); var lignes = code.Split(new[] { newline }, StringSplitOptions.None); var resultat = new FichierCsv(); var i = 0; resultat.Colonnes = skipHeaders ? new List <string>() : lignes[i++].Split(Program.Separateur).ToList(); //resultat.Lignes = lignes.Skip(1).Select(x => x.Split(Program.SEPARATEUR).ToList()).ToList(); resultat.Lignes = new List <List <string> >(); for (; i < lignes.Length; i++) { var cur = lignes[i]; if (string.IsNullOrWhiteSpace(cur) || cur.All(x => x == Program.Separateur)) { break; } resultat.Lignes.Add(cur.Split(Program.Separateur).ToList()); } return(resultat); }
private void ChargerFichierOptionsExclues(string f) { _csvOptionsExclues = FichierCsv.LireFichierCsv(f); dgvOptionsExclues.Clear(); _csvOptionsExclues.RemplirDgv(dgvOptionsExclues); }
private void ChargerFichierEleves(string f) { dgvEleves.Clear(); _csvFichierEleves = FichierCsv.LireFichierCsv(f); if (_csvFichierEleves.Colonnes.Count != _indices["NB COL"]) { MessageBox.Show( "Le fichier élèves contient " + _csvFichierEleves.Colonnes.Count + " colonnes, alors qu'il devrait normalement en contenir " + _indices["NB COL"] + ". Cela pourrait provoquer des erreurs.", "Attention", MessageBoxButtons.OK, MessageBoxIcon.Warning); } _csvFichierEleves.RemplirDgv(dgvEleves); }
private void ChargerFichierLivres(string f) { _csvFichierLivres = FichierCsv.LireFichierCsv(f, true); dgvLivres.Clear(); dgvLivres.Columns.Add("division", "Division"); dgvLivres.Columns.Add("option", "Option"); var nbLivres = _csvFichierLivres.Lignes.Max(x => x.Count) - 2; for (var i = 1; i <= nbLivres; i++) { dgvLivres.Columns.Add("livre" + i, "Livre " + i); } _csvFichierLivres.RemplirDgv(dgvLivres); }
private void ChargerFichierDivisions(string f) { _csvDivisions = FichierCsv.LireFichierCsv(f); dgvDivisions.Clear(); dgvDivisions.Columns.Add("division", "Division"); dgvDivisions.Columns.Add("caution", "Caution"); dgvDivisions.Columns.Add("loc_adhe", "Loc. Adhérent"); dgvDivisions.Columns.Add("loc_non", "Loc. Non adhérent"); var nbDiv = _csvDivisions.Lignes.Max(x => x.Count) - 4; for (var i = 1; i <= nbDiv; i++) { dgvDivisions.Columns.Add("division" + i, "Division " + i); } _csvDivisions.RemplirDgv(dgvDivisions, false); }
private void MainWindow_FormClosing(object sender, FormClosingEventArgs e) { e.Cancel = true; var verifs = new List <Tuple <bool, string, string, FichierCsv> > { Tuple.Create(_eleveModif, "élèves", fsFichierEleves.FileName, FichierCsv.FromDgv(dgvEleves)), Tuple.Create(_divExclModif, "divisions exclues", fsDivisionsExclues.FileName, FichierCsv.FromDgv(dgvDivisionsExclues)), Tuple.Create(_optExclModif, "options exclues", fsOptionsExclues.FileName, FichierCsv.FromDgv(dgvOptionsExclues)), }; foreach (var cur in verifs) { if (cur.Item1) { if ( MessageBox.Show( "Le fichier des " + cur.Item2 + " a été modifié à l'intérieur de GestionFichierEleves.\nVoulez-vous enregistrer les modifications ?", "Attention", MessageBoxButtons.YesNo) == DialogResult.Yes) { var path = cur.Item3; try { cur.Item4.Enregistrer(path); } catch (Exception ex) { Helper.ShowExceptionMessage(ex); } } } } bool keep = false; if (_livresModif) { if (MessageBox.Show( "Le fichier des livres a été modifié à l'intérieur de " + "GestionFichierEleves. Si vous fermez GestionFichierEleves," + " toutes les modifications seront perdues. Voulez-vous vraiment quitter ?", "Attention", MessageBoxButtons.YesNo) == DialogResult.No) { keep = true; } } if (_divModif && !keep) { if (MessageBox.Show( "Le fichier des divisions a été modifié à l'intérieur de " + "GestionFichierEleves. Si vous fermez GestionFichierEleves," + " toutes les modifications seront perdues. Voulez-vous vraiment quitter ?", "Attention", MessageBoxButtons.YesNo) == DialogResult.No) { keep = true; } } if (!keep) { e.Cancel = false; } }
private void bwMain_DoWork(object sender, System.ComponentModel.DoWorkEventArgs e) { try { var sw = new Stopwatch(); ChangeStatus("Initialisation..."); Thread.Sleep(1000); sw.Start(); ChangeStatus("Initialisation des fichiers CSV..."); ChangeProgressBarCurrent(0, 4); // Options non trouvées dans le fichier Livres et non présentes dans le fichier Options-exclues. var csvOptAnom = new FichierCsv { Colonnes = new List <string> { "Nom", "Prénom", "Division", "Option(s)" } }; ChangeProgressBarCurrent(1, 4); // Division non trouvée dans le fichier Divisions.csv et non présentes dans le fichier Divisions-exclues. var csvDivAnom = new FichierCsv { Colonnes = new List <string> { "Nom", "Prénom", "Division" } }; ChangeProgressBarCurrent(2, 4); // Mettre les frères et soeurs dans ce fichier. var csvFratries = new FichierCsv { Colonnes = new List <string> { "Nom", "Prénom", "Division" } }; ChangeProgressBarCurrent(3, 4); // Gestion des cas non traités. var csvAnomalie = new FichierCsv { Colonnes = _csvFichierEleves.Colonnes }; ChangeProgressBarCurrent(4, 4); ChangeProgressBarTotal(1, 6); ChangeProgressBarCurrent(0, 3); ChangeStatus("Création des dossiers de sortie..."); var bf = _rootFolder; if (!Directory.Exists(bf)) { Directory.CreateDirectory(bf); } ChangeProgressBarCurrent(1, 3); var sd = Path.Combine(bf, "Fichiers Divisions"); if (Directory.Exists(sd)) { Directory.Delete(sd, true); } // Une boucle while ici permet de s'assurer que le dossier est bien créé while (!Directory.Exists(sd)) { Directory.CreateDirectory(sd); } ChangeProgressBarCurrent(2, 3); var st = Path.Combine(bf, "Fichiers Traitement"); if (Directory.Exists(st)) { Directory.Delete(st, true); } while (!Directory.Exists(st)) { Directory.CreateDirectory(st); } ChangeProgressBarCurrent(3, 3); ChangeProgressBarTotal(2, 6); ChangeProgressBarCurrent(0, 6); ChangeStatus("Génération du fichier des fratries..."); var etape1 = _csvFichierEleves.Lignes.GroupBy( x => new { NomL1 = x[_indices["NOM L1"]], PrenomL1 = x[_indices["PRENOM L1"]], AdresseL1 = x[_indices["ADRESSE L1"]], CP = x[_indices["CP"]] }); var etape2 = etape1.Where(x => x.Count() > 1); ChangeProgressBarCurrent(5, 6); csvFratries.Lignes = etape2.SelectMany(x => x.ToList().AddEmptyLine(x.Max(y => y.Count))).ToList(); CreerDossiers(); ChangeStatus("Enregistrement du fichier des fratries..."); csvFratries.Enregistrer(Path.Combine(st, "Fratries.csv")); ChangeProgressBarCurrent(6, 6); Thread.Sleep(500); CreerDossiers(); // Acquis de conscience, juste au cas où ChangeProgressBarTotal(3, 6); ChangeProgressBarCurrent(0, _csvFichierEleves.Lignes.Count); ChangeStatus("Génération des fichiers CSV..."); var csvClasses = new Dictionary <string, FichierCsv>(); foreach (var d in _csvFichierEleves.Lignes.Select(x => x[_indices["DIV"]]).Distinct()) { var csv = new FichierCsv { Colonnes = _csvFichierEleves.Colonnes.ToList() }; csv.Colonnes.AddRange(new[] { "Adherent", "Famille", "Delegues", "Caution", "loc_adhe", "Loc_NON" }); for (var i = 1; i <= 16; i++) { csv.Colonnes.Add("L" + i.ToString().PadLeft(2, '0')); } csvClasses.Add(d, csv); } for (var i = 0; i < _csvFichierEleves.Lignes.Count; i++) { var curl = _csvFichierEleves.Lignes[i].ToList(); try { var div = curl[_indices["DIV"]]; if (string.IsNullOrWhiteSpace(div) || string.IsNullOrWhiteSpace(curl[_indices["DIV SIECLE"]])) { csvAnomalie.Lignes.Add(curl); continue; } curl.AddRange(new[] { "", "", "" }); // Adherent, Famille, Delegues (ne pas remplir) if (_csvDivisionsExclues != null && _csvDivisionsExclues.Lignes.Any(x => x.Contains(div))) { continue; } var ligneDansFichDiv = _csvDivisions.Lignes.FirstOrDefault(x => x.Skip(4).Contains(div)); if (ligneDansFichDiv == null) { // Anomalie csvDivAnom.Lignes.Add(new List <string> { curl[0], curl[1], div }); continue; } curl.AddRange(ligneDansFichDiv.GetRange(1, 3)); var lignesLivres = _csvFichierLivres.Lignes.Where(x => x[0] == ligneDansFichDiv[0]).ToArray(); foreach (var cli in curl.Skip(_indices["OPTION 1"]).Take(_indices["NB OPTIONS"])) { if (lignesLivres.All(x => x[1] != cli) && !string.IsNullOrWhiteSpace(cli) && cli != "NC") { if (_csvOptionsExclues == null || !_csvOptionsExclues.Lignes.Any( y => (y[0] == "ALL" || y[0] == ligneDansFichDiv[0]) && y[1] == cli)) { // Anomalie csvOptAnom.Lignes.Add(new List <string> { curl[0], curl[1], div, cli }); } } } _collivre1 = curl.Count; curl.AddRange( lignesLivres.Where( x => (x[1] == "STD" || curl.Skip(_indices["OPTION 1"]).Take(_indices["NB OPTIONS"]).Contains(x[1])) && (_csvOptionsExclues == null || !_csvOptionsExclues.Lignes.Any( y => (y[0] == "ALL" || y[0] == ligneDansFichDiv[0]) && y[1] == x[1]))) .Select(x => x.Skip(2).Where(y => !string.IsNullOrWhiteSpace(y))) .SelectMany(x => x)); csvClasses[div].Lignes.Add(curl); } catch { csvAnomalie.Lignes.Add(curl); } ChangeProgressBarCurrent(i + 1, _csvFichierEleves.Lignes.Count); } /*foreach (var kvp in csvClasses) * { * var ligneDansFichDiv = CSVDivisions.Lignes.FirstOrDefault(x => x.Skip(4).Contains(kvp.Key)); * if (ligneDansFichDiv == null) continue; * var lignesLivres = CSVFichierLivres.Lignes.Where(x => x[0] == ligneDansFichDiv[0]); * var ligneVide = new List<string>(); * for (var j = 0; j < 33; j++) ligneVide.Add("."); * ligneVide[7] = ""; * ligneVide[8] = ""; * ligneVide.AddRange(ligneDansFichDiv.GetRange(1, 3)); * ligneVide.AddRange( * lignesLivres.Select(x => x.Skip(2).Where(y => !string.IsNullOrWhiteSpace(y))).SelectMany(x => x)); * kvp.Value.Lignes.Add(ligneVide); * }*/ ChangeProgressBarTotal(4, 6); ChangeProgressBarCurrent(0, 3); ChangeStatus("Enregistrement des fichiers CSV de traitement..."); Thread.Sleep(200); CreerDossiers(); // Acquis de conscience, juste au cas où csvOptAnom.Enregistrer(Path.Combine(st, "Options-anomalies.csv")); ChangeProgressBarCurrent(1, 4); csvDivAnom.Enregistrer(Path.Combine(st, "Divisions-anomalies.csv")); ChangeProgressBarCurrent(2, 4); csvAnomalie.Enregistrer(Path.Combine(st, "Anomalies.csv")); ChangeProgressBarCurrent(3, 4); ChangeProgressBarTotal(5, 6); ChangeProgressBarCurrent(0, csvClasses.Count); ChangeStatus("Enregistrement des fichiers CSV des divisions..."); var csvClassesL = csvClasses.ToList(); for (var i = 0; i < csvClassesL.Count; i++) { var it = csvClassesL[i]; if (it.Value.Lignes.Count == 0) { continue; } var iddivs = it.Value.Lignes[0][_indices["DIV SIECLE"]]; var iddiv = it.Value.Lignes[0][_indices["DIV"]]; it.Value.Enregistrer(Path.Combine(sd, iddivs + ".csv")); var ficheVierge = it.Value.Clone(); ficheVierge.Lignes.Clear(); var l = ficheVierge.Colonnes.Select(x => ".").Take(_collivre1).ToList(); var ligneDansFichDiv = _csvDivisions.Lignes.FirstOrDefault(x => x.Skip(4).Contains(iddiv)); if (ligneDansFichDiv != null) { l.AddRange(_csvFichierLivres.Lignes.Where(x => x[0] == ligneDansFichDiv[0]).SelectMany(x => x.Skip(2)).Where(x => !string.IsNullOrWhiteSpace(x)).Distinct()); ficheVierge.Lignes.Add(l.ToSize(ficheVierge.Colonnes.Count).ToList()); ficheVierge.Enregistrer(Path.Combine(sd, iddivs + "-vierge.csv")); } ChangeProgressBarCurrent(i + 1, csvClassesL.Count); } ChangeProgressBarTotal(6, 6); ChangeProgressBarCurrent(100, 100); ChangeStatus("Terminé"); sw.Stop(); if (MessageBox.Show( "Génération terminée.\nTemps total écoulé : " + sw.Elapsed + " secondes." + "\n\nVoulez-vous ouvrir le dossier de sortie ?", "Génération terminée", MessageBoxButtons.YesNo, MessageBoxIcon.Information) == DialogResult.Yes) { Process.Start(bf); } } catch (Exception ex) { ChangeProgressBarTotal(6, 6); ChangeProgressBarCurrent(100, 100); ChangeStatus("Erreur"); Helper.ShowExceptionMessage(ex); } }