Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Вниз

Cохранение StringGrid   Найти похожие ветки 

 
tamagavk   (2004-06-21 15:57) [0]

У меня такая проблема: У меня есть таблица с какими-то данными, как мне сделать так, чтобы при выходе из программы все табличные данные сохранялись (наверно сохранялись в файл, а может я и не прав) и чтобы при следующем запуске программы все мои данные былы в таблице.Конечно сформулировал по-тупому, но думаю вы меня поняли. Желательно привести пример.Заранне спасибо.


 
Andrey V. ©   (2004-06-21 16:26) [1]

Что Вы таблицей называете?


 
tamagavk   (2004-06-21 16:54) [2]

StringGrid


 
Andy BitOff ©   (2004-06-21 17:13) [3]

В цикле читаешь ячейки (например в StringList) и между полями вставляешь любой разделитель, это save, а когда читаешь, также в цикле при нахождении разделителя, следующий текс в следующую ячейку.

Еще как вариант, у StringGrid.Cols есть SaveToFile, тоже саме есть и у Rows.


 
zep ©   (2004-06-21 17:21) [4]

попробуй так

Как мне сохранить целый Stringgrid со всеми ячейками в файле?

 
 
Procedure

SaveGrid;
var f:textfile;
x,y:integer;
begin
assignfile (f, "Filename" );
rewrite (f);
writeln (f,stringgrid.colcount);
writeln (f,stringgrid.rowcount);
For X:= 0 to stringgrid.colcount- 1 do

For y:= 0 to stringgrid.rowcount- 1 do

writeln (F, stringgrid.cells[x,y]);
closefile (f);
end ;

Procedure LoadGrid;
var f:textfile;
temp,x,y:integer;
tempstr: string ;
begin
assignfile (f, "Filename" );
reset (f);
readln (f,temp);
stringgrid.colcount:=temp;
readln (f,temp);
stringgrid.rowcount:=temp;
For X:= 0 to stringgrid.colcount- 1 do

For y:= 0 to stringgrid.rowcount- 1 do begin

readln (F, tempstr);

stringgrid.cells[x,y]:=tempstr;

end ;

closefile (f);
end;


 
zep ©   (2004-06-21 17:34) [5]

или так
сохранить:
begin
if savedialog1.execute then
with TStringList.Create do
try
for i:=0 to stringgrid1.ColCount-1 do
Add(stringgrid1.Cols[i].CommaText);
SaveToFile(savedialog1.filename)
finally
Free
end;
end;

Открыть опять же соответственно так:
begin
if OpenDialog1.Execute then
with TStringList.Create do
try
LoadFromFile(OpenDialog1.FileName);
stringgrid1.RowCount:=Count;
for i:=0 to Count-1 do
stringgrid1.Cols[i].CommaText:=Strings[i]
finally
Free
end;
end;


 
tamagavk   (2004-06-22 00:17) [6]

Я делаю первым способом:
в строке assignfile (f, "Filename" ); мой текстовой файл ищется на диске. А как его считывать из ресурса и записывать в ресурс.
Напишите пожайлуста код


 
tamagavk   (2004-06-22 09:50) [7]

Удалено модератором


 
begin...end ©   (2004-06-22 10:09) [8]


> [6] tamagavk   (22.06.04 00:17)


> в строке assignfile (f, "Filename" ); мой текстовой файл ищется на диске

Это Вы сами придумали?


> А как его считывать из ресурса и записывать в ресурс

В какой ресурс?


 
tamagavk   (2004-06-22 12:27) [9]

Ну блин, мне надо сделать так, чтобы если я перенес мою прогу на другой компьютер, она работала. На другом компьютере текстового файла, в который я сохраняю StringGrid, нет же. А программа будет искать его .Я же указываю путь   assignfile(f,"C:\1.txt")
Как мне оформить все это, чтобы прога не обращалась к жесткому диску. Можно сделать файл-ресурс(res  SND_RESOURCE)? Если можно, то как? Или приведите свое решение данной проблемы


 
Anatoly Podgoretsky ©   (2004-06-22 12:30) [10]

assignfile(f,"A:\1.txt")


 
tamagavk   (2004-06-22 12:42) [11]

C чего вы взяли, что я буду запускать файл с дискеты?
Просто лежит файл(экзэшник) и текстовый документ,в который я записываю данные StringGrid, на чужом жестком диске. И ничего нету ни дискеты, ни диска. Может воспользоваться поиском моего текстового файла?Короче, надо сделать так, чтобы при запуске моей программы(с любого компьютера) текстовой файл был задействован. Для этого наверно надо поиск? КАК?


 
Плохиш ©   (2004-06-22 12:49) [12]


> Просто лежит файл(экзэшник) и текстовый документ,в который
> я записываю данные StringGrid, на чужом жестком диске. И
> ничего нету ни дискеты, ни диска.

:-))) Ты бы сам сначала разобрался, что надо


 
Anatoly Podgoretsky ©   (2004-06-22 12:54) [13]

tamagavk   (22.06.04 12:42) [11]
Ни с чего не брал, а отвечаю на твой вопрос "чтобы прога не обращалась к жесткому диску"

Если нет ни дискеты ни диска, то это означает что твоя программа находится в сети или в Сети, ну тогда там надо иметь права.


 
tamagavk   (2004-06-22 13:37) [14]

Ну че меня никто не понимает :-))))))))
Ну есть прога. При выходе из проги надо сохранить StringGrid. В файл вы мне подсказали как. Но в программе идет обращение к этому файлу  assignfile(f,"C:\1.txt") (место я указываю сам)   НУ Если я запущу программу на чужом жестком диске текстовой файл не найдется ,если его не положить на С:\,  и программа не запустится    Я же не буду просить каждого, кто будет пользоваться программой, положить текстовой файл на диск С:\   Пользователи наверно будут класть файл в нужную для себя дирректорию.   КАК БЫТЬ?


 
Andy BitOff ©   (2004-06-22 13:47) [15]

А ты сделай так, чтобы программа запустилась, но StringGrid при этом остался пустым (раз нет файла) или при переносе программы захвати с собой и текстовой файл.
Неужели это так сложно?


Пользователи наверно будут класть файл в нужную для себя дирректорию.   КАК БЫТЬ?

Добавить диалог выбора файла.


 
Anatoly Podgoretsky ©   (2004-06-22 13:57) [16]

Не царское это дело таскать файл, программа должна его создать при первом использовании.


 
tamagavk   (2004-06-22 13:58) [17]

Че за диалог выбора файла? Можете привести код.

Я написал вот это:

Procedure

SaveGrid;
var f:textfile;
x,y:integer;
begin
assignfile (f, "С:\1.txt" );
rewrite (f);
writeln (f,stringgrid.colcount);
writeln (f,stringgrid.rowcount);
For X:= 0 to stringgrid.colcount- 1 do

For y:= 0 to stringgrid.rowcount- 1 do

writeln (F, stringgrid.cells[x,y]);
closefile (f);
end ;

Procedure LoadGrid;
var f:textfile;
temp,x,y:integer;
tempstr: string ;
begin
assignfile (f, "С:\1.txt" );
reset (f);
readln (f,temp);
stringgrid.colcount:=temp;
readln (f,temp);
stringgrid.rowcount:=temp;
For X:= 0 to stringgrid.colcount- 1 do

For y:= 0 to stringgrid.rowcount- 1 do begin

readln (F, tempstr);

stringgrid.cells[x,y]:=tempstr;

end ;

closefile (f);
end;

Куда и чего нужно вставлять?


 
Andy BitOff ©   (2004-06-22 14:02) [18]

Че за диалог выбора файла? Можете привести код.

НУ ЗНАЕШЬ !!!...


 
tamagavk   (2004-06-22 14:20) [19]

Ну я же начинающий . Вы думаете, можно все знать?


 
evvcom ©   (2004-06-22 14:23) [20]

Ну ладно вам над ребенком издеваться. :-)
На закладке Dialogs компонент OpenDialog.


 
Andy BitOff ©   (2004-06-22 14:25) [21]

Закладка Dialogs компонент OpenDialog кидаешь на форму, настраиваешь (я думаю с фильтрами разберешься) на кнопку вешаешь;

If OpenDialog1.Execute then begin
 ...
 OpenDialog1.FileName; // имя выбранного файла
end;


 
BFG9k   (2004-06-22 14:38) [22]

Думаю , начинающий не поймет , но кажется это тот самый момент  ,когда можно использовать DBGrid вместе со стандартной базой данных.

P.S.: "...сохранялись (наверно сохранялись в файл, а может я и не прав)" - а куда ж еще ?:))


 
tamagavk   (2004-06-22 14:41) [23]

ЭТО КТО ЕЩЕ НЕ ПОЙМЕТ!!! . Вот по-человечески объяснили и все получилось. РАБОТАЕТ. Всем спасибо.


 
tamagavk   (2004-06-22 14:56) [24]

Почему не получается когда пишу это:

If OpenDialog1.Execute then begin
...
LoadFromFile(OpenDialog1.FileName);

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


 
tamagavk   (2004-06-22 15:20) [25]

Удалено модератором


 
Digitman ©   (2004-06-22 15:57) [26]


> tamagavk   (22.06.04 15:20) [25]
> Ну же!!!


не нукай ... не запряг ..


> LoadFromFile(OpenDialog1.FileName);
>
> пишет неизвестный идентификатор


конечно неизвестный ! LoadFromFile у тебя это что ? метод ! раз метод, то какого объекта ? ты же не указал конкретный объект, чей метод LoadFromFile ты пытаешься вызвать ... в дан.случае, наверно, это должен быть объект класса-наследника TStrings, например, TStringList


> Как, напрмер, написать чтобы не выводилось окно, где указывать
> путь, а программа сама искала текстовой файл и загружала
> его


да мало ли на дисках может оказаться файлов с именем 1.txt ! Что ж программе прикажешь делать, если таких файлов более одного найдется ? Какой прикажешь файл использовать ?

думаю, ты не делом занялся ..

при старте программы она должна попытаться открыть, например, в текущем каталоге файл 1.txt для чтения/записи ... если файл отсутствует, он тут же будет создан

var
fs: TFilestream;

..

при завершении программы запишем в файл содержимое грида
fs := TFilestream.Create("1.txt", fmCreate);
try
for i:= 0 to Grid.ColCount - 1 do
  Grid.Cols[i].SaveToStream(fs);
finally
fs.Free;
end;

при старте программы прочитаем из файла созраненное ранее содержимое грида
try
//пытаемся открыть файл для чтения
fs := TFilestream.Create("1.txt", fmRead);
//успешно открыли
try
 // пытаемся прочитать из файла содержимое колонок грида
 try
  for i:= 0 to Grid.ColCount - 1 do
   Grid.Cols[i].LoadFromStream(fs);
 finally
  fs.Free;
 end;
except
//в файле черт-те что, но только не то что ожидалось
end;
except
//файла нет - ничего страшного, грид будет пустой
end;


 
tamagavk   (2004-06-22 16:34) [27]

>да мало ли на дисках может оказаться файлов с именем 1.txt !

А если я дам файлу такое имя, которого точно не будет на чужом компьютере?  Ну можно же поиск файла применить?Нет?

В примере, который вы мне предлагаете пишет ошибку fmRead - неизвестный идентификатор.

Если LoadFromFile использовать окно при запуске программы не будет выводиться? Если не будет, то можно поподробнее насчет StringList. Где его вставлять и как его использовать?


 
BFG9k   (2004-06-22 16:47) [28]

FindFirst , FindNext  - поиск файла по маске. Почитал бы чтоли книжку по дельфям сначала...


 
Digitman ©   (2004-06-22 16:56) [29]


> если я дам файлу такое имя, которого точно не будет на чужом
> компьютере?  Ну можно же поиск файла применить?Нет?


да можно все ! но, уверяю тебя, не стоит этим заниматься ... что это за программа такая, рабочие файлы которой разбросаны где ни попадя ? все, что касается непосредственно программы (речь не идет о системных библиотеках/модулях), должно лежать либо в предопределенном каталоге либо там, куда укажет сам юзер .. задача программы - "помнить" путь к этому каталогу и имя файла в нем


> Если LoadFromFile использовать окно при запуске программы
> не будет выводиться?


этот метод не имеет никакого отношения к "окну при запуске программы" - диалог этот выводится при исполнении метода OpenDialog1.Execute , а не LoadFromFile


> пишет ошибку fmRead - неизвестный идентификатор.


писал навскидку .. это так сложно посмотреть в справке к методу TFilestream.Create() корректное имя идентификатора ? fmOpenRead этот параметр должен быть


> поподробнее насчет StringList. Где его вставлять и как его
> использовать?


да не нужно тебе это ... я ж показал тебе, как выгрузить и загрузить колонки с пом. файлового потока TFileStream


 
tamagavk   (2004-06-22 16:58) [30]

нету книжки - наощуп.  А если бы привели пример использования поиска или нужную ссылку - был бы очень благодарен.


 
Digitman ©   (2004-06-22 17:06) [31]


> tamagavk   (22.06.04 16:58) [30]


ну до чего ж ты упрямый !

пример использования FindFirst/FindNext есть в стандартной справке, привыкай ей пользоваться в первую очередь


 
begin...end ©   (2004-06-22 17:12) [32]

ИМХО, хреновая это затея с поиском файла по всему диску.


 
Amoeba ©   (2004-06-22 17:31) [33]


> нету книжки

Если нужны книжки в эл. виде - то на сайте А.Подгорецкого их куча.


 
zep ©   (2004-06-25 00:51) [34]

ExtractFilePath(ParamStr(0))
показывает путь к папке в какой экзешник твоей проги там пусть и лежит твой фаил



Страницы: 1 вся ветка

Форум: "Основная";
Текущий архив: 2004.07.11;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.54 MB
Время: 0.032 c
1-1088190077
zep
2004-06-25 23:01
2004.07.11
ComboBox


3-1087127689
AlexG
2004-06-13 15:54
2004.07.11
JOIN и условия


14-1087980998
WondeRu
2004-06-23 12:56
2004.07.11
Чего там в "Ершово"?


1-1088071605
Alek
2004-06-24 14:06
2004.07.11
Изменения в excel ...


1-1087966283
Игорь
2004-06-23 08:51
2004.07.11
Две строки в одной ячейки TStringGrid





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский