Экспертная система Delphi.int.ru

Сообщество программистов
Общение, помощь, обмен опытом

Логин:
Пароль:
Регистрация | Забыли пароль?

Delphi.int.ru Expert

Другие разделы портала

Переход к вопросу:

#   

Статистика за сегодня:  


Лучшие эксперты

Подробнее »



Вопрос # 2 069

/ вопрос решён /

Здравствуйте, уважаемые эксперты!
У меня возникли такие вопросы:

1. В строку вводятся числа разделённые двоеточием ( например 01:02:11), причем чисел всего три. как сделать так что бы эти числа стали значениями некоторых трех переменных( например ch=1; min=2; sec=11);

2.В строку введены числа разделенные двоетосием, причем чисел может быть максимум три, минимум 1; числа в интервале от 0 до 10^9, без ведуших нулей(например 100:430:23). Как сделать так чтобы, если введено только одно число то оно становилосьбы значением переменной a; если два- то перевое становится значением b, второе значением а; если три- то перевое становится значением c, второе значением b, третье значением а;

Ученый Вопрос решён, но можно продолжить его обсуждение в мини-форуме

Вопрос задал: Ученый (статус: 8-ой класс)
Вопрос отправлен: 9 ноября 2008, 10:12
Состояние вопроса: решён, ответов: 2.

Ответ #1. Отвечает эксперт: Amidamaru

Здравствуйте, Ученый!
1) Помоему довольно просто. (Приложение ч1)
2) Почти тоже самое, только нужно добавить несколько условий

Приложение:
  1.  
  2. var i:integer;
  3. ch,min,sec:word;
  4. s:string;
  5. begin
  6. // s:='01:02:11';
  7. i:=pos(':',s);
  8. ch:=strtoint(copy(s,1,i-1));
  9. delete(s,1,i);
  10. i:=pos(':',s);
  11. min:=strtoint(copy(s,1,i-1));
  12. delete(s,1,i);
  13. sec:=strtoint(s);
  14. end;
  15.  
  16.  
  17. var i:integer;
  18. a,b,c:word;
  19. s:string;
  20. begin
  21. // s:='100:430:23';
  22. i:=pos(':',s);
  23. a:=strtoint(copy(s,1,i-1));
  24. delete(s,1,i);
  25. i:=pos(':',s);
  26. if (i=0)and(s<>'') then
  27. i:=length(s)+1;
  28. if i<>0 then
  29. begin
  30. b:=a;
  31. a:=strtoint(copy(s,1,i-1));
  32. delete(s,1,i);
  33. end;
  34. if s<>'' then
  35. begin
  36. c:=b;
  37. b:=a;
  38. a:=strtoint(s);
  39. end;
  40. end;
  41.  


Ответ отправил: Amidamaru (статус: 4-ый класс)
Время отправки: 9 ноября 2008, 10:35
Оценка за ответ: 5

Ответ #2. Отвечает эксперт: Feniks

Здравствуйте, Ученый!
По-первому пункту. Если вы таким образом вводите/указываете только время (например 01:02:11) и ничего более, и надо разложить на состовляющие отдельно, то все решается гораздо проще. Сначала с помощью функции

function StrToDateTime(const S: string; const FormatSettings: TFormatSettings): TDateTime; overload;
конвертируете введенный текст в формат TDateTime с применением формата FormatSettings. А потом результат подставляете в функцию
procedure DecodeTime(const DateTime: TDateTime; var Hour: Word; var Min: Word; var Sec: Word; var MSec: Word);
И в ваших переменных Hour, Min, Sec, MSec будут ваши введеные соответствующие значения. Все эти функции есть в Хелпе.
По-второму пункту. Можно сделать через TStrings и его свойства DelimitedText, Delimiter, Text, CommaText, QuoteChar. Все это указано в Хелпе по Делфи. Поэтому, реализацию оставляю за вами. ;-)
Таким же способом можно и первый вопрос решить.

P.S. Желаю удачи.

Ответ отправил: Feniks (статус: Бакалавр)
Время отправки: 14 ноября 2008, 12:46
Оценка за ответ: 5

Комментарий к оценке: Спасибо

Мини-форум вопроса

Всего сообщений: 3; последнее сообщение — 10 ноября 2008, 15:27; участников в обсуждении: 2.
Ученый

Ученый (статус: 8-ой класс), 9 ноября 2008, 11:10 [#1]:

С первой частью все впорядке-все работает! А вот со второй проблемы: если вводим три числа все работает, если два тоже работает, а если одно тогда происходит ошибка( работает если после числа поставить двоеточие!) Да и еще программа работает если числа состоят неболее чем из пяти цифр, а надо что бы как минимум из 9.
Ученый

Ученый (статус: 8-ой класс), 9 ноября 2008, 11:16 [#2]:

Ой прошу прощения! с интервалом разобрался! просто поставил Longword вместо word!
Amidamaru

Amidamaru (статус: 4-ый класс), 10 ноября 2008, 15:27 [#3]:

А по поводу одного числа, то тут я забыл ещё одно условие :)
после
// s:='100:430:23';
i:=pos(':',s);
нужно добавить
if (i=0)and(s<>'') then
i:=length(s)+1;
Приглашаю Вас на наш IRC-канал: #delphiintru в сети DalNet.

31 января 2011, 19:32: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)

Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.

Версия движка: 2.6+ (26.01.2011)
Текущее время: 22 февраля 2025, 11:44
Выполнено за 0.02 сек.