Сортировка дат.
Модератор: Модераторы
А как отсечь 3 символа с конца?
-
Padre_Mortius
- энтузиаст
- Сообщения: 1261
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
Код: Выделить всё
s:=Copy(d, 1, Length(d)-3)в переменной s мы получим строку d без последних 3-х символов
Длину строки всё равно нужно знать, а там уже плясать от положения точки.
Добавлено спустя 2 минуты 39 секунд:
Спасибо большое, на сегодня хватит. Спокойной ночи.
Добавлено спустя 2 минуты 39 секунд:
Спасибо большое, на сегодня хватит. Спокойной ночи.
-
Padre_Mortius
- энтузиаст
- Сообщения: 1261
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
Длину строки потребуется вычислить при получении месяца и года. В идеале, вычисление длины строки делается один раз и приравнивается к переменной.
В итоге все получение данных занимает всего 4 строчки.
В итоге все получение данных занимает всего 4 строчки.
Строку придётся мерить 3 раза, т.к. она может быть длиной 3..5, а после в зависимости от положения точки получить день и месяц. А год получить после усечения строки. Или нет?
Добавлено спустя 2 часа 47 минут 39 секунд:
Сейчас всё работает как надо, компилится в Geany и правильно работает.
Добавлено спустя 2 часа 47 минут 39 секунд:
Сейчас всё работает как надо, компилится в Geany и правильно работает.
Код: Выделить всё
program L;
uses crt;
var
date,summer,winter : text;
d,day, month, year : string;
procedure generator;
const n=60;
var
i : integer;
date: text;
day, month, year,data : string;
Begin
clrscr;
randomize;
assign (date, 'd:\data.txt');
rewrite(date);
for i:=1 to n do
begin
str((random(31)+1), day);
str((random(12)+1), month);
str(random(99), year);
if length(year) =1 then year := '0' + year;
data:=day+'.'+month+'.'+year;
writeln(date, data);
end;
close(date);
end;
begin
clrscr;
generator;
assign(date, 'd:\data.txt');
assign(summer, 'd:\summer.txt');
assign(winter, 'd:\winter.txt');
rewrite(summer);
rewrite(winter);
reset(date);
while not EOF(date) do
begin
readln(date,d);
if length(d) = 6 then
begin
day := '0'+copy(d,1,1);
month := '0'+copy(d,3,1);
year := copy(d,5,2);
end;
if (length(d) = 7) and (pos('.',d) = 2) then
begin
day := '0' + copy(d,1,1);
month := copy(d,3,2);
year := copy(d,6,2);
end
else
if pos('.', d) = 3 then
begin
day := copy(d,1,2);
month := '0'+copy(d,4,1);
year := copy(d,6,2);
end;
if length(d) = 8 then
begin
day := copy(d,1,2);
month := copy(d,4,2);
year := copy(d,7,2);
end;
if ((month='12') or (month='01')) or (month='02') then
writeln(winter,(day+'.'+month+'.'+year));
if (month='06') or (month='07') or (month='08') then
writeln(summer,(day+'.'+month+'.'+year));
end;
close(date);
close(summer);
close(winter);
end.
-
Padre_Mortius
- энтузиаст
- Сообщения: 1261
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
Код: Выделить всё
program project1;
uses
crt;
var
date, summer, winter: Text;
d, day, month, year: String;
procedure generator;
const
n = 60;
var
i: integer;
date: Text;
day, month, year, Data: string;
begin
randomize;
Assign(date, 'd:\projects\data.txt');
rewrite(date);
for i := 1 to n do
begin
str((random(31) + 1), day);
str((random(12) + 1), month);
str(random(99), year);
if length(year) = 1 then year := '0' + year;
Data := day + '.' + month + '.' + year;
writeln(date, Data);
end;
Close(date);
end;
begin
clrscr;
generator;
Assign(date, 'd:\projects\data.txt');
Assign(summer, 'd:\projects\summer.txt');
Assign(winter, 'd:\projects\winter.txt');
rewrite(summer);
rewrite(winter);
reset(date);
while not EOF(date) do
begin
readln(date, d);
day := copy(d, 1, Pos('.', d) -1);
year := copy(d, Length(d)-1, 2);
month := copy(d, Pos('.' , d) +1, Length(d) - Length(day) - Length(year) - 2);
if Length(day) = 1 then Day := '0' + Day;
if Length(Month) = 1 then Month := '0' + Month;
if ((month = '12') or (month = '01')) or (month = '02') then
writeln(winter, (day + '.' + month + '.' + year));
if (month = '06') or (month = '07') or (month = '08') then
writeln(summer, (day + '.' + month + '.' + year));
end;
Close(date);
Close(summer);
Close(winter);
end.
Спасибо. вот только в определении месяца длина year = 2, может просто записать так:
Добавлено спустя 58 минут 54 секунды:
Padre_Mortius
Спасибо большое за помощь ваш вариант значительно короче, и выглядит лучше.
Код: Выделить всё
month := copy(d, Pos('.' , d) +1, Length(d) - Length(day) - 4);Добавлено спустя 58 минут 54 секунды:
Padre_Mortius
Спасибо большое за помощь ваш вариант значительно короче, и выглядит лучше.
-
Padre_Mortius
- энтузиаст
- Сообщения: 1261
- Зарегистрирован: 29.05.2007 17:38:07
- Откуда: Спб
Можно и так)
Надеюсь Вы поняли смысл работы со строками, а вообще в TP есть еще более замечательный модуль Strings, с его помощью можно еще красивей написать разбор строк
Надеюсь Вы поняли смысл работы со строками, а вообще в TP есть еще более замечательный модуль Strings, с его помощью можно еще красивей написать разбор строк
Вроде понял. Я тут книжек накачал надо посмотреть. Ещё раз спасибо, но я не прощаюсь, на очереди - очередь.
