Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 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
1-1148547389
yahaha
2006-05-25 12:56
2006.07.02
WebBrowser и атрибут STYLE


8-1138371313
0bsid
2006-01-27 17:15
2006.07.02
как очистить TImage.Bitmap.Canvas ?


15-1149677381
Fishka
2006-06-07 14:49
2006.07.02
Модераторам!!!!


15-1149527219
pGn-BrutaL
2006-06-05 21:06
2006.07.02
церковники запретили продажу кода да винчи...


6-1140008368
ZeFiR
2006-02-15 15:59
2006.07.02
простой парсинг XML файлов





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский