Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 27.10.2011, 12:03
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию Как прочитать символы месяца mm в дате?

В ячейку таблицы Word записана дата в формате dd.mm.yyyyy, например, 27.10.2011:
Код:
date2:=table1.Cell(j, 3).Range.Text;

Как прочитать символы месяца mm в дате?
Мне это нужно для записи команды по алгоритму -
если mm = 10, то вывести сообщение "... в октябре...".

Задача в общем виде - как прочитать n-ый символ в записи, допустим, Label?!

Спасибо!

Последний раз редактировалось cadil, 27.10.2011 в 12:36.
Ответить с цитированием
  #2  
Старый 27.10.2011, 12:10
t116 t116 вне форума
Новичок
 
Регистрация: 29.06.2011
Адрес: Луганск
Сообщения: 92
Версия Delphi: Delphi7
Репутация: выкл
По умолчанию

http://www.delphisources.ru/pages/fa...Utils.php.html

FormatDateTime()
Эта функция возвращает дату и время в виде строки в указанном формате. У функции есть два параметра, первым указывается формат строки, в котором нужно вернуть дату. Второй параметр – переменная типа TDateTime, которую нужно преобразовать в строку. В качестве второго параметра также можно использовать функцию Date(), если требуется преобразовать текущие дату и время. Формат строки, он может содержать следующие символы:

d – показать день, не подставляя нули в начале: 1, 2, 12
dd – показать день с подстановкой нулей в начале: 01, 02, 12
ddd – показать день недели в коротком формате: Пн, Вт, Ср
dddd – показать полный день недели: Понедельник, Вторник, Среда
m – показать месяц без нулей: 1, 2, 10
mm – показать месяц с нулями: 01, 02, 10
mmm – показать короткое название месяца: Янв, Фев
mmmm – показать полное название месяца: Январь, Февраль
yy – показать короткий год: 07, 98, 00
yyyy – показать полный год: 2007, 1998, 2000
h – показать часы, не добавляя нулей: 3, 5, 12
hh – показать часы с нулями: 03, 05, 12
n – минуты без нулей: 3, 5, 12
nn – минуты с нулями: 03, 05, 12
s – секунды без нуля впереди: 3, 7, 30
ss – секунды с нулями: 03, 07, 30
Это практически полный набор форматов, которые вам могут пригодиться. Пример использования:

ShowMessage (FormatDateTime('Сегодня dddd dd mmm yyyy г.', Date)); //Результат: Сегодня Чет 27 окт 2011 г.

Последний раз редактировалось t116, 27.10.2011 в 12:41.
Ответить с цитированием
  #3  
Старый 27.10.2011, 12:16
_taddy _taddy вне форума
Прохожий
 
Регистрация: 27.10.2011
Адрес: Минск
Сообщения: 15
Версия Delphi: 2007
Репутация: 2767
По умолчанию

Можно так:
DecodeDate(DateNow, CurrYear, CurrMonth, CurrDay);
Ответить с цитированием
  #4  
Старый 27.10.2011, 12:20
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию

Цитата:
Сообщение от t116
Этот вариант не подходит -переменная date2 -string, а не TDateTime.
Ответить с цитированием
  #5  
Старый 27.10.2011, 12:25
_taddy _taddy вне форума
Прохожий
 
Регистрация: 27.10.2011
Адрес: Минск
Сообщения: 15
Версия Delphi: 2007
Репутация: 2767
По умолчанию

Можно сделать StrToDate(DateNow), например.
Ответить с цитированием
  #6  
Старый 27.10.2011, 12:30
t116 t116 вне форума
Новичок
 
Регистрация: 29.06.2011
Адрес: Луганск
Сообщения: 92
Версия Delphi: Delphi7
Репутация: выкл
По умолчанию

Цитата:
Сообщение от cadil
Этот вариант не подходит -переменная date2 -string, а не TDateTime.
Какой вариант? Это функции для работы с датой.
Придумай свои. Я пока не могу
Ответить с цитированием
  #7  
Старый 27.10.2011, 12:34
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию

Цитата:
Сообщение от _taddy
Можно сделать StrToDate(DateNow), например.
Я своим неудачым примером с датой внес путаницу. Повторю вопрос - как прочитать n-ый символ в записи, допустим, Label?
Ответить с цитированием
  #8  
Старый 27.10.2011, 12:38
t116 t116 вне форума
Новичок
 
Регистрация: 29.06.2011
Адрес: Луганск
Сообщения: 92
Версия Delphi: Delphi7
Репутация: выкл
По умолчанию

Цитата:
Как прочитать символы месяца mm в дате?
Мне это нужно для записи команды по алгоритму -
если mm = 10, то вывести сообщение "... в октябре...".
???????
Вы, пока я отвечал переформулировали вопрос
Ответить с цитированием
  #9  
Старый 27.10.2011, 12:48
_taddy _taddy вне форума
Прохожий
 
Регистрация: 27.10.2011
Адрес: Минск
Сообщения: 15
Версия Delphi: 2007
Репутация: 2767
По умолчанию

s : string

s := Label1.Caption;
ShowMessage(s[4]);

покажет 4-й символ.
Ответить с цитированием
  #10  
Старый 27.10.2011, 12:53
_taddy _taddy вне форума
Прохожий
 
Регистрация: 27.10.2011
Адрес: Минск
Сообщения: 15
Версия Delphi: 2007
Репутация: 2767
По умолчанию

Если несколько символов - можно использовать функцию Copy
http://www.delphibasics.ru/Copy.php
Ответить с цитированием
  #11  
Старый 27.10.2011, 14:57
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию

Цитата:
Сообщение от _taddy
s : string

s := Label1.Caption;
ShowMessage(s[4]);

покажет 4-й символ.
Спасибо!
Решил задачку несколько по-другому:
Код:
procedure TForm1.Button10Click(Sender: TObject);
var
date2: string;
pos1, pos2:integer; //символы в записи
begin
date2:=table1.Cell(j, 3).Range.Text;
Label10.Caption:=date2;
pos1:= pos('1',date2);
pos2:= pos('0',date2);
      if ((pos1 = 4) and  (pos2 = 5))
       then
        begin
    Label11.Caption:='выполнено в октябре';
        end
      else
        begin
   Label11.Caption:='Error!';
        end;
end;
Ответить с цитированием
  #12  
Старый 27.10.2011, 15:02
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Цитата:
Сообщение от cadil
Спасибо!
Решил задачку несколько по-другому:
Код:
procedure TForm1.Button10Click(Sender: TObject);
var
date2: string;
pos1, pos2:integer; //символы в записи
begin
date2:=table1.Cell(j, 3).Range.Text;
Label10.Caption:=date2;
pos1:= pos('1',date2);
pos2:= pos('0',date2);
      if ((pos1 = 4) and  (pos2 = 5))
       then
        begin
    Label11.Caption:='выполнено в октябре';
        end
      else
        begin
   Label11.Caption:='Error!';
        end;
end;

Ты уж прости, но тебе не кажется, что твое решение немного идиотски не универсальное? А что если не октябрь будет, а ноябрь?

Код:
procedure TForm1.Button10Click(Sender: TObject);
var
  date2: string;
  y,m,d: word;
begin
date2:= table1.Cell(j, 3).Range.Text;
Label10.Caption:=date2;
DecodeDate(strtodate(date2),y,m,d);
case m of
1: Label11.Caption:= 'выполнено в январе';
2: Label11.Caption:= 'выполнено в феврале';
3: Label11.Caption:= 'выполнено в марте';
4: Label11.Caption:= 'выполнено в апреле';
5: Label11.Caption:= 'выполнено в мае';
6: Label11.Caption:= 'выполнено в июне';
7: Label11.Caption:= 'выполнено в июле';
8: Label11.Caption:= 'выполнено в августе';
9: Label11.Caption:= 'выполнено в сентябре';
10: Label11.Caption:= 'выполнено в октябре';
11: Label11.Caption:= 'выполнено в ноябре';
12: Label11.Caption:= 'выполнено в декабре';
end;
end;
__________________
Google в помощь

Последний раз редактировалось Ildar-tsr, 27.10.2011 в 15:21.
Ответить с цитированием
  #13  
Старый 27.10.2011, 16:05
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию

Цитата:
Сообщение от Ildar-tsr
Ты уж прости, но тебе не кажется, что твое решение немного идиотски не универсальное? А что если не октябрь будет, а ноябрь?

Код:
procedure TForm1.Button10Click(Sender: TObject);
var
  date2: string;
  y,m,d: word;
begin
date2:= table1.Cell(j, 3).Range.Text;
Label10.Caption:=date2;
DecodeDate(strtodate(date2),y,m,d);
case m of
1: Label11.Caption:= 'выполнено в январе';
2: Label11.Caption:= 'выполнено в феврале';
3: Label11.Caption:= 'выполнено в марте';
4: Label11.Caption:= 'выполнено в апреле';
5: Label11.Caption:= 'выполнено в мае';
6: Label11.Caption:= 'выполнено в июне';
7: Label11.Caption:= 'выполнено в июле';
8: Label11.Caption:= 'выполнено в августе';
9: Label11.Caption:= 'выполнено в сентябре';
10: Label11.Caption:= 'выполнено в октябре';
11: Label11.Caption:= 'выполнено в ноябре';
12: Label11.Caption:= 'выполнено в декабре';
end;
end;
Конечно, ты прав! Я хотел продемонстрировать только общий подход. Не воспользоваться твоим решением было бы глупо.
Еще раз - благодарю!
Ответить с цитированием
  #14  
Старый 28.10.2011, 12:45
cadil cadil вне форума
Начинающий
 
Регистрация: 24.10.2007
Сообщения: 169
Репутация: 10
По умолчанию

Цитата:
Сообщение от Ildar-tsr
Ты уж прости, но тебе не кажется, что твое решение немного идиотски не универсальное? А что если не октябрь будет, а ноябрь?
Снова обращаюсь к тебе за помощью - не могу реализовать твое решение. Причина, на мой взляд, заключается в непечатном символе, который появляется после даты. Как его убрать? Посмотри скрин во вложении.
Изображения
Тип файла: jpg 2810.jpg (93.7 Кбайт, 8 просмотров)
Ответить с цитированием
  #15  
Старый 28.10.2011, 15:06
Аватар для Ildar-tsr
Ildar-tsr Ildar-tsr вне форума
Местный
 
Регистрация: 09.08.2011
Адрес: г.Сургут, ХМАО
Сообщения: 453
Репутация: 7402
По умолчанию

Цитата:
Сообщение от cadil
Снова обращаюсь к тебе за помощью - не могу реализовать твое решение. Причина, на мой взляд, заключается в непечатном символе, который появляется после даты. Как его убрать? Посмотри скрин во вложении.

К сожалению не уверен на все сто поможет ли, но попробуй эту строку дополнить:

Код:
//если после даты стоит пробел, то поможет
//если сразу символ, то надо подумать как от него избавиться
date2:= copy(table1.Cell(j, 3).Range.Text,1,pos(' ',table1.Cell(j, 3).Range.Text)-1);
__________________
Google в помощь
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 05:32.


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2025