Консультация № 183784
19.07.2011, 10:37
65.89 руб.
0 4 0
Здравствуйте, уважаемые эксперты! Прошу вас ответить на следующий вопрос:
данная программа открывает файл "D:\\FILEREV.DAT" и перевертывает его. Помоги пожалуйста добавить в программу не перевертывание строки ,а
подсчитать количество слов, длина которых меньше либо равна 5, и результат в текстовой форме записать в конец файла.

Если получится сделать до 16.00 сегодня 19.07 буду благодарен.

Приложение:
// SP_LB2-4_1.cpp : Defines the entry point for the application.
//

//#include <tchar.h>
#include <string.h>

//#include "resource.h"
#include "stdafx.h"
#include "Commdlg.h"
#include "LB2-4.h"

#define MAX_LOADSTRING 100
#define FILENAME "D:\\FILEREV.DAT"


// Global Variables:
HINSTANCE hInst; // current instance

LPTSTR lpszFirstPath; // Путь к начальному файлу
HANDLE hFile; // Для дескриптора объекта "файл"
HANDLE hFileMap; // Для дескриптора объекта 'проецируемый файл'
LPVOID lpvFile; // Для адреса региона в адресном пространстве
// куда будет отображаться файл

LPSTR lpchANSI; // Указатель на ANSI строку

DWORD dwFileSize; // Для значения размера файла
// в ANSI или UNICODE

STARTUPINFO si={0}; // Структуры для функции
PROCESS_INFORMATION pi;// CreateProcess


TCHAR szTitle[MAX_LOADSTRING]; // The title bar text
TCHAR szWindowClass[MAX_LOADSTRING]; // the main window class name

// Forward declarations of functions included in this code module:
ATOM MyRegisterClass(HINSTANCE hInstance);
BOOL InitInstance(HINSTANCE, int);
LRESULT CALLBACK WndProc(HWND, UINT, WPARAM, LPARAM);
INT_PTR CALLBACK About(HWND, UINT, WPARAM, LPARAM);

int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow)
{
UNREFERENCED_PARAMETER(hPrevInstance);
UNREFERENCED_PARAMETER(lpCmdLine);

// TODO: Place code here.
MSG msg;
HACCEL hAccelTable;





// Initialize global strings
LoadString(hInstance, IDS_APP_TITLE, szTitle, MAX_LOADSTRING);
LoadString(hInstance, IDC_LB24, szWindowClass, MAX_LOADSTRING);
MyRegisterClass(hInstance);

// Perform application initialization:
if (!InitInstance (hInstance, nCmdShow))
{
return FALSE;
}

hAccelTable = LoadAccelerators(hInstance, MAKEINTRESOURCE(IDC_LB24));

// Main message loop:
while (GetMessage(&msg, NULL, 0, 0))
{
if (!TranslateAccelerator(msg.hwnd, hAccelTable, &msg))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}

return (int) msg.wParam;
}



//
// FUNCTION: MyRegisterClass()
//
// PURPOSE: Registers the window class.
//
// COMMENTS:
//
// This function and its usage are only necessary if you want this code
// to be compatible with Win32 systems prior to the 'RegisterClassEx'
// function that was added to Windows 95. It is important to call this function
// so that the application will get 'well formed' small icons associated
// with it.
//
ATOM MyRegisterClass(HINSTANCE hInstance)
{
WNDCLASSEX wcex;

wcex.cbSize = sizeof(WNDCLASSEX);

wcex.style = CS_HREDRAW | CS_VREDRAW;
wcex.lpfnWndProc = WndProc;
wcex.cbClsExtra = 0;
wcex.cbWndExtra = 0;
wcex.hInstance = hInstance;
wcex.hIcon = LoadIcon(hInstance, MAKEINTRESOURCE(IDI_LB24));
wcex.hCursor = LoadCursor(NULL, IDC_ARROW);
wcex.hbrBackground = (HBRUSH)(COLOR_WINDOW+1);
wcex.lpszMenuName = MAKEINTRESOURCE(IDC_LB24);
wcex.lpszClassName = szWindowClass;
wcex.hIconSm = LoadIcon(wcex.hInstance, MAKEINTRESOURCE(IDI_SMALL));

return RegisterClassEx(&wcex);
}

//
// FUNCTION: InitInstance(HINSTANCE, int)
//
// PURPOSE: Saves instance handle and creates main window
//
// COMMENTS:
//
// In this function, we save the instance handle in a global variable and
// create and display the main program window.
//
BOOL InitInstance(HINSTANCE hInstance, int nCmdShow)
{
HWND hWnd;

hInst = hInstance; // Store instance handle in our global variable

hWnd = CreateWindow(szWindowClass, szTitle, WS_OVERLAPPEDWINDOW,
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, NULL, NULL, hInstance, NULL);

if (!hWnd)
{
return FALSE;
}

ShowWindow(hWnd, nCmdShow);
UpdateWindow(hWnd);

return TRUE;
}

//
// FUNCTION: WndProc(HWND, UINT, WPARAM, LPARAM)
//
// PURPOSE: Processes messages for the main window.
//
// WM_COMMAND - process the application menu
// WM_PAINT - Paint the main window
// WM_DESTROY - post a quit message and return
//
//
LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
{
int wmId, wmEvent;
PAINTSTRUCT ps;
HDC hdc;

switch (message)
{
case WM_COMMAND:
wmId = LOWORD(wParam);
wmEvent = HIWORD(wParam);
// Parse the menu selections:
switch (wmId)
{


case IDM_CREATE_FILE:
{
//lpszFirstPath = TEXT("D:\\1.txt");
CopyFile(lpszFirstPath, FILENAME, FALSE);

hFile = CreateFile(
FILENAME, // Указатель на строку с имененм файла
GENERIC_WRITE | GENERIC_READ, // Требуемый режим доступа
0, // Режим разделения,0 - безраздельный доступ к файлу.
NULL,// LPSECURITY_ATTRIBUTES=0 - объект не наследуемый.
OPEN_EXISTING,//Если файл не существует, то возвратить ошибку.
FILE_ATTRIBUTE_NORMAL,//Оставить атрибуты как есть
NULL //Не давать имя объекту ядра "Файл"
);

if (hFile == INVALID_HANDLE_VALUE)
{ // Открыть файл не удалось
MessageBox( NULL, "File could not be opened.",
"FileRev", MB_OK);
return(0);
}

dwFileSize = GetFileSize(hFile, NULL);

}
break;

case IDM_CREATE_PROECTION:
{
hFileMap = CreateFileMapping(
hFile, // Дескриптор проецирумого объекта "Файл"
NULL, //
PAGE_READWRITE, // Атрибуты защиты страниц
0, // LPSECURITY_ATTRIBUTES
dwFileSize+sizeof(WCHAR), //Младшие 32 разряда
NULL // и старшие 32 разряда размера файла.
);
if (hFileMap == NULL)
{ // Открыть объект "проецируемый файл" не удалось
MessageBox( NULL,"File map could not be opened.",
"FileRev", MB_OK);
CloseHandle(hFile);// Перед выходом закрываем открытые объекты
return (0);
}

}
break;
case IDM_PROECTION:
{
lpvFile = MapViewOfFile(
hFileMap, // Дескриптор объекта "Проецируемый файл"
FILE_MAP_WRITE, // Режим доступа
0, // Старшие 32 разряда смещения от начала файла,
0, // младшие 32 разряда смещения от начала файла
0 // и количество отображаемых байт. 0 - весь файл.
);

if (lpvFile == NULL)
{// Спроецировать оконное представление файла не удалось
MessageBox( NULL, "Could not map view of tile.",
"FileRev", MB_OK);
CloseHandle (hFileMap);// Перед выходом закрываем открытые объекты
CloseHandle(hFile);
return(0);
}


// Записываем в конец файла нулевой символ
lpchANSI = (LPSTR) lpvFile;
lpchANSI[dwFileSize] = 0;

// "Переворачиваем" содержимое файла наоборот
_strrev(lpchANSI);

// Преобразуем все комбинации управляющих символов "\n\r" обратно в "\r\n",
// чтобы сохранить нормальную последовательность кодов "возврат каретки"
// "перевод строки", завершающих строки в текстовом файле

lpchANSI = strchr(lpchANSI,(int)'\n'); // Находим адрес первого '\n'
while (lpchANSI != NULL) //Пока не найдены все символы '\n'
{
*lpchANSI =(int) '\r'; // Заменяем '\n' на '\r'
lpchANSI++; // Увеличиваем указатель
*lpchANSI =(int)'\n';// Заменяем '\r' на '\n' и увеличиваем указатель
lpchANSI++;
lpchANSI = strchr(lpchANSI,(int)'\n'); // Ищем дальше
}
}
break;

case IDM_CLOSE_PROECTION:
{
UnmapViewOfFile(lpvFile);
}
break;

case IDM_CLOSE_HANDLES:
{
CloseHandle(hFileMap);

// Удаляем добавленный ранее концевой нулевой байт.Для этого
// перемещаем указатель файла в конец на нулевой байт,
// а затем даем команду установить в этом месте конец файла

SetFilePointer(hFile, dwFileSize, NULL, FILE_BEGIN);
SetEndOfFile(hFile);
// SetEndOfFlle нужно вызывать после закрытия дескриптора объекта
// ядра "Проецируемый файл"

CloseHandle(hFile);// Уменьшаем счетчик ссылок на объект ядра "Файл"

// Запускаем NOTEPAD и загружаем в него созданный файл,
// чтобы увидеть плоды своих трудов
si.cb = sizeof (si);// Заполняем поле размера структуры si
si.wShowWindow = SW_SHOW;// Задаем режим показа окна NOTEPAD
si.dwFlags = STARTF_USESHOWWINDOW;// Устанавливаем флаг - учитывать
// значение поля wShowWindow
if( CreateProcess( NULL, "NOTEPAD.EXE " FILENAME,
NULL, NULL, FALSE, 0,
NULL, NULL, &si, &pi) )
{
// Если процесс создан, освобождаем
// дескрипторы потока и процесса
CloseHandle(pi.hThread);
CloseHandle(pi.hProcess);
}
return( 0 );
}
break;

case IDM_ABOUT:
DialogBox(hInst, MAKEINTRESOURCE(IDD_ABOUTBOX), hWnd, About);
break;
case IDM_EXIT:
DestroyWindow(hWnd);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
break;
case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
// TODO: Add any drawing code here...
EndPaint(hWnd, &ps);
break;
case WM_DESTROY:
PostQuitMessage(0);
break;
default:
return DefWindowProc(hWnd, message, wParam, lParam);
}
return 0;
}

// Message handler for about box.
INT_PTR CALLBACK About(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
UNREFERENCED_PARAMETER(lParam);
switch (message)
{
case WM_INITDIALOG:
return (INT_PTR)TRUE;

case WM_COMMAND:
if (LOWORD(wParam) == IDOK || LOWORD(wParam) == IDCANCEL)
{
EndDialog(hDlg, LOWORD(wParam));
return (INT_PTR)TRUE;
}
break;
}
return (INT_PTR)FALSE;
}

Обсуждение

Неизвестный
19.07.2011, 10:39
общий
весь проект
Прикрепленные файлы:
93c728e828cfcfc82fb46337f4dd8386.rar
давно
Профессор
230118
3054
19.07.2011, 22:20
общий
Вам надо было подать вопрос в рассылку C++. Я его только случайно увидела.
давно
Профессор
230118
3054
19.07.2011, 22:54
общий
Этим кодом можно заменить место после комментария // "Переворачиваем" содержимое файла наоборот
int count=0;
char * pch;

pch = strtok (lpchANSI," ,.-\n");
if(pch!=NULL)
while (pch != NULL)//Пока не закончится файл
{
int len=strlen(pch);
if(pch[len-1]='\r') len--;
if(len<=5) count++;

pch = strtok (NULL, " ,.-");
}
Неизвестный
19.07.2011, 23:24
общий
Считает. В общем уже поздно. Но все равно спасибо. Консультацию можно закрывать.
Форма ответа