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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2013, 12:47   #1
Ant_M
Пользователь
 
Регистрация: 03.05.2013
Сообщений: 22
По умолчанию Считывание из Stringgrid с последующим заполнением

Ребят помогите не могу разобраться.
У меня есть функция которая сохраняет в файл таблицу стрингрид.
Код:
procedure SaveStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
 var
   f:    TextFile;
   i, k: Integer;
 begin
   AssignFile(f, FileName);
   Rewrite(f);
   with StringGrid do
   begin
 
    Writeln(f, ColCount);
     Writeln(f, RowCount);
 
    for i := 0 to ColCount - 1 do
       for k := 0 to RowCount - 1 do
         Writeln(F, Cells[i, k]);
   end;
   CloseFile(F);
 end;
и соответственно считывание
Код:
 procedure LoadStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
 var
   f:          TextFile;
   iTmp, i, k: Integer;
   strTemp:    String;
 begin
   AssignFile(f, FileName);
   Reset(f);
   with StringGrid do
   begin
    Readln(f, iTmp);
     ColCount := iTmp;
    Readln(f, iTmp);
     RowCount := iTmp;
    for i := 0 to ColCount - 1 do
       for k := 0 to RowCount - 1 do
       begin
         Readln(f, strTemp);
         Cells[i, k] := strTemp;
       end;
   end;
    CloseFile(f);
 end;
после считывания из файла мне хочется забить новые данные при сохранении старых.
но с кодом что то не то,он стирает которые считали из файла и записывает новые.
Код:
procedure TForm1.Button1Click(Sender: TObject);
 begin
 inc(y);
form4.StringGrid1.Cells[1,y]:=Form1.Edit1.Text;
form4.StringGrid1.Cells[2,y]:=Form1.comboBox1.Text;
form4.StringGrid1.Cells[3,y]:=Form1.comboBox2.Text;
form4.StringGrid1.Cells[4,y]:=Form1.Edit2.Text;
form4.StringGrid1.Cells[5,y]:=Form1.comboBox3.Text;
form4.StringGrid1.Cells[6,y]:=Form1.Edit4.Text;
form4.StringGrid1.Cells[7,y]:=Form1.Edit5.Text;
form4.StringGrid1.Cells[8,y]:=Form1.Edit6.Text;
form4.StringGrid1.Cells[9,y]:=Form1.comboBox4.Text;
form4.StringGrid1.Cells[10,y]:=Form1.comboBox5.Text;
      edit1.Clear;
      edit2.Clear;
      edit3.Clear;
      edit4.Clear;
      edit5.Clear;
      edit6.Clear;
      edit7.Clear;
      edit8.Clear;
      edit9.Clear;
      edit10.Clear;
      edit11.Clear;
   ComboBox1.ItemIndex:=-1;
      ComboBox2.ItemIndex:=-1;
      ComboBox3.ItemIndex:=-1;
         ComboBox4.ItemIndex:=-1;
      ComboBox5.ItemIndex:=-1;
            end;

как сделать так чтоб данные из файла сохранялись?
Ant_M вне форума Ответить с цитированием
Старый 06.05.2013, 12:56   #2
Utkin
Старожил
 
Аватар для Utkin
 
Регистрация: 04.02.2009
Сообщений: 17,351
По умолчанию

Цитата:
после считывания из файла мне хочется забить новые данные при сохранении старых.
Можно этот момент поподробней. Чего-то в моей голове 3 условия - считать, сохранить, оставить старые данные одновременно не выполняются
Маньяк-самоучка
Utkin появился в результате деления на нуль.
Осторожно! Альтернативная логика
Utkin вне форума Ответить с цитированием
Старый 06.05.2013, 13:00   #3
Ant_M
Пользователь
 
Регистрация: 03.05.2013
Сообщений: 22
По умолчанию

У меня две формы. в первой заполнение данных,во второй сам стрингрид где есть кнопки считать и записать в файл.
Считываешь из файла. переходишь к заполнению новых данных,он перезаписывает первую строку,и так далее. тем самых данные из файла стираются,а нужно чтобы заполнялись дальше.
Ant_M вне форума Ответить с цитированием
Старый 06.05.2013, 13:00   #4
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Код:
Rewrite(f);
замените на
Код:
Reset(f);
или
Код:
Append(f)
ваш вариант открывает файл для перезаписи.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 06.05.2013, 13:04   #5
Ant_M
Пользователь
 
Регистрация: 03.05.2013
Сообщений: 22
По умолчанию

нет видимо не в этом дело,а в последнем коде записи,он просто берет и перезаписывает уже занятые ячейки
Ant_M вне форума Ответить с цитированием
Старый 06.05.2013, 13:11   #6
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

Цитата:
Сообщение от Ant_M Посмотреть сообщение
нет видимо не в этом дело,а в последнем коде записи,он просто берет и перезаписывает уже занятые ячейки
кто берет? какие ячейки? о чем вообще речь: о файле или гриде?

попробуйте нормально описать последовательность действий и где происходит ошибка.
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 06.05.2013, 13:16   #7
Ant_M
Пользователь
 
Регистрация: 03.05.2013
Сообщений: 22
По умолчанию

захожу в программу,считываю из файла,все хорошо.
дальше хочу дополнить данные,и чтобы данные которые я считала из файла они тоже остались.
А происходит так считываю из файла допустим три строки. Начинаю новое заполнять,он первую строку заполняет новыми данными,а две оставляет из файла,и так далее, то есть он не добавляет сверху
Ant_M вне форума Ответить с цитированием
Старый 06.05.2013, 13:39   #8
Ant_M
Пользователь
 
Регистрация: 03.05.2013
Сообщений: 22
По умолчанию

могу файлом скинуть
Ant_M вне форума Ответить с цитированием
Старый 06.05.2013, 13:42   #9
DiemonStar
Старожил
 
Регистрация: 08.02.2012
Сообщений: 2,173
По умолчанию

тогда вам в процедуру заполнения грида данными из файла нужно добавить (например, в конец) вот такую строчку:

Код:
 procedure LoadStringGrid(StringGrid: TStringGrid; const FileName: TFileName);
 var
   f:          TextFile;
   iTmp, i, k: Integer;
   strTemp:    String;
 begin
   AssignFile(f, FileName);
   Reset(f);
   with StringGrid do
   begin
    Readln(f, iTmp);
     ColCount := iTmp;
    Readln(f, iTmp);
     RowCount := iTmp;
    for i := 0 to ColCount - 1 do
       for k := 0 to RowCount - 1 do
       begin
         Readln(f, strTemp);
         Cells[i, k] := strTemp;
       end;
   end;
    y := RowCount;
    CloseFile(f);
 end;
Правильно поставленная задача - три четверти решения.
DiemonStar вне форума Ответить с цитированием
Старый 06.05.2013, 13:45   #10
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
то есть он не добавляет сверху
Начнем с того, что при считывании из файла код у Вас заполняется таблицу не сверху вниз, а слева направо:

Код:
    for i := 0 to ColCount - 1 do
       for k := 0 to RowCount - 1 do
Это номер раз - некритично, ибо работает, но противоречит Вашим же рассуждениям.

Номер два:

Код:
 inc(y);
Что есть игрек и какое значение она принимает в процессе исполнения кода (то бишь при нажатии батон1)? То, что она в себе содержит номер строки - это понятно, но какое реальное значение она принимает?

И кстати говоря, если Вы хотите именно дополнять СтрингГрид, Вам нужно количество строк после inc(y) менять, иначе у Вас оно не меняется и происходит замещение данных вместо добавления.

Вообще лучше бы было приложить весь проект в архиве - быстрее бы разбор полетов пошел.

UPDATE Собственно, DiemonStar уже указал Вам возможное решение, уверен, что оно как раз и будет правильным
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ерунда с заполнением строки RAZOR1703 Visual C++ 7 26.11.2011 16:33
задача с обновлением Memo и сразу последующим его заполнением инфой по сети NiKiToZZ- Помощь студентам 5 29.12.2010 12:55
Stringgrid считывание информации из ячейки KSUwa Помощь студентам 2 12.11.2010 09:12
проблема с заполнением массива Freddi Krjuger Общие вопросы C/C++ 0 22.10.2010 18:12
Проблема с заполнением asd48 Помощь студентам 1 21.04.2009 00:21