Главная страница
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.035 c
15-1149743871
Ega23
2006-06-08 09:17
2006.07.02
С Днём рождения! 8 июня


1-1148326889
Ortodocs
2006-05-22 23:41
2006.07.02
Ошибка в DLL при помещении её в HKLM->....->AppInit_DLLs


6-1140437175
Новочеркасский Волк
2006-02-20 15:06
2006.07.02
Дистанционный набор текста.


15-1146819842
Nous Mellon_
2006-05-05 13:04
2006.07.02
Сила алкоголя


9-1128284946
Ford
2005-10-03 00:29
2006.07.02
3D Tile