Удаление из текста комментариев и тегов summary - C#

Узнай цену своей работы

Формулировка задачи:

Исходный текст представляет описание класса на C#. Напишите процедуру, удаляющую из этого текста теги summary и комментарии. Для представления текстов используйте 3 реализации – классы char [], string и StringBuilder. Вот мой код ( не судите строго)
Листинг программы
  1. private void button2_Click(object sender, EventArgs e)
  2. {
  3. string content = "";
  4. StreamReader sr = new StreamReader(lFile.Text);
  5. string line = sr.ReadLine();
  6. while (line != null)
  7. {
  8. content += line;
  9. line = sr.ReadLine();
  10. }
  11. sr.Close();
  12. StringBuilder repl = new StringBuilder(content);
  13. int a=0, b=0, d=-1;
  14. bool prov = true ;
  15.  
  16. for (int i = 0; i < repl.Length; i++) // удаление комментов между /* .....*/
  17. {
  18. if (prov && (repl[i] == '/' && repl[i + 1] == '*')) { a = i ; prov = false; }
  19. if (repl[i] == '*' && repl[i + 1] == '/') { repl.Remove(a, (i + 2) - a); prov = true; }
  20. }
  21. for (int i = 0; i < repl.Length; i++) // удаление /// <summary> /// </summary>
  22. {
  23. if (d == -1 && (repl[i] == '/' && repl[i - 1] == '/' && repl[i+1 ] == '/')) { b = i-1; d++; }
  24. if (repl[i] == '>' && d != -1) { repl.Remove(b, (i + 1) - b); d = -1; }
  25.  
  26. }
  27. for (int i = 0; i < repl.Length; i++) // удаление текста между /// <summary>...... /// </summary>
  28. {
  29. if (d == -1 && (repl[i] == '/' && repl[i - 1] == '/' && repl[i+1] == '/')) { b = i - 1; d++; }
  30. if (repl[i] == ' ' && repl[i-1]==' ' && d != -1) { repl.Remove(b, (i + 1) - b); d = -1; }
  31.  
  32. }
  33. for (int i = 0; i < repl.Length; i++) // удаление комментов после //
  34. {
  35. if (d == -1 && (repl[i] == '/' && repl[i + 1] == '/')) { b = i; d++; }
  36. if (repl[i] == ' ' && (repl[i - 1] == ' ' || repl != null) && d != -1) { repl.Remove(b, (i + 1) - b); d = -1; }
  37.  
  38. }
  39.  
  40. StreamWriter sw = new StreamWriter(lFile.Text+".txt");
  41. sw.WriteLine(repl);
  42. sw.Close();
  43. MessageBox.Show("Создан файл "+lFile.Text + ".txt");
  44. }
Подскажите пожалуйста как сделать красивее и правильнее, а то моё решение получилось "в лоб". Спасибо

Решение задачи: «Удаление из текста комментариев и тегов summary»

textual
Листинг программы
  1. private void button2_Click(object sender, EventArgs e)
  2. {
  3.     RemoveAllComments(lFile.Text);
  4. }
  5.  
  6. private void RemoveAllComments(string filename)
  7. {
  8.     StringBuilder content = new StringBuilder();
  9.     content.Append(File.ReadAllText(filename));
  10.  
  11.     RemoveComments(content, "/*", "*/");
  12.     RemoveComments(content, "/// <summary>", "/// </summary>");
  13.     RemoveComments(content, "//", Environment.NewLine);
  14.  
  15.     File.WriteAllText(filename + ".txt", content.ToString());
  16.  
  17.     MessageBox.Show(string.Format("Создан файл {0}.txt", filename));
  18. }
  19.  
  20. private void RemoveComments(StringBuilder content, string start, string end)
  21. {
  22.     string contentStr;
  23.     int startIndex = 0;
  24.     int endIndex = 0;
  25.  
  26.     //длина концовки;
  27.     //если мы ищем однострочный комментарий значит длина концовки равна нулю
  28.     int endLength = (end == Environment.NewLine) ? 0 : end.Length;
  29.  
  30.     while (true)
  31.     {
  32.         contentStr = content.ToString();
  33.         startIndex = contentStr.IndexOf(start);
  34.         endIndex = (startIndex != -1) ? contentStr.IndexOf(end, startIndex) : -1;
  35.  
  36.         if (startIndex != -1 && endIndex != -1)
  37.         {
  38.             content.Remove(startIndex, endIndex + endLength - startIndex);
  39.         }
  40.         //если нашелся только начальный индекс и мы удаляем однострочный комментарий
  41.         //значит после комментария идет конец файла, в таком случае удаляем все
  42.         //начиная со startIndex
  43.         else if (startIndex != -1 && end == Environment.NewLine)
  44.         {
  45.             content.Remove(startIndex, content.Length - startIndex);
  46.         }
  47.         //если не найден ни один индекс завершаем поиск
  48.         else
  49.         {
  50.             break;
  51.         }
  52.     }
  53. }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

11   голосов , оценка 4.364 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы