Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.01.2013, 22:46   #1
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию StringGrid

понадобилось реализовать процедуры записи и чтения StringGrid из файла (врожденных то нет...), написал процедуры, выдает ошибку "List index out of bounds" ну никак не соображу что не так... точнее вместо файла я использую StringList, т.к. потом его можно спокойно SL.LoadFromFile, SL.SaveToFile

Код:
Procedure SGLoadFromSL(SG: TStringGrid; SL: TStringList; ds1, ds2, ds3, ds4, ds5, ds6: string); //ds - Decimal Separator - по 1 паре разделителей на каждое число и текст
Var i, j, x, y, s1, s2, s3: integer;
begin

s1:= 0;
s2:= 0;
s3:= 0;

for i:= 0 to SG.ColCount-1 do
for j:= 0 to SG.RowCount-1 do

for x:= 0 to SL.Count do
begin
s1:= 0;
s2:= 0;
s3:= 0;

//SG[S1,S2] = S3
for y:= pos(ds1,SL[x])+1 to pos(ds2, sl[x])-1 do Inc(s1); //S1
for y:= pos(ds3,SL[x])+1 to pos(ds4, sl[x])-1 do Inc(s2); //S2
for y:= pos(ds5,SL[x])+1 to pos(ds6, sl[x])-1 do Inc(s3); //S3

if (StrToInt(Copy(SL[x], pos(ds1,SL[x])+1, s1)) = i) and (StrToInt(Copy(SL[x], pos(ds3,SL[x])+1, S2)) = j)
then SG.Cells[i,j]:= Copy(SL[x], pos(ds5, SL[x])+1, s3);
end;

end;

Procedure SGSaveToSL(SG: TStringGrid; SL: TStringList);
Var i, j: integer;
begin
for i:= 0 to SG.ColCount-1 do
for j:= 0 to SG.RowCount-1 do
SL.Add('SG['+IntToStr(i)+','+IntToStr(j)+'] = '+SG.Cells[i,j]+';');
end;
NewLamer&Programer вне форума Ответить с цитированием
Старый 25.01.2013, 22:49   #2
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,527
По умолчанию

for x:= 0 to SL.Count do // номер последней строки count-1
программа — запись алгоритма на языке понятном транслятору
evg_m на форуме Ответить с цитированием
Старый 25.01.2013, 22:51   #3
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

Цитата:
Сообщение от evg_m Посмотреть сообщение
for x:= 0 to SL.Count do // номер последней строки count-1
о! спасибо не заметил
NewLamer&Programer вне форума Ответить с цитированием
Старый 25.01.2013, 22:54   #4
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

еще такой трабл: при загрузке из файла, сохраненного с использованием выше описанной процедуры SGSaveToSL, в ячейках появляется "=", как от него избавиться? вызываю вот так: SGLoadFromSL(StringGrid1, SL, '[', ',', ',', ']', #32, ';'); //#32 пробел
NewLamer&Programer вне форума Ответить с цитированием
Старый 26.01.2013, 12:42   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
SG['+IntToStr(i)+','+IntToStr(j)+']
Стесняюсь спросить, а зачем именно в такой форме сохранять?
Давай упростим максимально:

Сохранение
Код:
var i:integer;
begin
 with TStringList.Create do begin
  with StringGrid1 do  for i:=0 to  RowCount-1 do Add(Rows[i].CommaText);
  SaveToFile(файл);
  Free;
 end;
end;
Считывание:
Код:
var i:integer;
begin
 with TStringList.Create do begin
  with StringGrid2 do  for i:=0 to  st.Count-1 do Rows[i].CommaText:=String[i];
  Free;
 end;
end;
Не?
I'm learning to live...

Последний раз редактировалось Stilet; 26.01.2013 в 13:12.
Stilet вне форума Ответить с цитированием
Старый 26.01.2013, 15:57   #6
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

Stilet, омг что это? о_О я просил упрощать? кому как, но имхо у меня было красивее :D пусть это не важно, но чисто эстетически лучше смотриться у меня... потом... боюсь спросить что такое Rows[i].CommaText... и вообще я писал не обработчик событий для одного единственного использования в одной программе, я писал процедуру которую можно будет использовать в разных программах (модуль)
NewLamer&Programer вне форума Ответить с цитированием
Старый 26.01.2013, 16:17   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
я просил упрощать?
Что ж. Не буду отвлекать от мук творчества.
Цитата:
боюсь спросить что такое Rows[i].CommaText
Это строка грида, где значения каждой колонки разделены запятой. Используется при сериализации (типа твоей).
Цитата:
и вообще я писал не обработчик событий для одного единственного использования
И где я тебе про обработчик что-то говорю? Читай внимательнее посты.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 26.01.2013, 17:15   #8
NewLamer&Programer
Форумчанин
 
Регистрация: 23.11.2012
Сообщений: 428
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Это строка грида, где значения каждой колонки разделены запятой. Используется при сериализации (типа твоей).
не совсем понял...
а чем вам просто StringGrid.Cells не угодил?
Цитата:
Сообщение от Stilet Посмотреть сообщение
И где я тебе про обработчик что-то говорю? Читай внимательнее посты.
ну я имел в виду, то что ты импользуешь уже созданный StringGrid, я же делаю процедуру в которую будет подаваться ссылка на него...

так или иначе я все равно не понял что такое Rows[i].CommaText, на котором ты базируешься... не приходилось как то использовать...
NewLamer&Programer вне форума Ответить с цитированием
Старый 26.01.2013, 17:25   #9
Smitt&Wesson
Старожил
 
Аватар для Smitt&Wesson
 
Регистрация: 31.05.2010
Сообщений: 13,543
По умолчанию

Stilet. я не паскуалист, я сишник но даже глядя на это
Код:
with StringGrid2 do
у меня закрадываются смутные сомнения, чо это будет работать. TStringGrid, класс Tobject. Каким образом он с булевой переменной вяжеться?
Может я чего-то недопонимаю?
Пиши пьяным, редактируй трезвым.
Справочник по алгоритмам С++ Builder

Последний раз редактировалось Smitt&Wesson; 26.01.2013 в 17:27.
Smitt&Wesson вне форума Ответить с цитированием
Старый 26.01.2013, 17:58   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Каким образом он с булевой переменной вяжеться?
Не понял... Булинка ту при чем? Это аналог сишого
Код:
using(StringGrid2){
 тут обращение к его свойствам без надобности писать имя.
}
Я правда не помню как в Сях такая инструкция описывается точно, но смысл надеюсь донес верный.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
StringGrid _-Ramzes-_ C++ Builder 4 22.12.2011 21:41
stringgrid+колесо мыши=>stringgrid.onclick aalleexxaa Общие вопросы Delphi 5 16.02.2011 16:58
StringGrid Farmokolog Общие вопросы Delphi 1 13.02.2011 16:11
StringGrid Waqq Помощь студентам 1 05.12.2010 21:31
stringgrid UROKSAN Общие вопросы Delphi 1 08.04.2008 13:28