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

Вниз

Сохраниние ячеек таблицы   Найти похожие ветки 

 
Марина   (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;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.054 c
2-1150265940
XTD
2006-06-14 10:19
2006.07.02
Есть DisAssembler. А DisDelphi есть ?


4-1143669499
Turbid
2006-03-30 01:58
2006.07.02
Отличие одинарного клика от двойного в трее


10-1121179682
Piter
2005-07-12 18:48
2006.07.02
Вызов функций флешки


3-1146725967
Серебров Евгений Леонидович
2006-05-04 10:59
2006.07.02
База Данных


2-1150377106
Scavenger
2006-06-15 17:11
2006.07.02
Задержка времени