Модераторы: Poseidon, Snowy, bems, MetalFan
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> выбор данных из StringGrid'а 
:(
    Опции темы
cool23
Дата 6.3.2006, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 1
Регистрация: 6.3.2006

Репутация: нет
Всего: нет



Может кто подскажет как сделать такую штуку:

в stringGrid считывается многостолбцовый файл, надо чтобы по введенным (или выбранным, напр. из combox) пользовалелем условиям посчитались подходящие им строчки... напр.
пользователь ввел
а) col2<8 and col10>5 and col15<=10
b) col1>2 and col 6>=4 and col8>9
с)....

клик на кнопку и выводится a=... строк b=... строк с=...строк

проблема: не знаю как заставить программу понимать введенные условия((...

help...
PM MAIL   Вверх
Romikgy
Дата 6.3.2006, 11:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Любитель-программер
****


Профиль
Группа: Участник Клуба
Сообщений: 7326
Регистрация: 11.5.2005
Где: Porto Franco Odes sa

Репутация: 26
Всего: 146



Дык заполняй грид по условиям


--------------------
Владение русской орфографией это как владение кунг-фу — истинные мастера не применяют его без надобности. 
smile

PM   Вверх
Albinos_x
Дата 6.3.2006, 12:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



Код

type 
     TMasCol : record
        mcIndex : array[0..15] of Word;  // число
        mcIfBool : array[0..15] of Byte;   // условие

// функция поиска ближайшего условия (логического выражения)
function FindIF(IFF:String):byte;
var f1,f2,f3:integer;
begin
Result:=0;
F1:=pos('<',iff);
F2:=pos('>',iff);
F3:=pos('=',iff);
if (f1>=0) and (f1<f2) then
    Result:=f2
   else
   Result:=F1;
if (Result<F3) then
   Result:=F3;
end;

// процедура инициализации TMasCol
Procedure IniMasCol(V:String;Col:TMasCol);
var i,n:byte;
      s,ss:string;
begin
i:=0;
while length(v)=0 do
   begin
   n:=FindIF(V);
   delete(v,1,n-1);
   ss:=copy(v,1,1);
   case ss[1] of
       '=' : Col[i].msIfBool:=1;
       '>' : Col[i].msIfBool:=2;
       '<' : Col[i].msIfBool:=3;
       else
       Col[i].msIfBool:=0;    
      end;
   delete(v,1,1);
   if pos('a',v) then
      begin
      ss:=copy(v,1,pos('a',v)-1);
      delete(v,1,pos('a',v)+3);
      end
      else
      begin
      ss:=v;
      v:='';
      end;
   try
     Col[i].msIndex:=abs(IntToStr(ss)); 
      except
        end;
   inc(i); 
   end;
end;

// функция получения входит ли строка в условие
function FindMasCol(Index:Integer;Col:TMasCol):boolean;
var i:integer;
begin
for i:=0 to 15 do
   begin
   case Col[i].msIfBool of
      1 : begin
           if Col[i].msIndex=Index then
             Result:=True
             else
             result:=false;
           end;
      2 : begin
            if Col[i].msIndex>Index then
             Result:=True
             else
             result:=false;
            end;
      3  : begin
             if Col[i].msIndex<Index then
             Result:=True
             else
             result:=false;
            end;
      else Break;
      end;
   end;
end;

// загрузка в StringGrid
// в Col передаем строку: col2<8 and col10>5 and col15<=10
procedure LoadGrid(var Grid:TStringGrid; FileName:String;Col:String);
var L:TStringList;
      MCol:TMasCol;
      s:string;
begin
IniMasCol(Col,Mcol);
L:=TStringList.Create;
L.Clear;
L.LoadFromFile(FileName);
for i:=0 to (L.Count-1) do
   begin
   if FindMasCol(i,Mcol) then
      begin
      s:=L[i];
      // не знаю формат твого файла, но здесь ты должен загрузить строку в StringGrid    
      Grid.Rows[i].SetText(pchar(s));
      end;
   end;
L.Free;
end;


не самое оптимальное (не проверял и написано на скорую руку), но по идее работать должно (при условии что нет двойный условий типа >=,<= , что нет логических выражений or, xor и т.п. будет работать только с AND, и что количество условий на столбцы не превышает 16, хотя уйти от этих недостатков недолго)


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
Albinos_x
Дата 6.3.2006, 13:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Evil Skynet
****


Профиль
Группа: Комодератор
Сообщений: 3288
Регистрация: 28.5.2004
Где: X-6120400 Y-1 4624650

Репутация: 26
Всего: 108



упс... немного непонял вопрос... но я думаю принцип понятен....


--------------------
"Кто владеет информацией, тот владеет миром"    
Уинстон Черчилль
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: Общие вопросы"
SnowyMetalFan
bemsPoseidon
Rrader

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Дельфи обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0546 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.