Программа для удаления лишних пробелов, табуляций, строк в файле (Си) - C (СИ)

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

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

Здравствуйте. Помогите написать программу (Си), которая удаляла бы лишние пробелы, табуляции и пустые строки в файле. Находил только для удаления пробелов, добавить туда удаление табуляций и пустых строк не смог. Благодарю.

Решение задачи: «Программа для удаления лишних пробелов, табуляций, строк в файле (Си)»

textual
Листинг программы
   while (fgets(pBuf,BUF_SIZE,pIn))
   {
      pBuf[BUF_SIZE - 1] = 0; // ASCIIZ !
 
      DWORD    dwEOL = strcspn(pBuf,"\r\n");
 
      pBuf[dwEOL] = 0;  // Remove EOL chars
 
      // Remove TABs
      if (*pBuf && bRemoveTabs)
      {
         char*    pLine = pBuf;
 
         while (pLine && *pLine)
         {
            if (*pLine == '\t')
            {
               *pLine = ' ';
            }
 
            ++pLine;
         }
      }
 
      // Remove Leading Spaces
      char*    pBegin = pBuf;
 
      while (pBegin && *pBegin == ' ')
      {
         ++pBegin;
      }
 
      // Remove Trailing Spaces
      int      iSize = strlen(pBuf);
 
      if (iSize)
      {
         char*    pEnd = pBuf + (iSize - 1);
 
         while (pEnd && (pEnd > pBegin) && *pEnd == ' ')
         {
            *pEnd = 0;
            --pEnd;
         }
      }
 
      char*    pTxt = pOutBuf;
 
      // Remove Duplicated Spaces
      while (pBegin && *pBegin)
      {
         if ((*pBegin == ' ') || (bRemoveTabs && (*pBegin == '\t')))
         {
            *pTxt++ = *pBegin++;                // Copy the First
 
            while ((*pBegin == ' ') || (bRemoveTabs && (*pBegin == '\t')))
            {
               ++pBegin;                        // Skip !
            }
         }
 
         *pTxt++ = *pBegin++;                   // Just Copy
      }
 
      *pTxt = 0;     // ASCIIZ
 
      // Remove EMPTY lines
      if (!strlen(pOutBuf))
      {
         if (bRemoveEmptyLines)
         {
            continue;
         }
      }
 
      fprintf(pOut,"%s\r\n",pOutBuf);
   }

Объяснение кода листинга программы

  1. Прочитать строку из файла в буфер с помощью функции fgets().
  2. Удалить символы новой строки (\r\n) с помощью функции strcspn() и memset().
  3. Удалить символы табуляции (\t) путем замены каждого символа табуляции на пробел.
  4. Удалить ведущие пробелы путем перебора буфера от начала строки до первого не пробельного символа.
  5. Удалить конечные пробелы путем перебора буфера от конца строки до первого не пробельного символа.
  6. Удалить повторяющиеся пробелы путем перебора буфера и замены последовательности пробелов на один пробел.
  7. Если строка пустая и буфер для вывода пустой, пропустить строку.
  8. Вывести обработанную строку в файл вывода с помощью функции fprintf().
  9. Если файл вывода пустой, пропустить строку.

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


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

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

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