Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.05.02;
Скачать: [xml.tar.bz2];




Вниз

StringGrid 


Aliev Adil   (2002-04-20 22:41) [0]

Как сохранить в файл StringGrid текстов



Song   (2002-04-21 09:41) [1]

Перебором, сохраняя каждую ячейку.



Anatoly Podgoretsky   (2002-04-21 11:36) [2]

Необязательнок, каждую, свойство rows имеет тип ТSrings



Song   (2002-04-21 12:15) [3]

2Anatoly Podgoretsky © (21.04.02 11:36)
Ага :) Сохрнаняя в файл каждый ряд, да? :)



Anatoly Podgoretsky   (2002-04-21 12:53) [4]

Да, не каждую ячейку, правда файлов будет много :-)



PaRL   (2002-04-21 13:49) [5]

Зачем много файлов то.

var F : TextFile;
S : String;
z, x, i, m, h : integer;
begin
AssignFile(f, "C:\file.dat");
Rewrite(f);
h := SG.Height;
Writeln(f, h);
i := Form1.SG.RowCount ;
Writeln(f, i);
m := Form1.SG.ColCount ;
Writeln(f, m);
for z := 0 to SG.RowCount-2 do
for x := 0 to SG.ColCount-1 do
begin
S := SG.Cells[x,z];
Writeln(F,S);
end;
CloseFile(F);
end;
end;


PS Вот когда я про это спрашивал, мне даже никто не намекнул :(



PaRL   (2002-04-21 13:52) [6]

В догонку. Загрузка ячеек:
AssignFile(F, "C:\file.dat");
Reset(F);
Readln(f, h);
SG.Height := h;
Readln(F, i);
Form1.SG.RowCount := i;
Readln(F, m);
Form1.SG.ColCount := m;
for z := 0 to SG.RowCount-2 do { Циклы в записи и в загрузке одинаковы.}
for x := 0 to SG.ColCount-1 do
begin
Readln(F,S);
SG.Cells[x,z] := S;
end;
CloseFile(F);



Song   (2002-04-21 13:57) [7]

2PaRL © (21.04.02 13:49)
ИМХО. записывать текстом - не рационально. А представьте себе большой грид, представляете какие будут файлы?
Мой вариант:

Procedure TForm2.SaveGrid(S:String; Strg:TStringGrid);
Var FileHandle,t,n,StringLen:Integer;
x:String[250];
Begin
With Strg Do
Begin
FileHandle:=FileCreate(S);
FileWrite(FileHandle,ColCount,SizeOf(ColCount)); //пишем количество столбцов
FileWrite(FileHandle,RowCount,SizeOf(RowCount)); //пишем количество рядов
For t:=1 to RowCount Do
For n:=0 to ColCount Do
Begin
StringLen:=Length(Cells[n,t])+1;
FileWrite(FileHandle,StringLen,SizeOf(StringLen));
x:=Cells[n,t];
FileWrite(FileHandle,X,StringLen);
End;
FileClose(FileHandle);
End;
End;

У меня тоже String, но файл сохраняемый такой процедурой будет занимать на порядок меньше места чем в Вашем варианте.



PaRL   (2002-04-21 14:00) [8]

Я не волшебник, я только учусь.

PS Спасибо.



Anatoly Podgoretsky   (2002-04-21 14:03) [9]

Интересно, с чего бы это, у него на ячейку перегрузка в два байта, а у тебя 4
Если уж писать, то Tab Delimited автоматом получается и количество строк и колонок
Не говорю уже про импорт/экспорт скажем в Excel



Song   (2002-04-21 14:11) [10]

Основная экономия не в перегрузке, а в записи фактической длины ячейки чем текстовой строки в целом.



Anatoly Podgoretsky   (2002-04-21 14:21) [11]

Так фактическая длина не требуется, она задается делимитерами, а текстовый формат имеет дополнительные преимущества. Но я все равно предподчел бы Tab Delimited, кроме этих преисуществ в нагрузку возможность импорта/экспорта.



PaRL   (2002-04-21 15:51) [12]


> Так фактическая длина не требуется, она задается делимитерами,
> а текстовый формат имеет дополнительные преимущества. Но
> я все равно предподчел бы Tab Delimited, кроме этих преисуществ
> в нагрузку возможность импорта/экспорта.

Можно пример?



Anatoly Podgoretsky   (2002-04-21 15:54) [13]

Так пример ты сам привел, а если ты про Tab Delimites то просто добавляются символы табуляции вместо CRLF




Форум: "Основная";
Поиск по всему сайту: delphimaster.net;
Текущий архив: 2002.05.02;
Скачать: [xml.tar.bz2];




Наверх





Память: 0.74 MB
Время: 0.031 c
1-2525            Коля                  2002-04-17 02:26  2002.05.02  
GetDir???


14-2673           SPeller               2002-03-27 11:07  2002.05.02  
Вопрос не о Дельфи


3-2450            Ash                   2002-04-09 14:54  2002.05.02  
Как в Fox-e физически удалить запись?


6-2630            Lider                 2002-02-14 21:44  2002.05.02  
TWebBrowser


3-2468            Reef                  2002-04-11 06:25  2002.05.02  
Delphi5 + IB6 + русский язык