![]() |
|
![]() ![]() ![]() |
|
Взюх |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 17.6.2006 Репутация: нет Всего: нет |
у меня есть компонент StringGrid (типа моя база данных) и ее содержимое при нажатии на кнопку сэйв надо сохранить в файле что б потом при нажатии на кнопку оупэн она открылась, вопрос, КАК сохранить содержимое а потом открыть?
|
|||
|
||||
Partizan |
|
|||
![]() Let's do some .NET ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 2828 Регистрация: 19.12.2005 Где: Санкт-Петербург Репутация: 7 Всего: 67 |
=))) Придумать формат хранения данных, согласно этому формату запихивать данные в файл, и на основе него же извлекать их из файла...
самое грубое - это хранение матрицы значений в txt файле.... -------------------- СУВ, Partizan. |
|||
|
||||
W0LF |
|
||||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: нет Всего: 20 |
Дело в том, Partizan, что он, скорее всего, не то спросил. Ему все-равно где и как хранить, главное, как взять и занести значения в файл
![]() Я так понял, что "самое грубое " хранение тебя устроит, Взюх. Самый глупый и быстрый(в смысле написания кода) вариант : Пройтись по всем ячейкам Stringrid'a(StringGrid->Cells[i][j]) и занести их в Memo, добавляя между ними пробелы, ток заноси с переходом на новую строку. Потом просто и тупо сохранить все в Memo: Используем OpenDiaolog:
Когда захочешь все это открыть, то так:
Теперь обратный процесс - из Memo занести все в StringGrid: Для начала все разобъем на слова, Смотри здесь как это делается Но если неохота разбираться с тем, как это занести еще и в StringGrid напиши мне, а я скину тебе. Просто два раза постить одно и то же, ну сам понимаешь... На моем пне 1.7ghz с 512mb ddr конечный результат при появлении инфы в СтрингГриде(размерность его 6x6864) проходит за 2-3 секунды... То есть сравнительно не долго ![]() Это сообщение отредактировал(а) W0LF - 18.6.2006, 20:16 -------------------- iOS developer |
||||
|
|||||
Взюх |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 17.6.2006 Репутация: нет Всего: нет |
ХЫ! =) спасибо! =) но я вчера уже разобрался =)
void __fastcall TForm1::SaveAsClick(TObject *Sender) { if(SaveDialog1->Execute()) { fout.open(SaveDialog1->FileName.c_str()); for(int i=1;i<StringGrid1->RowCount;i++) { for(int j=0;j<2;j++) { { fout<<StringGrid1->Cells[j][i].c_str(); fout<<"#"; } } fout<<";"; } } } Вотб терь пытаюсь загрузить из этого документа обратно в СтрингГрид ![]() Добавлено @ 07:02 W0LF, а ты сам-то пробовал свой код? слишком короткий и гладкий чтоб работал. |
|||
|
||||
tramp |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 14.4.2006 Где: Kemerovo Репутация: нет Всего: нет |
Я делаю так, разделитель табуляция. Файл текстовый, хотя можно файлу дать расширение xls. И он автоматом будет открываться в Excel. Обратное чтение лушче побайто.
#include <stdio.h> int __fastcall TForm1::save_grid(TStringGrid *sGrid, char *fname) { FILE *out; int i,j; if((out=fopen(fname,"w+t"))==NULL)return -1; for (j=0;j<sGrid->RowCount;j++) { for (i=0;i<sGrid->ColCount;i++) { fprintf(out,"%s",sGrid->Cells[i][j].c_str()); if(i!=sGrid->ColCount-1)fprintf(out,"\t"); } fprintf(out,"\r"); } fclose(out); return 0; }
Это сообщение отредактировал(а) tramp - 19.6.2006, 07:43 |
|||
|
||||
Взюх |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 17.6.2006 Репутация: нет Всего: нет |
tramp, это код для чтения из файла с расширением xls?
|
|||
|
||||
tramp |
|
|||
Новичок Профиль Группа: Участник Сообщений: 18 Регистрация: 14.4.2006 Где: Kemerovo Репутация: нет Всего: нет |
2Взюх
Это код для чтения текстового файла, имеющего любое расширение, с разделителями табуляции. ЗЫ: Вторая часть кода (там где заполнение) - проверка на корректность. Мне были нужны только цифры. Это сообщение отредактировал(а) tramp - 19.6.2006, 07:57 |
|||
|
||||
Взюх |
|
|||
Новичок Профиль Группа: Участник Сообщений: 41 Регистрация: 17.6.2006 Репутация: нет Всего: нет |
Я пытаюсь написать код который читаем посимвольно строку их тхт файла и проверяет если символ равен ; или #, хы, но тут проблема:
ofstream fout; ifstream fin; На сколько я знаю поток fout<<StringGrid1->Cells[j][i].c_str(); Записывает содержимое ячейки в файл, для считывания содержимого файла я так понял мне надо использовать поток fin>> Но я не знаю как он работает =( (в том смысле что, не знаю как с ним работать ) |
|||
|
||||
W0LF |
|
|||
![]() alexander lonsky ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 1164 Регистрация: 9.2.2006 Где: Ukraine.Dnepropet rovsk Репутация: нет Всего: 20 |
Взюх, мой код я тебе дал с моей программы, которую писал 2 года назад. Там все работает.
Насчет fin не знаю. Я с ним в билдере не работал ![]() -------------------- iOS developer |
|||
|
||||
ZIlya |
|
||||
Новичок Профиль Группа: Участник Сообщений: 12 Регистрация: 6.2.2006 Репутация: нет Всего: нет |
самый простой(но не лучший) способ по моему
сохранение
загрузка
|
||||
|
|||||
![]() ![]() ![]() |
Правила форума "С++ Builder" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C++ Builder | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |