|
Вопрос # 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) Почти тоже самое, только нужно добавить несколько условий
Приложение: Переключить в обычный режим-
- var i:integer;
- ch,min,sec:word;
- s:string;
- begin
- // s:='01:02:11';
- i:=pos(':',s);
- ch:=strtoint(copy(s,1,i-1));
- delete(s,1,i);
- i:=pos(':',s);
- min:=strtoint(copy(s,1,i-1));
- delete(s,1,i);
- sec:=strtoint(s);
- end;
-
-
- var i:integer;
- a,b,c:word;
- s:string;
- begin
- // s:='100:430:23';
- i:=pos(':',s);
- a:=strtoint(copy(s,1,i-1));
- delete(s,1,i);
- i:=pos(':',s);
- if (i=0)and(s<>'') then
- i:=length(s)+1;
- if i<>0 then
- begin
- b:=a;
- a:=strtoint(copy(s,1,i-1));
- delete(s,1,i);
- end;
- if s<>'' then
- begin
- c:=b;
- b:=a;
- a:=strtoint(s);
- end;
- end;
-
 |
Ответ отправил: 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 (статус: 4-ый класс), 10 ноября 2008, 15:27 [#3]:
А по поводу одного числа, то тут я забыл ещё одно условие 
после
// s:='100:430:23';
i:=pos(':',s);
нужно добавить
if (i=0)and(s<>'') then
i:=length(s)+1;
|
31 января 2011, 19:32: Статус вопроса изменён на решённый (изменил модератор Ерёмин А.А.): Автоматическая обработка (2 и более ответов с оценкой 5)
Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте.
|