Удаление из текста комментариев и тегов 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;
        }
    }
}

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


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

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

11   голосов , оценка 4.364 из 5
Похожие ответы