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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.08.2010, 12:20   #1
vityanya
Пользователь
 
Регистрация: 03.08.2010
Сообщений: 23
По умолчанию Нужна помощь по сохранению в файл и открытие его...

Всем доброе время суток)
У меня такая проблемка, я сохраняю данные из двумерного массива, которые отображаются в стринггриде в файл... Далее, к примеру, я очищаю все поля и хочу открыть сохраненные данные, но только в выделенную строку вводятся данные, которые я вводил последними в строку стринггрида...

вот код процедур:

Код:
//Сохранение
procedure Tform1.save;
var cp:file of tcomp;
begin
if savedialog1.Execute then begin
assignfile(cp, savedialog1.filename);
rewrite(cp);
for i:=1 to n do
write(cp,Comp1[i-1]);
closefile(cp);
end;
end;
Код:
//Открытие
 procedure TForm1.load;
 var cp:file of tcomp;
 begin
 if OpenDialog1.Execute then begin
 assignfile (cp,OpenDialog1.filename);
 reset(cp);
 i:=0;
 while not(eof(cp)) do begin
 i:=i+1;
 setlength(Comp1, i);
 read(cp,Comp1[i-1]);
 end;
 closefile(cp);
 end;
 print; //вывод данных в стринггрид
end;
помогите кто чем может)

Последний раз редактировалось Stilet; 03.08.2010 в 12:42.
vityanya вне форума Ответить с цитированием
Старый 03.08.2010, 12:48   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Comp1[i-1]
Что такое Comp1?
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 03.08.2010, 12:53   #3
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Ну наверно Comp1 - это массив типизированный!
Я вот ток не пойму
Цитата:
я сохраняю данные из двумерного массива
А почему обращаетесь как к одномерному? (Или я чё путаю???)
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 03.08.2010, 12:53   #4
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

во первых я не увидел где у вас двумерный массив, выжу только одномерный, а по сути запись двумерного массива в файл и чтение его от туда можно сделать по такому алгоритму:
Код:
cp: TextFile;
str: String;
mass: array[0..200, 0..100] of real;//к примеру
// тра-ля-ля там окрытие файла, перезапись и тп
.....
   for i := 0 to 199 do
     begin
       for n := 0 to 99 do
         str := str + floattostr(mass[i, n]) + '|'{<-это разделитель};

         writeln(cp, str);
       end;
с чтение из файла я думаю разберетесь

P.S.
код не проверял могут быть ошибки
Не забываем говорить спасибо за помощь - это ведь так приятно

Последний раз редактировалось Sanprof; 03.08.2010 в 13:04.
Sanprof вне форума Ответить с цитированием
Старый 03.08.2010, 12:56   #5
Hacker19_90
Delphi Warrior
Старожил
 
Аватар для Hacker19_90
 
Регистрация: 15.08.2008
Сообщений: 2,502
По умолчанию

Цитата:
cp: TextFile;
vityanya наверно блоками пишет. Так что тут текстовой файл не подойдёт!
Mess with the best, die like the rest. (с) Hackers
Лабораторные, курсовые на Delphi\Pascal\C++
ya.flex-freelance@yandex.ru Icq - 636-954-303
Hacker19_90 вне форума Ответить с цитированием
Старый 03.08.2010, 13:12   #6
vityanya
Пользователь
 
Регистрация: 03.08.2010
Сообщений: 23
По умолчанию

Сори ребят, ошибся... массив сам по се безразмерный... как то так...

вот я добавляю строки:

Код:
//Добавление строк в стринггрид
procedure TForm1.Button6Click(Sender: TObject);
begin
n:=StrtoInt(Edit1.Text);
StringGrid1.RowCount:=n+1;
for i:=1 to n do
  begin
  StringGrid1.Cells[0,i]:=InttoStr(i);
  end;
end;
тут я вроде как заполняю массив:

Код:
//Заполнение массива
procedure TForm1.Add2;
begin
n:=0;
setlength(comp1,n+1);
Comp1[n].user:=Form2.Edit1.Text;
Comp1[n].seans:=Form2.Edit2.Text;
try
Comp1[n].vr:=StrtoFloat(Form2.Edit3.Text);
except
ShowMessage('Введите число');
end;
try
Comp1[n].tar:=StrtoFloat(Form2.Edit4.Text);
except
showMessage('Введите число');
end;
try
Comp1[n].stkons:=StrtoFloat(Form2.Edit5.Text);
except
showMessage('Введите число');
end;
try
Comp1[n].skid:=StrtoFloat(Form2.Edit6.Text);
except
showMessage('Введите число');
end;
end;
тут вроде как я заполняю строку стринггрида(p-это индекс выделенной строки):

Код:
//Вывод данных в стринггрид
procedure TForm1.print;
begin
stringgrid1.ColCount:=8;
stringgrid1.cells[1,p]:=Comp1[n].user;
stringgrid1.cells[2,p]:=Comp1[n].seans;
stringgrid1.cells[3,p]:=floattostr(Comp1[n].vr);
stringgrid1.cells[4,p]:=floattostr(Comp1[n].tar);
stringgrid1.cells[5,p]:=floattostr(Comp1[n].stkons);
stringgrid1.cells[6,p]:=floattostr(Comp1[n].skid);
stringgrid1.cells[7,p]:=floattostr(Comp1[n].tar*Comp1[n].vr+Comp1[n].stkons-(Comp1[n].tar*Comp1[n].vr)*(Comp1[n].skid/100));
end;

Последний раз редактировалось vityanya; 03.08.2010 в 13:14. Причина: ошибка
vityanya вне форума Ответить с цитированием
Старый 03.08.2010, 13:18   #7
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

тогда просто напрямую
Код:
   for i := 0 to stringgrid1.Cols.count-1 do
     begin
       for n := 0 to stringgrid1.Rows.count-1 do
         str := str + floattostr(stringgrid1.cells[i, n]) + '|'{<-это разделитель};

         writeln(cp, str);
       end;
или вам нужно сохранять именно из массива в файл???
Не забываем говорить спасибо за помощь - это ведь так приятно
Sanprof вне форума Ответить с цитированием
Старый 03.08.2010, 13:19   #8
GunSmoker
Старожил
 
Регистрация: 13.08.2009
Сообщений: 2,581
По умолчанию

Цитата:
Сообщение от vityanya Посмотреть сообщение
безразмерный...


Новые открытия российских студентов!
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
GunSmoker вне форума Ответить с цитированием
Старый 03.08.2010, 13:22   #9
Sanprof
Форумчанин
 
Аватар для Sanprof
 
Регистрация: 28.01.2008
Сообщений: 267
По умолчанию

Цитата:
Сообщение от GunSmoker Посмотреть сообщение

Новые открытия российских студентов!
интересно, как тогда по вашему такой массив называется???
Код:
mass: array of integer;
а такой???
Код:
mass: array[0..9] of integer;
Не забываем говорить спасибо за помощь - это ведь так приятно
Sanprof вне форума Ответить с цитированием
Старый 03.08.2010, 13:26   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

GunSmoker, я думаю имелось в виду динамический.
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
CppWEbBrowser. Запрет на открытие нового окна, и открытие его в том же окне Askar_g Общие вопросы C/C++ 4 25.06.2011 20:00
Файл rundll32.exe - Очень нужна помощь. Nuvi Windows 14 03.12.2009 16:33
Нужна помощь по вставке изображения путем VBA ACCESS в файл EXCEL AlVBA Microsoft Office Access 2 18.05.2009 15:58
Запись в файл в Delphi, нужна помощь s-t-r-i-k-e-r Помощь студентам 5 03.06.2008 19:11
Нужна помощь(Разработать алгоритм, нарисовать его блок-схему.) miron Помощь студентам 4 26.02.2008 12:08