Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > Нужны названия функций


Автор: Siend 3.3.2011, 19:09
знаю что есть все есть в базе, но как студент-традиционный делаю все в ночь перед сдачей и читать некогда)

язык С++ (желательно) или С;
нужны названия функций и принцип реализации для:
1.открытия текстового файла (на чтение / на чтение и запись)
2.копирования из него первых 300 символов в строку (строка произвольная)
3.посимвольной обработки строки (сравнивать символ с кодом таблицы ASCII)
4.удаление из строки ненужных символов
5.запись строки в файл (новый)
6.запись строки в файл (старый - перезапись всего файла)
7.освобождение памяти (везде где надо)

кроме самих названий и аргументов просьба разъяснить что сами аргументы означают, и какие библиотеки нужно подключить для той или иной функции. заранее огромнейшее спасибо)

Добавлено через 10 минут и 34 секунды
С миру по нитке! знаю что влом писать так много, поэтому если каждый кто знает напишет хотя бы по одной функции уже будет здорово  smile 

Автор: podzamkom 3.3.2011, 19:57
Поискал в старых своих исходниках, немного подправил, не судите строго код работает поныне.

Для задачи надо подправить и дописать определения. Вот код:
Код

#include <windows.h>
#include <commdlg.h>
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
//
#include "твой файл объявлений.h"
// В нем объявлены как минимум
/*
char szFileName[_MAX_PATH];
char szTitleName[_MAX_FNAME + _MAX_EXT];

void PopFileInitialize(HWND, int);
BOOL PopFileOpenDlg(HWND, PSTR, PSTR);
BOOL PopFileSaveDlg(HWND, PSTR, PSTR);
BOOL PopFileRead(HWND, PSTR);
BOOL MakeMTxtFile();
BOOL PopFileSave(PSTR, PSTR);
*/

//...
// продолжение кода 
static OPENFILENAME ofn;    // структура для открытия файла
// Фильтр для открытия файла
static char szFilter[] ="Все файлы(*.*)\0*.*\0\0";

//...

void PopFileInitialize(HWND hwnd, int mode)
{    // Инициализируем структуру для открытия файла
    ofn.lStructSize        = sizeof(OPENFILENAME);
    ofn.hwndOwner         = hwnd;
    ofn.hInstance         = NULL;
    ofn.lpstrFilter        = szFilter;
    ofn.lpstrCustomFilter    = NULL;
    ofn.nMaxCustFilter        = 0;
    ofn.nFilterIndex        = 0;
    ofn.lpstrFile        = NULL;
    ofn.nMaxFile        = _MAX_PATH;
    ofn.lpstrFileTitle        = NULL;
    ofn.nMaxFileTitle        = _MAX_FNAME + _MAX_EXT;
    if(strlen(szFileName) == 0)      // здесь хранится имя файла для открытия
        ofn.lpstrInitialDir    = "C:\\";
    else
        ofn.lpstrInitialDir = szFileName;
    // Заголовок окна для открытия файла
    ofn.lpstrTitle            = "Выберите файл списка для обработки";//NULL;
    ofn.Flags            = 0;
    ofn.nFileOffset        = 0;
    ofn.nFileExtension        = 0;
    ofn.lpstrDefExt        = "txt";
    ofn.lCustData        = 0L;
    ofn.lpfnHook        = NULL;
    ofn.lpTemplateName    = NULL;
    return;
}

//...

// здесь запускаем диалог открытия 
BOOL PopFileOpenDlg(HWND hwnd, PSTR pstrFileName, PSTR pstrTitleName)
{
    ofn.hwndOwner            = hwnd;
    ofn.lpstrFile            = pstrFileName;
    ofn.lpstrFileTitle                = pstrTitleName;
    ofn.Flags                = OFN_HIDEREADONLY | OFN_CREATEPROMPT;
    return GetOpenFileName(&ofn);    // запуск диалога для открытия файла
}
// здесь запускаем диалог сохранения 
BOOL PopFileSaveDlg(HWND hwnd, PSTR pstrFileName, PSTR pstrTitleName)
{
    ofn.hwndOwner            = hwnd;
    ofn.lpstrFile            = pstrFileName;
    ofn.lpstrFileTitle        = pstrTitleName;
    ofn.Flags                = OFN_HIDEREADONLY | OFN_CREATEPROMPT;
    return GetSaveFileName(&ofn);    // запуск диалога для открытия файла
}
// получим длину загружаемого файла                      
static long PopFileLength(FILE *file)
{
    int iCurrentPos, iFileLength;

    iCurrentPos = ftell(file);
    fseek(file, 0, SEEK_END);
    iFileLength = ftell(file);
    fseek(file, iCurrentPos, SEEK_SET);
    return iFileLength;
}
// почитаем файл
BOOL PopFileRead(HWND hwndEdit, PSTR pstrFileName)
{
    FILE    *file;
    long    iLength, size;
    PSTR   pstrBuffer;
    
    if(NULL == (file = fopen(pstrFileName, "rb")))
        return FALSE;
    iLength = PopFileLength(file);
    if(NULL == (pstrBuffer = (PSTR)malloc(iLength)))
    {
        fclose(file);
        return FALSE;
    }
    size = fread(pstrBuffer, 1, iLength, file);
    fclose(file);
    free(pstrBuffer);
    return TRUE;
}
// сохраним файл
BOOL PopFileSave(PSTR pIFileName, PSTR pOFileName)
{
    FILE *file_i;
    FILE *file_o;
    long iLength;
    long oLength;
    PSTR pIBuffer;
    PSTR pOBuffer;

    if(NULL == (file_i = fopen(pIFileName, "rb")))
        return FALSE;
    if(NULL == (file_o = fopen(pOFileName, "wb")))
        return FALSE;
    iLength = PopFileLength(file_i);
    if(NULL == (pIBuffer = (PSTR)malloc(iLength)))
    {
        fclose(file_i);
        return FALSE;
    }
    if(NULL == (pOBuffer = (PSTR)malloc((iLength) * 10)))  // размер выходного файла ОООчень большой
    {
        fclose(file_o);
        return FALSE;
    }
    fread(pIBuffer, 1, iLength, file_i);
    fclose(file_i);
    oLength = 0;
/**/
// обработка входного файла и копирование данных в выходной файл
/**/
    fwrite(pOBuffer, 1, oLength, file_o);  // запись результата
    fclose(file_o);
    free(pIBuffer);
    free(pOBuffer);
    return TRUE;
}



Автор: Siend 3.3.2011, 20:19
Псиб огромное, хотя это слишком сложно для меня - попытаюсь разобраться)

Автор: borisbn 5.3.2011, 10:07
Цитата(Siend @  3.3.2011,  19:09 Найти цитируемый пост)
1.открытия текстового файла (на чтение / на чтение и запись)

Код

FILE * fp = fopen( имя файла, "rt" ); // "rt" - чтение, "wt" - запись

Цитата(Siend @  3.3.2011,  19:09 Найти цитируемый пост)
2.копирования из него первых 300 символов в строку (строка произвольная)

Код

char c_str[ 301 ];
fread( str, sizeof( char ), 300, fp );
std::string cplusplus_str( c_str );

Цитата(Siend @  3.3.2011,  19:09 Найти цитируемый пост)
3.посимвольной обработки строки (сравнивать символ с кодом таблицы ASCII)

Код

for ( int i = 0; i < cplusplus_str.length(); i++ ) {
    if ( cplusplus_str[ i ] == 13 ) ...
}

Цитата(Siend @  3.3.2011,  19:09 Найти цитируемый пост)
4.удаление из строки ненужных символов

Код

cplusplus_str.erase( позиция, сколько_символов удалять );

Цитата(Siend @  3.3.2011,  19:09 Найти цитируемый пост)
5.запись строки в файл (новый)

Код

FILE * fp = fopen( имя файла, "wt" );
fprintf( fp, "%s", cplusplus_str.c_str() );

Цитата(Siend @  3.3.2011,  19:09 Найти цитируемый пост)
6.запись строки в файл (старый - перезапись всего файла)

см. п.5
Цитата(Siend @  3.3.2011,  19:09 Найти цитируемый пост)
7.освобождение памяти (везде где надо)

смотря как она была выделена. если просто переменная на стеке - то никак, если malloc, то free, если new, то delete

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)