Программа для удаления лишних пробелов, табуляций, строк в файле (Си) - 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);
}
Объяснение кода листинга программы
- Прочитать строку из файла в буфер с помощью функции
fgets(). - Удалить символы новой строки (
\r\n) с помощью функцииstrcspn()иmemset(). - Удалить символы табуляции (
\t) путем замены каждого символа табуляции на пробел. - Удалить ведущие пробелы путем перебора буфера от начала строки до первого не пробельного символа.
- Удалить конечные пробелы путем перебора буфера от конца строки до первого не пробельного символа.
- Удалить повторяющиеся пробелы путем перебора буфера и замены последовательности пробелов на один пробел.
- Если строка пустая и буфер для вывода пустой, пропустить строку.
- Вывести обработанную строку в файл вывода с помощью функции
fprintf(). - Если файл вывода пустой, пропустить строку.