Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Запись из стрингида в фаил и обратная загрузка! 
V
    Опции темы
mrbrooks
Дата 30.6.2008, 09:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: 167
Всего: 306



Дык ведь все по аналогии. В данном примере использовал работу с файлом на прямую, без TStringList - а то критикуют тут нас с тобой рационалисты  smile 

Код

void __fastcall TMForm::BtnRunNewClick(TObject *Sender) //собственно заполняю сетку
{
MStrGrid->ColCount = 3;
MStrGrid->RowCount = 4;
MStrGrid->Cells[1][1] = "Вася"; MStrGrid->Cells[2][1] = 200;
MStrGrid->Cells[1][2] = "Вика"; MStrGrid->Cells[2][2] = 300;
MStrGrid->Cells[1][3] = "Петр"; MStrGrid->Cells[2][3] = 700;
}
//---------------------------------------------------------------------------

void __fastcall TMForm::BtnSaveNewClick(TObject *Sender) //сохраняю в файл
{
FILE *f;
f = fopen("mazafaka.txt","w+");
 fprintf(f,"%d\n%d\n",MStrGrid->ColCount,MStrGrid->RowCount);
 for (int i = 1; i<MStrGrid->RowCount;i++)
 {
        for (int j = 1; j < MStrGrid->ColCount; j++)
                {
                fprintf(f,"%s ",MStrGrid->Cells[j][i].c_str());
                MStrGrid->Cells[j][i] = "";
                }
        fprintf(f,"\n");
 }
fclose(f);
MListBox->Items->LoadFromFile("mazafaka.txt");   //проверка чего в файле  если влом смотреть сам файл (для нерационалистов)
}
//---------------------------------------------------------------------------

void __fastcall TMForm::BtnLoadNewClick(TObject *Sender) // загрузка в сетку
{
FILE *f;
f = fopen("mazafaka.txt","r+");
int row, col;
char buf[100];
fscanf(f,"%d\n%d\n",&col, &row);
 for (int i = 1; i<row;i++)
 {
        for (int j = 1; j < col; j++)
        {
         fscanf(f,"%s",buf);
         MStrGrid->Cells[j][i] = String(buf);
        }
        fscanf(f,"\n");
 }
fclose(f);
}
//---------------------------------------------------------------------------


Не скажу что данный пример оптимален по работе с файлом - но при известной его структуре пойдет. Иначе парсить строку.

Но есть одно замечание имхо. При таких данных самое гламурное хранить их уже в БД. 
PM MAIL   Вверх
XPyCT
Дата 30.6.2008, 11:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 24.8.2007
Где: Moldova

Репутация: 10
Всего: 10



спасибо вам огромное! пошел колдовать
PM MAIL Skype   Вверх
Riply
Дата 1.7.2008, 15:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Комодератор
Сообщений: 572
Регистрация: 27.3.2007
Где: St. Petersburg

Репутация: нет
Всего: 32



В дополнение к коду, который я здесь выкладывала,
попробовала написать еще две процедуры: сохранение "грида" в файл и загруза.

Код

unsigned long GreedToFile(const wchar_t * pFileName,  TStringGrid * Greed)
{
        HANDLE hFileObj = CreateFileW(pFileName, GENERIC_WRITE, FILE_SHARE_READ, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, 0);
        if (hFileObj != INVALID_HANDLE_VALUE)
        __try
                {    void * pBuffer = NULL;
                        unsigned long cbBuffer = 0;
                        __try
                                {    GreedToPByte(Greed, &pBuffer, &cbBuffer);
                                        unsigned long cbBytesWritten = 0;
                                        if (WriteFile(hFileObj, pBuffer, cbBuffer, &cbBytesWritten, NULL))
                                        if (SetEndOfFile(hFileObj)) return ERROR_SUCCESS;
                                }
                        __finally
                                { if (pBuffer) free(pBuffer);
                                };
                }
        __finally
                {    CloseHandle(hFileObj);
                }
 return GetLastError();
};

unsigned long GreedFromFile(const wchar_t * pFileName,  const int RestrictSize, TStringGrid * Greed)
{
  unsigned long RetError = ERROR_SUCCESS;
        HANDLE hFileObj = CreateFileW(pFileName, GENERIC_READ, FILE_SHARE_READ, NULL,
                                                                                                                                OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, 0);
        if (hFileObj != INVALID_HANDLE_VALUE)
            __try
                    {    LARGE_INTEGER cbFileSize;
                            if (GetFileSizeEx(hFileObj, &cbFileSize))
                                if ((cbFileSize.QuadPart > LenOffset - 1) & (cbFileSize.QuadPart < RestrictSize))
                                    { unsigned long cbBuffer = cbFileSize.QuadPart;
                                            void * pBuffer = malloc(cbBuffer);
                                            if (pBuffer)
                                                __try
                                                        { unsigned long cbBytesWritten = 0;
                                                                if (ReadFile(hFileObj, pBuffer, cbBuffer, &cbBytesWritten, NULL))
                                                                    if (cbBuffer == cbBytesWritten)
                                                                        { GreedFromPByte(Greed, pBuffer, cbBuffer);
                                                                                return ERROR_SUCCESS;
                                                                        }
                                                                    else RetError = ERROR_BAD_FORMAT;
                                                        }
                                                __finally
                                                        { free(pBuffer);
                                                        }
                                            else RetError = GetLastError();
                                    }
                                else RetError = ERROR_BAD_FORMAT;
                            else RetError = GetLastError();
                    }
            __finally
                    { CloseHandle(hFileObj);
                    }
        else RetError = GetLastError();
    return RetError;
};


Как и раньше, буду благодарна за "тыканье меня носом в ошибки"  smile

Добавлено через 2 минуты и 43 секунды
P.S.
 Почему код так "съезжает" ?
  Как от этого избавиться ?
PM MAIL   Вверх
XPyCT
Дата 1.7.2008, 19:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 381
Регистрация: 24.8.2007
Где: Moldova

Репутация: 10
Всего: 10



я бы тыкнул в ошибки но для меня пока это сложно!
спс за ответы! огромное
PM MAIL Skype   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++ Builder"
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по С++ Builder обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Настоятельно рекомендуем заглянуть в DRKB (Delphi Russian Knowledge Base) - крупнейший в рунете сборник материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C++ Builder | Следующая тема »


 




[ Время генерации скрипта: 0.0635 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.