using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.IO; namespace ExtractClass { class Program { struct maClasse { public string monNameSpace; public string monNomClasse; public string monTypeClasse; } // Récupère le nom de la classe avec son type (public ou private) // att : chaine --> ligne de lecture du fichier public static string recupNomClass(string chaine) { string theClassName = ""; maClasse laClasse = new maClasse(); try { int index = chaine.IndexOf("class"); int index2 = chaine.IndexOf(':'); int indexPublic = chaine.IndexOf("public"); int indexPrivate = chaine.IndexOf("private"); // Si c'est privée par défaut if (indexPublic < 0 && indexPrivate < 0) { laClasse.monTypeClasse = "private"; // Si il y a présence d'une classe héritée if (index2 >= 0) { string[] bonneChaine = chaine.Split(':'); laClasse.monNomClasse = bonneChaine[0].Replace("class", "_").Trim(); //theClassName = laClasse.monTypeClasse + laClasse.monNomClasse; } else { laClasse.monNomClasse = chaine.Replace("class", "_").Trim(); } theClassName = laClasse.monTypeClasse + laClasse.monNomClasse; } else { // Si il y a présence d'une classe héritée if (index2 >= 0) { string[] bonneChaine = chaine.Split(':'); laClasse.monNomClasse = bonneChaine[0].Trim().Replace("class", "_").Trim(); theClassName = laClasse.monTypeClasse + laClasse.monNomClasse; } else { //char[] splitters = new char[] {' '}; string[] laCase = chaine.Split(' '); laClasse.monTypeClasse = laCase[0].Trim(); laClasse.monNomClasse = chaine.Replace("class", "_").Trim(); theClassName = laClasse.monTypeClasse + laClasse.monNomClasse; } } theClassName = theClassName.Replace(" ",""); } catch (Exception e) { Console.WriteLine("Classe introuvable :"); Console.WriteLine(e.Message); } return theClassName; } // Extrait les classes du fichier et les ajoutes dans des fichiers à part // att : file2 --> chemin plus nom du fichier à extraire // path --> chemin où l'extraire public static void extraction(string file2, string path) { int nbAccoOuv = 0; int nbAccoFer = 0; bool inClass = false; List LBlockClass = new List(); StringBuilder strBuilder = new StringBuilder(); string currentLine = null; try { using (StreamReader sr = new StreamReader(file2)) { string line; string nomFichier = ""; string nouveauFichier = ""; maClasse laClasse = new maClasse(); while ((line = sr.ReadLine()) != null) { if (line.IndexOf("namespace") >= 0) { laClasse.monNameSpace = line.Replace("namespace", "").Trim(); } if (line.IndexOf("class") >= 0) { nomFichier = laClasse.monNameSpace + '_' + recupNomClass(line) + ".cs"; nouveauFichier = System.IO.Path.Combine(path, nomFichier); /*if (!System.IO.File.Exists(nouveauFichier)) { System.IO.File.Create(nouveauFichier); } else { Console.WriteLine("Le fichier \"{0}\" existe déjà.", nomFichier); return; }*/ StreamReader sr2 = new StreamReader(file2); while (sr2.Peek() > -1) { currentLine = sr2.ReadLine(); if (currentLine.Contains("class")) { inClass = true; } if (inClass) { strBuilder.AppendLine(currentLine); nbAccoOuv = nbAccoOuv + currentLine.Count(x => x == '{'); nbAccoFer = nbAccoFer + currentLine.Count(x => x == '}'); if (nbAccoOuv == nbAccoFer && nbAccoOuv != 0 && nbAccoFer != 0) { string inter = strBuilder.ToString(); LBlockClass.Add(inter); strBuilder.Clear(); inClass = false; nbAccoOuv = 0; nbAccoFer = 0; } } } foreach (var classFound in LBlockClass) { System.IO.StreamWriter fileDest2 = new System.IO.StreamWriter(nomFichier); Console.WriteLine("Class block"); Console.WriteLine(classFound.ToString()); Console.WriteLine("/////////////////////////////////////////////"); if (!System.IO.File.Exists(nouveauFichier)) { System.IO.File.Create(nouveauFichier).Close(); fileDest2.WriteLine(classFound.ToString()); fileDest2.Close(); } else { Console.WriteLine("Le fichier \"{0}\" existe déjà.", nomFichier); return; } } } } } } catch (Exception e) { Console.WriteLine("Le fichier ne peux être lu :"); Console.WriteLine(e.Message); } } static void Main(string[] args) { Console.WriteLine("Entrez le chemin avec le nom du fichier à extraire :"); string fichier = Console.ReadLine(); Console.WriteLine("Entrez le chemin où l'extraire :"); string chemin = Console.ReadLine(); extraction(fichier, chemin); Console.WriteLine("Press any key to exit"); Console.ReadKey(); } } }