Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 19.04.2019, 11:30   #21
Astrola
 
Регистрация: 04.09.2018
Сообщений: 9
Репутация: 10
По умолчанию

Вроде получилось, возможно кому-то пригодится.

Заполнять таблицы строго по столбцам (не по строчно), для каждого типа данных отдельный столбец, как в наборе данных так и в наборе правил. Набор правил начинается с 0.
Набор правил не должен выходить за диапазон набора данных (к примеру если в правилах максимальное к-ство заполненных строк по конкретному столбцу=5, то в наборе данных максимальное к-ство заполненных столбцов должно быть не меньше 5).

Спасибо всем кто помогал, тему можно закрыть.


Код:

procedure TForm1.Button18Click(Sender: TObject);
var
  i,j,k,akol,arow,w: Integer;
  kolcnt,rowcnt,Row, Col, Count:integer;
procedure Rec(Text: String; i1,j1,Maxj: Integer);
var
  ti: Integer;
  s: String;
begin
  for ti:=Low(p) to High(p) do begin
    if p[ti,r[i1,j1]]=''
    then Exit;
    s:=Text+p[ti,r[i1,j1]]+' ';
    if j1=Maxj
    then
    begin
      // вывод результата в таблицу 1 в указанный столбец начиная с указанной позиции
      if StringGrid1.RowCount=w+2
      then StringGrid1.RowCount:=StringGrid1.RowCount+1;
      StringGrid1.Cells[2,w+2]:=s;
      inc(w);
    end
    else Rec(s,i1,j1+1,Maxj);
  end;
end;
begin
  w:=0;
  // очистка первой таблицы
  with StringGrid1 do
  for i:=0 to ColCount-1 do Cols[i].Clear;
  // заполняем (p) массив из таблицы 2 (набор данных)
  SetLength(p,0,0);
  SetLength(p,StringGrid2.RowCount,StringGrid2.ColCount);
  for akol:=0 to StringGrid2.ColCount-1 do
    for arow:=0 to StringGrid2.RowCount-1 do
    if StringGrid2.Cells[akol,arow]<>''
    then p[arow,akol]:=StringGrid2.Cells[akol,arow];
  // заполняем (r) массив из таблицы 3 (набор правил)
  SetLength(r,0,0);
  SetLength(r,StringGrid3.ColCount,StringGrid3.RowCount);
  for arow:=0 to StringGrid3.RowCount-1 do
    for akol:=0 to StringGrid3.ColCount-1 do
      if StringGrid3.Cells[akol,arow]<>''
      then r[akol,arow]:=strtoint(StringGrid3.Cells[akol,arow])
      else r[akol,arow]:=-1;
  
  for i:=Low(r) to High(r) do
  begin
    k:=-1;
    for j:=Low(r[i]) to High(r[i]) do
      if r[i,j]=-1
      then Break
      else k:=j;
    if k<>-1
    then Rec('',i,Low(r[i]),k);
  end;
  ShowMessage('Обработка завершена.');
end;


Последний раз редактировалось Astrola; 19.04.2019 в 11:34.
Astrola вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Перебор вариаций в двомерном масиве KotKod Microsoft Office Excel 3 20.02.2016 10:33
Генератор слов на кириллице Fedaykin Фриланс 2 09.11.2013 18:30
генератор слов Delphi7 -Jack- Общие вопросы Delphi 10 29.06.2012 19:55
Генератор слов!создание вопросы . kzmd Общие вопросы Delphi 15 16.10.2010 20:04
Генератор слов - что к чему? Ramal Общие вопросы Delphi 8 16.07.2009 01:11


00:27.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru