Леле! Ти и тука успя да убиеш змея с клечка за зъби! Просто нямаше как да не ни демонстрираш познанията си, нали? Аз щото пък не мога да се сдържа да не отбележа, че ако видя такъв код в някой мой проект - написалият го ще бъде отсвирен дисциплинарно!
Нека да ти дам няколко (предполагам нежелани от теб) съвета:
1) Вземи да разбереш какво е това String и как се работи с него. Изрази от типа Copy(egn,1,1) и Copy(egn,2,1) могат само да уморят някого от смях. Вместо това ползвай egn[1] и egn[2].
2) Ако толкова държиш на функцията Copy, то поне оправи израза (Copy(egn,1,1))+(Copy(egn,2,1)) да е Copy(egn,1,2). Ясно ти е защо, нали?
3) А сега за философската страна на въпроса - ако дъщеря ми е родена миналия месец (юни 2006) на колко години ще е според твоята процедура? За твое сведение стотиците на годината на раждане (или което е горе-долу векът) се определя дали е 18, 19 или 20 по цифрите за месеца (3-та и 4-та) - ако те са <= 12, то годината е 19хх, от 21 до 32 - 18хх и от 41 до 52 - 20хх. Сравнението if god <=05 then begin е най-малкото недомислено (меко казано).
4) Работа с дати по метода strtodate('01/01/1900') е бавна, ненадеждна и некоректна. За целта имаш функция EncodeDate.
5) (Следствие от 4) Такава промяна на формата на датата е абсолютно недопустима! Разбирам, че се опитваш да закърпиш недомисления си код от примера по-горе, но първо - това ще се отрази на визуалният интерфейс на програмата (ако имаш например грид с данни, в който има колона с дата - лошо); второ - такава промяна остава скрита от останалата част от кода, който е извикал тази функция - ти не трябва да променяш настройките, които са направени там! Само ако е абсолютно наложително и няма как по друг начин да бъде направено, само и само тогава можеш да си позволиш да ги променяш, но тогава трябва да си запазиш старите настройки и да си ги възстановиш на излизане:
OldShortDateFormat := ShortDateFormat;
ShortDateFormat := 'dd/mm/yyyy';
try
...
finally
ShortDateFormat := OldShortDateFormat;
end;
6) Не си си тествал кода внимателно. Да се върнем на примера с дъщеря ми. Нейното ЕГН би било нещо такова: 064601хххх. Какво ще стане с този код:
godina := Copy(egn,1,2);
mesec1 := Copy(egn,3,2);
meseca := strtoint(Copy(egn,3,2));
data1 := Copy(egn,5,2);
d := data1+'/'+mesec1+'/'+'19'+godina;
alldata1 := StrToDate(d); //d = '01/46/2006'?!?!? БУМ!
Млади момко, повтаряме ти вече не знам колко пъти с неизвестния - мълчи си, че да не ставаш за смях. Виждам, че не страдаш от липса на самочувствие, ама седни почети малко, че да го подплатиш с нещо де!...
|