IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

 
 Ответить  Открыть новую тему 
> Сравнение дат
Atreides
сообщение 19.01.2010 22:27
Сообщение #1


Ветеран Броуновского Движения
***

Группа: Пользователи
Сообщений: 281
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Как сравнить дату из ячейки стрингрида формата дд.мм.гггг со значение взятым из комбокса месяцем и из едита года? Без учета числа.


--------------------
Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 19.01.2010 22:37
Сообщение #2


Гость






Что значит "сравнить"? Найти, что больше, а что меньше? Или просто проверить, попадает ли заданная в СтрингГриде дата под месяц + год, определенные в Комбо/Эдит. Если первое - то тебе понадобится задать какой-то день, собрать дату, а потом - простым сравнением типов TDate.

Если второе - то разбей дату из СтрингГрида на месяц + год (MonthOf/YearOf), и сравнивай с заданными...
 К началу страницы 
+ Ответить 
Atreides
сообщение 20.01.2010 5:38
Сообщение #3


Ветеран Броуновского Движения
***

Группа: Пользователи
Сообщений: 281
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


а вот как разбить дату из стрнггрида?


--------------------
Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.01.2010 9:44
Сообщение #4


Гость






Поскольку СтрингГрид хранит информацию в виде строки, то у тебя два пути:
1) с помощью Pos найти разделители даты (обычно это '/'), и взять из строки напрямую месяц и год. Это может подойти если дата в формате ShortString, т.е., вида 20/01/2010. Но работа на всех компьютерах не гарантируется, если установлен другой формат даты, скажем MM/DD/YYYY - пролетишь с этим способом.

2) сконвертировать строку в Дату (StrToDateTime) , указывая нужный формат, а потом из полученной даты функциями MonthOf/YearOf получить месяц и год. Этот способ подойдет для любого формата даты, хоть для ShortDate, хоть для LongDate...

Я бы выбрал второй вариант.
 К началу страницы 
+ Ответить 
Atreides
сообщение 20.01.2010 20:14
Сообщение #5


Ветеран Броуновского Движения
***

Группа: Пользователи
Сообщений: 281
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


Да, не подумал, сразу, зря тему только открыл. Собрал дату вот так:

procedure TForm2.ComboBox1Change(Sender: TObject);
var MonthSelected: Integer;

begin
MonthSelected := Form2.ComboBox1.ItemIndex + 1;
// Edit2.Text := FloatToStr(MonthSelected);
end;



procedure TForm2.Button2Click(Sender: TObject);
var
kod,provodka, ID_prov, oth :string; //
i,j, ID_OTCHM, coma:integer; //
vid, vnod, IDProv, god:string; //
namestat:string[30]; // имя станции
st:string; // запрос строкой
deb:string; // дебед - сумма
data1, data2:string;

MonthSelected: Integer; //месяц
MonthSelected1: string;
begin
data1:=Form2.StringGrid1.Cells[3,2];
Form2.Edit2.text:=Form2.StringGrid1.Cells[3,2];

MonthSelected := Form2.ComboBox1.ItemIndex + 1; //получаем значение месяца
MonthSelected1:=FloatToStr(MonthSelected);
data2:=MonthSelected1 + '.' +Edit1.text;
Form2.Edit3.text:=data2;
// if data1<>data2 then
// ShowMessage('указанная дата занрузки не соотвествует');

// if data1=data2 then

Только проблема. Как мне у даты из СтрингГрида формата дд.мм.гггг отбить дни, чтобы сравнить уже дату формата мм.гггг? И еще проблема – у меня месяца которые просто единицы идут с нулем, а комбобокс мне возвращает просто одно число, как нолик подставить там, где это нужно? Как выплнить оставку от дальнейшего выполнения, если даты не соответствуют?

И еще немножко не в тему, но дабы не плодить темы. Есть текстовый файл, В нем в столбик уложены значения 13 символов длиной. Я разбиваю их на первые 7 и укладываю в стрингГрид, оставшиеся 6 во второй столбик, там, где только первых 7 я пропускаю. Вот написал, только пишет мне все подряд и то местами не все. В чем косяк, найти не могу.
 procedure TForm5.Button1Click(Sender: TObject);
var
infile:textfile;
s,str,cod7,cod6:string;
x,num_lines:integer;
line: string;
i:integer;

begin
Form5.StringGrid1.Cells[0,0]:='Семизначный код станции';
Form5.StringGrid1.Cells[1,0]:='Шестизначный код станции';
assignfile(infile, 'D:\КОАСУФР\tbk');
reset(infile);
read(infile,str);
while not Eof(infile) do
begin
if length(str) > 7 then
for i:=1 to StringGrid1.RowCount-1 do
begin
//
cod7:= copy(str,1,7);
Readln(infile, str);
Form5.StringGrid1.Cells[0,i]:=cod7;
cod6:= copy(str,8,6);
Form5.StringGrid1.Cells[1,i]:=cod6;
Readln(infile, str);
end;
end;
end;
// Close(infile);


Сообщение отредактировано: volvo - 5.04.2010 15:35


Прикрепленные файлы
Прикрепленный файл  tbk.txt ( 13.98 килобайт ) Кол-во скачиваний: 190


--------------------
Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 20.01.2010 20:36
Сообщение #6


Гость






Весь твой код (по первому вопросу) - ни о чем. Не надо показывать, как ты сделал, и спрашивать, как исправить... Ты скажи, ЧТО надо сделать. Итого: у тебя есть полная дата в Гриде, есть месяц, выбранный в Комбо, есть год (как он введен? Ты гарантируешь, что пользователь введет все 4 цифры, или он может и не сделать этого?) в Эдите. Это все, что известно на данный момент. Что тебе с этими тремя данными надо сделать? Я не понимаю, что значит "сравнить даты без учета дней". Без учета дней - это НЕ ДАТЫ. Формулируй вопрос как положено...

Цитата
Есть текстовый файл, В нем в столбик уложены значения 13 символов длиной. Я разбиваю их на первые 7 и укладываю в стрингГрид, оставшиеся 6 во второй столбик, там, где только первых 7 я пропускаю. Вот написал, только пишет мне все подряд и то местами не все.
Поразительная формулировка вопроса. Просто уникальная. А теперь перечитай ее сам, и попробуй понять, что там написано... Что за бред?
Цитата
В нем в столбик уложены значения 13 символов длиной
Запомним... значения длиной 13 (тринадцать!!!) символов.
Цитата
там, где только первых 7 я пропускаю
Чего пропускаешь? Какие только первых 7? Только что я тебе процитировал твое же утверждение, что символов в строке всегда 13, как их может быть "только первые 7"?
 К началу страницы 
+ Ответить 
Atreides
сообщение 20.01.2010 21:48
Сообщение #7


Ветеран Броуновского Движения
***

Группа: Пользователи
Сообщений: 281
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


В файле местами есть строки только с 7 символами, их нужно пропустить. Строки в которых по 13 символов, разбить на первых 7 и оставшиеся 6 и уложить в СтрингГрид. Я вот пробовал писать, но запутался несколько. Получается выводить все строки подряд, а так не надо...

С датами - Сравниваю я по отчетному месяцу и году, потому число мне не важно. А на счет правильности ввода, я думал о маске или проверке на пустое поле, но пока не знаю как это сделать. Если месяц и год совпадают из загруженного с заявленными, то выполняет запросы, а если нет, то остановка и вывод сообщения.


--------------------
Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
Гость
сообщение 24.01.2010 11:17
Сообщение #8


Гость






Есть возможность КомбоБокс возвращать значения типа 01,02,03...09? Или как можно определить, что если одна цифра, то подставить 0?
 К началу страницы 
+ Ответить 
volvo
сообщение 24.01.2010 11:59
Сообщение #9


Гость






Комбобокс ничего не возвращает. Ты берешь из него индекс выбранного значения? Индекс - это число. Числа 01 не существует. Существует только 1.

Если тебе надо, чтобы при выборе месяца в Комбобоксе, в Эдит записывалось значение с лидирующим 0 - то это делается так:
procedure TForm1.ComboBox1Change(Sender: TObject);
begin
Edit1.Text := Format('%.2d', [ComboBox1.ItemIndex + 1]);
end;
 К началу страницы 
+ Ответить 
Atreides
сообщение 24.01.2010 18:02
Сообщение #10


Ветеран Броуновского Движения
***

Группа: Пользователи
Сообщений: 281
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


а если КомбоБокс вернет 10 или 12, и встанет 0, выйдет 012, тут как быть?


--------------------
Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
volvo
сообщение 24.01.2010 18:04
Сообщение #11


Гость






Цитата
а если КомбоБокс вернет 10 или 12, и встанет 0, выйдет 012, тут как быть?
А если ты программу запустишь, и выяснится, что 0 ставится ТОЛЬКО когда надо дополнить до ДВУХ цифр, тогда как быть? Ты там двойку не заметил, или просто издеваешься?
 К началу страницы 
+ Ответить 
Atreides
сообщение 24.01.2010 19:14
Сообщение #12


Ветеран Броуновского Движения
***

Группа: Пользователи
Сообщений: 281
Пол: Мужской
Реальное имя: Сергей

Репутация: -  0  +


ой, не заметил, я с телефона был... я и не знал, что вот так можно...


--------------------
Отрадно спать, отрадней камнем быть, О, этот век, преступный и постыдный, Не жить, не чувствовать - удел завидный. Прошу, молчи, не смей меня будить!
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 21.06.2025 11:12
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"