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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.10.2016, 17:13   #11
Zhenya_master
Пользователь
 
Регистрация: 21.05.2016
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
а если в строчках таблицы мусор, то, разумеется, код работать не будет, нужно решать, что с такими строчками делать.

Кстати, а для чего Вы это делаете? Это, надеюсь, чисто учебный проект и в реальной жизни использоваться не будет?
Да, это учебное задание.
Zhenya_master вне форума Ответить с цитированием
Старый 10.10.2016, 17:24   #12
Zhenya_master
Пользователь
 
Регистрация: 21.05.2016
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
теперь чуток понятней...

а кто заполняет таблицу?
надеюсь, Вы таблицу читаете откуда-нибудь?
если да, то выложите архив с исходниками проекта и исходными данными.
и приложите скриншот, где видно, как заполнена таблица SG1

L и Z - там указывается ВРЕМЯ?
А почему взяли тип вещественных чисел?
разве DataTimePicker не более подходящий вариант?
Если Вам в Edit2/Edit3 введут, например, 11,815 - то это какое время? больше 11:59, но меньше 12:00 ?!
Если у Вас есть время и желание, то можете объяснить, как это всё сделать со временем? Как Вы уже видели, в самой программе я уже время добавил, но реализовать не могу.
Zhenya_master вне форума Ответить с цитированием
Старый 10.10.2016, 17:29   #13
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

первое.
чтобы избежать ошибок, связанных с неверными данными (или пустыми строками), можно использовать такой код:

Код:
procedure TForm1.Button2Click(Sender: TObject);
var
 S: String;
 L, Z, tmp : extended;
 i,  j : Integer;
begin
  S := Edit1.Text;
  L := StrTofloatDef(Edit2.Text,-1);
  Z := StrTofloatDef(Edit3.Text, -1);
  j := SG2.FixedRows;
  SG2.RowCount := SG2.FixedRows + 1;
  SG2.Rows[j].Clear;
  for i := 0 to SG1.RowCount - 1 do begin
    if (SG1.Cells[1, i] <> S) or Not TryStrToFloat(SG1.Cells[2, i], tmp) then  Continue;
    if (tmp >= L) and (tmp <= Z) then begin
       if j = SG2.RowCount then SG2.RowCount := j + 1;
       SG2.Rows[j].Assign(SG1.Rows[i]);
       Inc(j);
    end;
  end;
end;
второе.
по поводу неверного результата.
программа переносит ровно те строки, которые Вы ей указали в своём коде, как подходящие.

Какие строки скопированы неверно, по вашему мнению?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.10.2016, 17:34   #14
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
как это всё сделать со временем?
так Вы сначала определитесь с правилами, какие строки подходят!

потому что у Вас ДВА времени - "промежуток ОТ" и "промежуток ДО"
и два столбца "Время отправки" и "Время прибытия"

у Вас в коде проверяется только столбец "Время отправки".
Он должен попадать в заданный промежуток времени - между "промежуток ОТ" и "промежуток ДО". Так?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.10.2016, 17:35   #15
Zhenya_master
Пользователь
 
Регистрация: 21.05.2016
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
первое.
чтобы избежать ошибок, связанных с неверными данными (или пустыми строками), можно использовать такой код:

Код:
procedure TForm1.Button2Click(Sender: TObject);
var
 S: String;
 L, Z, tmp : extended;
 i,  j : Integer;
begin
  S := Edit1.Text;
  L := StrTofloatDef(Edit2.Text,-1);
  Z := StrTofloatDef(Edit3.Text, -1);
  j := SG2.FixedRows;
  SG2.RowCount := SG2.FixedRows + 1;
  SG2.Rows[j].Clear;
  for i := 0 to SG1.RowCount - 1 do begin
    if (SG1.Cells[1, i] <> S) or Not TryStrToFloat(SG1.Cells[2, i], tmp) then  Continue;
    if (tmp >= L) and (tmp <= Z) then begin
       if j = SG2.RowCount then SG2.RowCount := j + 1;
       SG2.Rows[j].Assign(SG1.Rows[i]);
       Inc(j);
    end;
  end;
end;
второе.
по поводу неверного результата.
программа переносит ровно те строки, которые Вы ей указали в своём коде, как подходящие.

Какие строки скопированы неверно, по вашему мнению?
Все, кроме второй.
Должны выполняться обязательно всё, что находится в трёх edit. Значение в 2 столбце SG1 должно быть большим, чем edit2, но и меньше, чем edit 3. Таким параметрам соответствует только строка в моём примере.
Или я не так что-то понимаю?
Zhenya_master вне форума Ответить с цитированием
Старый 10.10.2016, 17:47   #16
Zhenya_master
Пользователь
 
Регистрация: 21.05.2016
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
так Вы сначала определитесь с правилами, какие строки подходят!

у Вас в коде проверяется только столбец "Время отправки".
Он должен попадать в заданный промежуток времени - между "промежуток ОТ" и "промежуток ДО". Так?
Именно так. Столбец "Время прибытия" на результат вообще не влияет.
Zhenya_master вне форума Ответить с цитированием
Старый 10.10.2016, 17:48   #17
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

вот примерно так (минимально изменил ваш пример - только для иллюстрации, как использовать время)

Project2_time.rar

Время отправления вносить в формате HH:MM или HH:MM:SS
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.10.2016, 17:54   #18
Zhenya_master
Пользователь
 
Регистрация: 21.05.2016
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
вот примерно так (минимально изменил ваш пример - только для иллюстрации, как использовать время)

Вложение 83804

Время отправления вносить в формате HH:MM или HH:MM:SS
Спасибо большое. Сейчас проверю, как всё работает.

Всё работает именно так, как и нужно. Огромное Вам спасибо, за потраченное на меня время.

Последний раз редактировалось Zhenya_master; 10.10.2016 в 18:01.
Zhenya_master вне форума Ответить с цитированием
Старый 10.10.2016, 19:10   #19
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Да не за что. Пользуйтесь на здоровье!

p.s. писал пример быстро, поэтому не успел закомментировать код.
Если есть какие-то вопросы по коду - спрашивайте, отвечу.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 10.10.2016, 20:58   #20
Zhenya_master
Пользователь
 
Регистрация: 21.05.2016
Сообщений: 51
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
Да не за что. Пользуйтесь на здоровье!

p.s. писал пример быстро, поэтому не успел закомментировать код.
Если есть какие-то вопросы по коду - спрашивайте, отвечу.
Код:
 if (SG1.Cells[1, i] <> City) or Not TryStrToTime(SG1.Cells[2, i], tmp) then  Continue;
С какой целью здесь стоит слово "Not", раньше такого не встречал.
И второй вопрос, если я захочу найти время в пути, то мне нужно будет просто вычесть с 3 столбца, 2 столбец? Или же со временем тут снова всё работает иначе?
Zhenya_master вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Incompatible types: 'PWideChar' and 'string' mitiay Общие вопросы Delphi 3 05.03.2015 12:00
Ошибка Incompatible types: 'TIntegerField' and 'Real' Melisare Общие вопросы Delphi 5 06.02.2015 12:33
Incompatible types: 'String' and 'Char' FleXik Общие вопросы Delphi 3 22.11.2013 17:41
Incompatible types: 'PWideChar' and 'string' Aleksandr69 Общие вопросы Delphi 8 25.12.2011 12:14
Incompatible types: 'String' and 'Text' eshik Помощь студентам 3 21.04.2010 00:41