Нужна помощь, есть база, 10 тысяч строк. Каждая строка содержит дату, вида: 1210, где первые две цифры месяц, вторые год. Нужно каким то образом из всей базы удалить полностью строчки которые содержат уже прошедшие даты. то есть допустим сейчас 0710, то все строчки содержащие 0610 0510 и тп нужно снести. Каким образом это сделать?
Вы о чем? Вот пример одной строчки +79267893421 18 0110 Цветы Магазин Россия 446212 ОАО 23 23 аб. ящ. N/A [email protected] Четверг
http://dump.ru/file/4672694 В current date пишешь типа: 0710 07 -> мес 10 -> год он сортирует, если попадается 0710 дата -> он ее тоже удаляет (вроде как работает)
Code: program DELerynda; {$APPTYPE CONSOLE} uses Windows; function Get2PosNext(s: string): integer; begin Result:= pos(' ', s); Delete(s, 1, Result); Result:= pos(' ', s) + Result + 1; end; var a, b: TextFile; s: string; Path: string; lpSystemTime: _SYSTEMTIME; Date: string; Year, Month: string; MonthI, YearI, Code: integer; CurrentMonth, CurrentYear: integer; begin GetSystemTime(lpSystemTime); CurrentMonth:= lpSystemTime.wMonth; CurrentYear:= lpSystemTime.wYear; WriteLn('Enter path to file'); Read(Path); AssignFile(a, Path); AssignFile(b, 'C:\new.txt'); Reset(a); ReWrite(b); while not SeekEOf(a) do begin ReadLn(a, s); if s <> '' then begin // Date:= Copy(s, Get2PosNext(s), 4); Month:= Copy(Date, 1, 2); Year:= '20' + Copy(Date, 3, 2); Val(Month, MonthI, Code); Val(Year, YearI, Code); if CurrentYear < YearI then WriteLn(b, s) else if (CurrentMonth < MonthI) and (CurrentYear = YearI) then WriteLn(b, s); end; // end; CloseFile(a); CloseFile(b); end. Вводишь путь к txt, результат будет сохранен как c:\new.txt. Скачать exe.
Спасибо огромное кто помог, но обе проги не правильно работают( отдают от 10к стро может 100 дай бог, якобы отсортированных, но в них все равно попадаются строки с уже просроченной датой. немного уточню, в каждой строчке столбцы разделяются " "(3 пробела) вот таким пробелом, дата находится в третем "столбце" надо чекать только ее, остальные данные не трогать.. может кто нибудь помочь?
Смотра формат дата такой DD MMYY, конечно было бы наверное легче если бы не был проблем между DD и MM. И еще одна вещь,может не в тему но формат дата после 2010 должен быть : DDMMYYYY
while read line; do if [ `echo $line|awk '{print$3}'` -le 0710 ]; then echo $line fi done < txt Это на bash, который в linux по умолчанию стоит. Если инфа не секурная могу у себя пропарсить. Если не хочешь - попроси на php написать или ставь bash или на линукс машине у кого нибудь
ну так понятно что не работает, в своем посте ты привел пример, где пробел один. Code: program DELerynda; {$APPTYPE CONSOLE} uses Windows; function Get2PosNext(s: string): integer; begin Result:= pos(' ', s); Delete(s, 3, Result); Result:= pos(' ', s) + Result + 3; end; var a, b: TextFile; s: string; Path: string; lpSystemTime: _SYSTEMTIME; Date: string; Year, Month: string; MonthI, YearI, Code: integer; CurrentMonth, CurrentYear: integer; begin GetSystemTime(lpSystemTime); CurrentMonth:= lpSystemTime.wMonth; CurrentYear:= lpSystemTime.wYear; WriteLn('Enter path to file'); Read(Path); AssignFile(a, Path); AssignFile(b, 'C:\new.txt'); Reset(a); ReWrite(b); while not SeekEOf(a) do begin ReadLn(a, s); if s <> '' then begin // Date:= Copy(s, Get2PosNext(s), 4); Month:= Copy(Date, 1, 2); Year:= '20' + Copy(Date, 3, 2); Val(Month, MonthI, Code); Val(Year, YearI, Code); if CurrentYear < YearI then WriteLn(b, s) else if (CurrentMonth < MonthI) and (CurrentYear = YearI) then WriteLn(b, s); end; // end; CloseFile(a); CloseFile(b); end. Скачать.