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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.07.2010, 07:30   #21
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Решил вернуться к этой задачке . Возникли новые условия задачи, а именно:
1. Занесение в SG3 результатов сранения;
2. Возможность вручную указывать с какой и по какую колонку заносить в результирующую таблицу. Например, сраниваем SG1 и SG2 по столбцам 2 и 4. 2ой столбец в SG1, а 4ый в SG2. А значению в таблицу с результатом нужно занести в SG3. Пробовал делать так:
Код:
(после занесения в Memo1)
procedure TForm1.RzCheckBox5Click(Sender: TObject);
var
 i,j,i1,j2,col,row: integer;
 ravno:boolean;
begin
 if Form1.RzCheckBox5.Checked = True then
 begin
   Form1.RzCheckBox4.Checked:=False;
   Form1.Memo1.Lines.Clear;
   for i1:=1 to Form1.SG1.RowCount - 1 do //проверяем значения первой таблицы
   begin
   ravno:=false;
   for i:=1 to Form1.SG2.RowCount - 1 do   // проверяем значения второй таблицы
       begin
         if Form1.SG2.Cells[StrToInt(Form1.Edit2.Text) - 1,i] = Form1.SG1.Cells[StrToInt(Form1.Edit1.Text) - 1,i1] then //здесь я вручную указываю какие столбцы сравнивать между собой
         begin
            ravno:=true; // если совпадения есть то ничего не будет в мемо
         end;
       end;
    if ravno=false then //если нет совпадений
    for j:=StrToInt(Form1.Edit3.Text)  to StrToInt(Form1.Edit4.Text)  do //здесь я вручную пытаюсь указать с какой и по какую колонку записывать в Memo1 к результату значения. Жалко, что в Memo нельзя в виде колонок записывать.
      memo1.Lines.Add(Form1.SG1.Cells[StrToInt(Form1.Edit1.Text) - 1 + j - 2,i1]); //записываем отсутствующее
      Form1.ProgressBar1.StepBy(i);
  //здесь я пытался записать тоже самое, что записывается в Memo1, но в StringGrid,  //т.к. значения в Memo1 записываются из SG1, то я и хотел в SG3 записать колонки из //этого SG1
   end;
 end;
end;
Но, не получается. В SG3 ничего не заносится. Мне это нужно, чтобы я потом мог сохранить результат в XLS.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 27.07.2010, 08:03   #22
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Вот это, наверное лучше сделать так:
Код:
  if ravno=false then //если нет совпадений
  Begin 
  for j:=StrToInt(Form1.Edit3.Text)  to StrToInt(Form1.Edit4.Text)  do //здесь я вручную пытаюсь указать с какой и по какую колонку записывать в Memo1 к результату значения. Жалко, что в Memo нельзя в виде колонок записывать.
      memo1.Lines.Add(Form1.SG1.Cells[StrToInt(Form1.Edit1.Text) - 1 + j - 2,i1]); //записываем отсутствующее
      Form1.ProgressBar1.StepBy(i);
  //здесь я пытался записать тоже самое, что записывается в Memo1, но в StringGrid,  //т.к. значения в Memo1 записываются из SG1, то я и хотел в SG3 записать колонки из //этого SG1
   end;
Плюс, я не совсем понял строку

Код:
memo1.Lines.Add(Form1.SG1.Cells[StrToInt(Form1.Edit1.Text) - 1 + j - 2,i1]);
А что если я выберу первый столбец, а он тут будет нулевым получаться?
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 27.07.2010, 08:15   #23
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

В общем второй вопрос не совсем мне понятен... попробуй подробнее расписать. А с занесением в SG3 сложности нет:

Код:
var
 i,i1: integer;
 ravno:boolean;
begin
 for i:=1 to Form1.SG1.RowCount - 1 do   //проверяем значения первой таблицы
   begin
   ravno:=false;
     for i1:=1 to Form1.SG2.RowCount - 1 do //проверяем значения второй таблицы
       begin
         if Form1.SG1.Cells[strtoint(edit1.Text),i] = Form1.SG2.Cells[strtoint(edit2.Text),i1] then
         begin
            ravno:=true; // если совпадения есть то ничего не будет
         end;
       end;
    if ravno=false then //если нет совпадений, заносим в выбранную колонку в SG3
      SG3.Cells[strtoint(edit3.Text),i]:=Form1.SG1.Cells[strtoint(edit1.Text),i];
   end;
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 27.07.2010, 08:17   #24
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Плюс, я не совсем понял строку

Код:

memo1.Lines.Add(Form1.SG1.Cells[StrToInt(Form1.Edit1.Text) - 1 + j - 2,i1]);

А что если я выберу первый столбец, а он тут будет нулевым получаться?
Этим самым я хотел решить вопрос о записи колонок. То есть к итоговому результату сравнения (если бы это выводилось в SG3) прибавлялись еще диапозон колонок от
Код:
StrToInt(Form1.Edit3.Text)
и до
Код:
StrToInt(Form1.Edit4.Text)
.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 27.07.2010, 08:36   #25
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Давай максимально подробнее: есть таблица (SG1) со значениями (это якобы два столбца):
Код:
1,11
2,22
3,33
4,44
5,55
таблица (SG2) со значениями (это якобы два столбца):
Код:
4,44
5,55
6,66
7,77
8,88
Результатом сравнения по первому столбцу будет запись в SG3 (в нужный столбец):
Код:
1
2
3
Что еще должно выбираться и выводиться в SG3 на этом примере?
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 27.07.2010, 08:47   #26
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
Радость

Ок, подробно так подробно . Смотри. Есть таблицы как во вложении.

Нужно произвести например сравнение по столбцам 2 и 4 в SG1 (таблица слева) и SG2 (таблица справа), а в SG3 вывести результат (то, что мы вчера с тобой сделали) + прозвольные колонки, например хотя бы из первой таблицы, которые укажет пользователь. Он может указать как третью колонку, так и шестую, а может и захочет с третьей по шестую. Так понятнее получилось?
Изображения
Тип файла: jpg tab.jpg (13.9 Кб, 194 просмотров)
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 27.07.2010, 08:54   #27
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

Не совсем (может я русский язык уже перестаю понимать...). В общем меня интересует результат. А именно, то, что должно получиться в SG3, например, при выборе пользователем сравнения по 2 и 4 столбцам и указанием произвольной колонки №3
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 27.07.2010, 09:19   #28
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Цитата:
Не совсем (может я русский язык уже перестаю понимать...). В общем меня интересует результат. А именно, то, что должно получиться в SG3, например, при выборе пользователем сравнения по 2 и 4 столбцам и указанием произвольной колонки №3
Ну как не понятно то . Результат: отображение значений, которых нет в первой таблице, но есть во второй, в зависимости от того, какой Checkbox я выбрал. Этот момент на самом деле сделан. Проблема в выводе в StringGrid + произвольно выбранная, т.е. когда указана пользователем номер колонки произвольный, который должен вписываться столбцом в SG3 рядом со столбцом, в котором значения получились при сравнении. А так? ))
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Старый 27.07.2010, 10:10   #29
DIgorevich
Погулять вышел
Участник клуба
 
Аватар для DIgorevich
 
Регистрация: 17.05.2010
Сообщений: 1,573
По умолчанию

В таком случае:
Код:
var
 i,i1: integer;
 ravno:boolean;
begin
 for i:=1 to Form1.SG1.RowCount - 1 do   //проверяем значения первой таблицы
   begin
   ravno:=false;
     for i1:=1 to Form1.SG2.RowCount - 1 do //проверяем значения второй таблицы
       begin
         if Form1.SG1.Cells[strtoint(edit1.Text),i] = Form1.SG2.Cells[strtoint(edit2.Text),i1] then
         begin
            ravno:=true; // если совпадения есть то ничего не будет
         end;
       end;
    if ravno=false then //если нет совпадений, заносим в выбранную колонку в SG3
      SG3.Cells[strtoint(edit3.Text),i]:=Form1.SG1.Cells[strtoint(edit1.Text),i];
   SG3.Cells[strtoint(edit3.Text)+1,i]:=Form1.SG1.Cells[strtoint(edit4.Text),i];// здесь заносим в соседний столбец в SG3 тот столбец, который отметил пользователь в Edit4.
   end;
Надеюсь я правильно понял?
Никогда не знаешь, где тебе повезет... (Фрай)
DIgorevich вне форума Ответить с цитированием
Старый 27.07.2010, 10:23   #30
artemavd
Старожил
 
Аватар для artemavd
 
Регистрация: 05.06.2008
Сообщений: 4,206
По умолчанию

Че-то вообще ничего в SG3 не выводится . Ошибок нет, но и таблица пустая.
Не стоит смеяться над человеком делающим шаг назад, возможно он делает разбег.
artemavd вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
StringGrid Определение значений по 3-ем критериям Juliya_U Помощь студентам 3 04.05.2010 14:19
сверка значений на другом листе подстановка подходящего marc-nikita Microsoft Office Excel 5 07.02.2010 14:10
умножение значений Stringgrid zluchka Помощь студентам 3 03.11.2009 11:33
StringGrid сумма значений monushka Общие вопросы Delphi 21 26.10.2009 17:12
Сверка данных с помощью VBA mal001 Microsoft Office Excel 2 06.08.2008 14:39