// Transforme la table en string public static string ImportFile(string fileName, ref PersonneCollection personnes) { string erreurMessage = ""; FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); StreamReader sr = new StreamReader(fs, Encoding.UTF7); string s = sr.ReadToEnd(); fs.Close(); sr.Close(); string[] separateurLigne = { "\"Non spécifié\"\r\n", "\"Utilisateur 4\"\r\n" }; // Une hyptohese risquee string[] lignes = s.Split(separateurLigne, StringSplitOptions.RemoveEmptyEntries); if (lignes.Length <= 1) { erreurMessage = "Ce fichier n'est pas au format du carnet outlook.<br>"; return(erreurMessage); } string entete = lignes[0]; char[] separteurValeur = { ',', '\"' }; string[] entetes = entete.Split(separteurValeur, StringSplitOptions.RemoveEmptyEntries); if (entetes.Length <= 1) { erreurMessage = "Ce fichier n'est pas au format du carnet outlook.<br>"; return(erreurMessage); } // La deuxieme colonne Nom pose un probleme c'est le nom complet // mais on en veut pas d'ou ce caviardage par une colonne qui n'existe pas // entetes[ 3 ] = "aaaaaaaaa"; Non faut pas ya pas de non complet dans outlook de merde et si !! putain de bordel quelle merde enfin microsoft est donne son plein potentiel !! // outlook de merde on trouve 2 colonnes Titre une pour civlite ou autre pour ... // donc ici on ruse a mort ColonneCollection cc = new ColonneCollection(HeaderColumns); ColonneCollection colonnesExistantes = new ColonneCollection(); if (entetes[0] == "Titre") { cc[0].Existe = true; cc[0].Indice = 0; colonnesExistantes.Add(cc[0]); cc.RemoveAt(0); } foreach (Colonne c in cc) { for (int i = 1; i < entetes.Length; i++) { if (c.Nom.CompareTo(entetes[i]) == 0) { // La colonne existe dans le fichier c.Existe = true; c.Indice = i; colonnesExistantes.Add(c); } } } if (colonnesExistantes.Count <= 0) { erreurMessage = "Format de fichier non valide.<br>"; return(erreurMessage); } //BRY00020100209 if (SessionState.Limitations.LimitesInterviewesAtteinte(lignes.Length)) { Tools.PageValidation("La limite du nombre d'Interviewés : " + SessionState.Limitations.NombreInterviewes + " est atteinte.<br/>Contactez l'administrateur."); } // Le split marche dans l'entete car on RemoveEmptyEntries // ici on ne peut pas le faire pour garder le bon indice de la place de la valeur // et donc on recommence ... string[] separateurVal = { "\",\"" }; for (int i = 1; i < lignes.Length; i++) { string[] valeurs = lignes[i].Split(','); for (int v = 0; v < valeurs.Length; v++) { valeurs[v] = SupprimeCaractereDeMerde(valeurs[v]); } Personne p = new Personne(); foreach (Colonne c in colonnesExistantes) { if (c.Existe) { if (c.Nom == HeaderColumns[0]) { p.Civilite = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[1]) { p.Nom = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[2]) { p.Prenom = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[3]) { p.Societe = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[4]) { p.Fonction = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[5]) { p.EmailPerso = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[6]) { p.EmailBureau = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[7]) { p.Adresse = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[8]) { p.Ville = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[9]) { p.CodePostal = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[10]) { p.TelephonePerso = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[11]) { p.TelephoneBureau = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[12]) { p.TelephoneMobile = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[13]) { p.Fax = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[14]) { p.LienHTML = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[15]) { p.Memo = valeurs[c.Indice]; } } } if (personnes == null) { int ret = Personne.Create(p, true, ref erreurMessage); } else { personnes.Add(p); } } return(erreurMessage); }
/// <summary> /// Lecture du fichier au format CVS creation d'une personne /// </summary> /// <param name="fileName">le fichier</param> /// <param name="personnes">collection de personnes si null on cree dans la database</param> /// <returns></returns> public static string ImportFile(string fileName, ref PersonneCollection personnes) { string erreurMessage = ""; FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read); StreamReader sr = new StreamReader(fs, Encoding.UTF7); string s = sr.ReadToEnd(); fs.Close(); sr.Close(); string separateurDOS = "\r\n"; string separateurUnix = "\r"; if (s.Contains(separateurDOS) == false) { if (s.Contains(separateurUnix) == false) { erreurMessage = "Ce fichier n'est ni au format Unix ni au format DOS.<br>"; return(erreurMessage); } erreurMessage += "Conversion du fichier Unix vers DOS.<br>"; s = Strings.UnixToDos(s); } string[] separateur = { "\r\n" }; string[] lignes = s.Split(separateur, System.StringSplitOptions.None); string entete = lignes[0]; string[] entetes = entete.Split(';'); if (entetes.Length <= 2) { erreurMessage = "Ce fichier n'est pas au format du carnet d'adresses.<br>"; return(erreurMessage); } // La deuxieme colonne Nom pose un probleme c'est le nom complet // mais on n'en veut pas d'ou ce caviardage par une colonne qui n'existe pas // sauf si le fichier vient d'excel dans ce cas on ne ve pas faire chier l'utilisateur ! //if ( entetes.Length > 3 ) entetes[ 3 ] = "aaaaaaaaa"; RAS LE BOL JE SAIS PLUS ColonneCollection cc = new ColonneCollection(HeaderColumns); ColonneCollection colonnesExistantes = new ColonneCollection(); // Enregistrer les colonnes qui existent for (int i = 0; i < entetes.Length; i++) { foreach (Colonne c in cc) { if (c.Nom.CompareTo(entetes[i]) == 0) { // La colonne existe dans le fichier c.Existe = true; c.Indice = i; colonnesExistantes.Add(c); } } } if (colonnesExistantes.Count <= 0) { erreurMessage = "Format de fichier non valide.<br>"; return(erreurMessage); } //BRY00020100209 if (SessionState.Limitations.LimitesInterviewesAtteinte(lignes.Length)) { Tools.PageValidation("La limite du nombre d'Interviewés : " + SessionState.Limitations.NombreInterviewes + " est atteinte.<br/>Contactez l'administrateur."); } // La derniere ligne peut etre vide for (int i = 1; i < lignes.Length && lignes[i] != ""; i++) { // Incroyable on voit Excel de daube qui met des ';' a lin de la ligne // mais il s'arrete au bout de 15 lignes et il en met plus !!! string[] essai = lignes[i].Split(';'); if (essai.Length < colonnesExistantes.Count) { // Il manque une colonne ! // Donc on ajoute une colonne vide ! lignes[i] = lignes[i] + ";"; } string[] valeurs = lignes[i].Split(';'); Personne p = new Personne(); foreach (Colonne c in colonnesExistantes) { if (c.Existe) { if (c.Nom == HeaderColumns[0]) { p.Civilite = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[1]) { p.Nom = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[2]) { p.Prenom = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[3]) { p.EmailBureau = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[4]) { p.Adresse = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[5]) { p.Ville = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[6]) { p.CodePostal = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[7]) { p.TelephonePerso = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[8]) { p.TelephoneBureau = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[9]) { p.TelephoneMobile = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[10]) { p.Fax = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[11]) { p.Societe = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[12]) { p.Fonction = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[13]) { p.LienHTML = valeurs[c.Indice]; } if (c.Nom == HeaderColumns[14]) { p.Memo = valeurs[c.Indice]; } } } if (personnes == null) { int ret = Personne.Create(p, true, ref erreurMessage); } else { personnes.Add(p); } } return(erreurMessage); }