Форум: "Начинающим";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];
ВнизСохраниние ячеек таблицы Найти похожие ветки
← →
Марина (2006-06-13 18:39) [0]Здравствуйте. Подскажите пожалуйста как мне правильно сохранять и загружать таблицу находящуюся в СтрингГриде, если в ячейке многострочная запись ?
а то нижеприведенный метод корректно работает только если в ячейках записи однострочные, а если грузить многострочные ячейки, то порядок записай в ячейках таблицы сбивается.
procedure 3arpy3ka;
var
f:textfile;
temp,x,y:integer;
sapppath,tempstr:string;
begin
sapppath := ExtractFilePath(Application.ExeName);
For X:=0 to InterBase.colcount-1 do
For y:=0 to InterBase.rowcount-1 do
begin
tempstr := "";
InterBase.cells[x,y]:=tempstr;
end;
InterBase.RowCount := 2;
Application.ProcessMessages();
if FileExists(sapppath+"try.dat") then
begin
try
assignfile (f,sapppath+"try.dat");
reset (f);
readln (f,temp);
InterBase.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;
finally
closefile (f);
end;
end else MessageDlg("Невозможно загрузить файл",mtError,mbOKCancel,0);
end;
procedure CoxpaHeHue;
var
f:textfile;
x,y:integer;
sapppath : string;
begin
sapppath := ExtractFilePath(Application.ExeName);
assignfile (f,sapppath+"try.dat");
rewrite(f);
writeln(f,InterBase.colcount);
writeln(f,InterBase.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);
Application.ProcessMessages();
end;
а как сохранять и загружать так, чтобы поддерживались многострочные записи в ячейках вида :
строка 1
строка 2
строка 3
строка 4
помогите пожалуйста
← →
Жуков Олег (2006-06-13 19:54) [1]
> Марина (13.06.06 18:39)
>
>
Способ 1.
Заменять перед записью в строках символы новой строки на служебную последовательность символов, например функцией StringReplace:const
NewLineTag = "##NEWLINE##";
s := StringReplace(s, #13#10, NewLineTag, [rfReplaceAll]);
При чтении, соответственно делать обратную операцию:s := StringReplace(s, NewLineTag, #13#10, [rfReplaceAll]);
Способ 2.
Отказаться от текстового файла в пользу файла с записями переменной длинны, и в начале каждой записи в файл писать длину строки, затем саму строку.
При чтении каждой записи сначала считывать длину (количество символов), затем, со следующей позиции считать в строковую переменную ранее прочитанное количесво символов.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2006.07.02;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.016 c