Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.09.15;
Скачать: CL | DM;

Вниз

TFileStream & String   Найти похожие ветки 

 
BOA_KAA ©   (2003-09-04 12:54) [0]

Здравтвуйте еще раз!
Вопрос такой: как сохраняется строка в файле, если ее сохранять через TFileStream. Нужно сохранять таблицу TStringGrid со всеми сойствами.
Делаю это так (само содержание):

for ACol:=0 to Grid.ColCount-1 do
for ARow:=0 to Grid.RowCount-1 do
begin
temp:=Length(Grid.Cells[ACol,ARow]); // размер ячейки
fsFile.Write(temp, SizeOf(Integer)); // запись размера
St:=Grid.Cells[ACol,ARow];
fsFile.Write(St, temp); // содержание
end;


Далее открываю:

for ACol:=0 to Grid.ColCount-1 do
for ARow:=0 to Grid.RowCount-1 do
begin
fsFile.Read(temp, SizeOf(Integer)); // размер ячейки
fsFile.Read(St, temp); // чтение строки
Grid.Cells[ACol,ARow]:=St;
end;


Но! Читается содержимое первой записанной строки, а затем вываливаемся с Access violation. Пробовал просмотреть, что именно читается в виде первой строки - она читается нормально, затем трассировка дает Unaccessible value для строки.
Думал, что происходят потери, сверял значение temp и возвращаемое значение от Read - одинаковые.
Одиночное сохранение/чтение строки происходят идеально, но как только дело доходит до цикла - все рушится, причем даже try ... except ошибку не отлавливает.

Может там еще что-нибудь приписывается в конец строки при ее записи?


 
Skier ©   (2003-09-04 12:57) [1]

fsFile.Write(St[1], temp); // содержание

SetLength(St, temp)
fsFile.Read(St[1], temp); // чтение строки


 
MBo ©   (2003-09-04 12:58) [2]

fsFile.Write(St[1], temp);

fsFile.Read(temp, SizeOf(Integer)); // размер ячейки
setLength(St,Temp);
fsFile.Read(St[1], temp); // чтение строки


 
ZEE ©   (2003-09-04 12:58) [3]

тебе надо в файл сохранять Grid.ColCount, Grid.RowCount, и при открытии читать их из файла и устанавливать соотв. св-ва грида, а потом уж цикл...


 
Skier ©   (2003-09-04 12:59) [4]

>MBo © (04.09.03 12:58)
Кто у кого списал ? :)))


 
Palladin ©   (2003-09-04 12:59) [5]

procedure WriteString(p_Stream:TStream;p_strValue:string);
var
I:Integer;
begin
i:=Length(p_strValue);
p_Stream.Write(i,sizeof(i));
p_Stream.Write(p_strValue[1],i);
end;

procedure ReadString(p_Stream:TStream;var rp_strValue:string);
begin
p_Stream.Read(rp_strValue,Sizeof(Integer);
SetLength(rp_strValue,Integer(rp_strValue));
p_Stream.Read(rp_strValue[1],Length(rp_strValue);
end;

function fReadString(p_Stream:TStream):String;
begin
ReadString(p_Stream,Result);
end;


 
MBo ©   (2003-09-04 13:00) [6]

>Skier
Дык вечный FAQ ;))


 
Skier ©   (2003-09-04 13:01) [7]

>MBo © (04.09.03 13:00)
Да уж ! :)


 
BOA_KAA ©   (2003-09-04 13:04) [8]

ААААААААААААААА!!! Балван!!! Точно!!!

Спасибо ааааагромное!



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

Текущий архив: 2003.09.15;
Скачать: CL | DM;

Наверх




Память: 0.48 MB
Время: 0.029 c
14-48737
Карлсон
2003-08-27 10:32
2003.09.15
я вернулся!


4-48829
jenya_d1
2003-07-15 08:37
2003.09.15
Выбор имени сервера в сети


14-48790
Rauf
2003-08-26 03:23
2003.09.15
Помогите, где скачать исходники Quake3 Arena???


3-48481
Lamer_of_Delphi
2003-08-22 11:04
2003.09.15
Получение значений ВСЕХ записей!!!


3-48431
den74
2003-08-25 14:31
2003.09.15
Как добавить поле в базу данных