Главная страница
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.024 c
3-48433
dot
2003-08-25 10:15
2003.09.15
Как сделать фильтр по нескольким полям?


6-48661
Maverick
2003-07-15 18:49
2003.09.15
какой компонент?


14-48793
Scholl
2003-08-26 01:20
2003.09.15
Покупка диска


9-48392
MeF88
2003-03-10 12:17
2003.09.15
Кто нить делал авиасим?


3-48442
dmtr
2003-08-25 10:23
2003.09.15
Программное создание таблицы dBASE 4