Удаление из текста комментариев и тегов summary - C#
Формулировка задачи:
Исходный текст представляет описание класса на C#. Напишите процедуру, удаляющую из этого текста теги summary и комментарии. Для представления текстов используйте 3 реализации – классы char [], string и StringBuilder.
Вот мой код ( не судите строго)
Подскажите пожалуйста как сделать красивее и правильнее, а то моё решение получилось "в лоб". Спасибо
private void button2_Click(object sender, EventArgs e) { string content = ""; StreamReader sr = new StreamReader(lFile.Text); string line = sr.ReadLine(); while (line != null) { content += line; line = sr.ReadLine(); } sr.Close(); StringBuilder repl = new StringBuilder(content); int a=0, b=0, d=-1; bool prov = true ; for (int i = 0; i < repl.Length; i++) // удаление комментов между /* .....*/ { if (prov && (repl[i] == '/' && repl[i + 1] == '*')) { a = i ; prov = false; } if (repl[i] == '*' && repl[i + 1] == '/') { repl.Remove(a, (i + 2) - a); prov = true; } } for (int i = 0; i < repl.Length; i++) // удаление /// <summary> /// </summary> { if (d == -1 && (repl[i] == '/' && repl[i - 1] == '/' && repl[i+1 ] == '/')) { b = i-1; d++; } if (repl[i] == '>' && d != -1) { repl.Remove(b, (i + 1) - b); d = -1; } } for (int i = 0; i < repl.Length; i++) // удаление текста между /// <summary>...... /// </summary> { if (d == -1 && (repl[i] == '/' && repl[i - 1] == '/' && repl[i+1] == '/')) { b = i - 1; d++; } if (repl[i] == ' ' && repl[i-1]==' ' && d != -1) { repl.Remove(b, (i + 1) - b); d = -1; } } for (int i = 0; i < repl.Length; i++) // удаление комментов после // { if (d == -1 && (repl[i] == '/' && repl[i + 1] == '/')) { b = i; d++; } if (repl[i] == ' ' && (repl[i - 1] == ' ' || repl != null) && d != -1) { repl.Remove(b, (i + 1) - b); d = -1; } } StreamWriter sw = new StreamWriter(lFile.Text+".txt"); sw.WriteLine(repl); sw.Close(); MessageBox.Show("Создан файл "+lFile.Text + ".txt"); }
Решение задачи: «Удаление из текста комментариев и тегов summary»
textual
Листинг программы
private void button2_Click(object sender, EventArgs e) { RemoveAllComments(lFile.Text); } private void RemoveAllComments(string filename) { StringBuilder content = new StringBuilder(); content.Append(File.ReadAllText(filename)); RemoveComments(content, "/*", "*/"); RemoveComments(content, "/// <summary>", "/// </summary>"); RemoveComments(content, "//", Environment.NewLine); File.WriteAllText(filename + ".txt", content.ToString()); MessageBox.Show(string.Format("Создан файл {0}.txt", filename)); } private void RemoveComments(StringBuilder content, string start, string end) { string contentStr; int startIndex = 0; int endIndex = 0; //длина концовки; //если мы ищем однострочный комментарий значит длина концовки равна нулю int endLength = (end == Environment.NewLine) ? 0 : end.Length; while (true) { contentStr = content.ToString(); startIndex = contentStr.IndexOf(start); endIndex = (startIndex != -1) ? contentStr.IndexOf(end, startIndex) : -1; if (startIndex != -1 && endIndex != -1) { content.Remove(startIndex, endIndex + endLength - startIndex); } //если нашелся только начальный индекс и мы удаляем однострочный комментарий //значит после комментария идет конец файла, в таком случае удаляем все //начиная со startIndex else if (startIndex != -1 && end == Environment.NewLine) { content.Remove(startIndex, content.Length - startIndex); } //если не найден ни один индекс завершаем поиск else { break; } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д