koderr

Member | Редактировать | Профиль | Сообщение | ICQ | Цитировать | Сообщить модератору Вот простенькая прога: Код: #include <windows.h> int main() { HFILE hFile; DWORD dwSize; DWORD nBytes; char *lpBuffer1; char *lpBuffer2; int i = 0, j = 0; hFile = CreateFile("input.txt", GENERIC_READ | GENERIC_WRITE, FILE_SHARE_WRITE, NULL, OPEN_EXISTING, 0, NULL); if(hFile != -1) { dwSize = GetFileSize(hFile, NULL); lpBuffer1 = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwSize); lpBuffer2 = HeapAlloc(GetProcessHeap(), HEAP_ZERO_MEMORY, dwSize); ReadFile(hFile, lpBuffer1, dwSize, &nBytes, NULL); lpBuffer1[nBytes] = 0; // write terminating byte to source buffer lpBuffer2[j] = 13; // write lpBuffer2[j + 1] = 10; // CRLF j += 2; // to destination buffer while(lpBuffer1[i] != 0) { while(lpBuffer1[i] == ' ' || lpBuffer1[i] == '\t') { i++; // skip leading spaces and tabs } while(lpBuffer1[i] != ' ' && lpBuffer1[i] != '\t' && lpBuffer1[i] != 13) { lpBuffer2[j] = lpBuffer1[i]; // write to destination buffer i++; j++; } lpBuffer2[j] = ' '; j++; while(lpBuffer1[i] != 10) i++; // feed line i++; } lpBuffer2[j] = 0; // terminating character SetFilePointer(hFile, 0, NULL, FILE_END); WriteFile(hFile, lpBuffer2, j, &nBytes, NULL); CloseHandle(hFile); HeapFree(GetProcessHeap(), 0, lpBuffer1); HeapFree(GetProcessHeap(), 0, lpBuffer2); } return 0; } | Добавлено: Правда, прога будет считать "словом" и знаки препинания тоже... Это несложно поправить, нужно лишь вместо Код: lpBuffer1[i] != ' ' && lpBuffer1[i] != '\t' | прогонять в цикле сравнение с набором символов '.,!?:;"' или типа того  |