Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Добрый вечер, господа! Спасайте!

Игорь Говоров Ученик (156), закрыт 7 лет назад
Имеется примерно тысяча 10-значных цифр, вот такого формата YYYYMMDD-NNGC, где YYYY-год (например 1998), MM - месяц (01-январь), DD - день (01-первое число). G - от 1 до 9 (N и C - могут быть цифры от 1 до 9, но они мне без разницы). Мне из этой тысячи 10-значных разных цифр вышеуказанного параметра надо отфильтровать те, которые соответствуют условиям дата рождения от 1 января 1964 до 1 сентября 1998 (т. е. 19640101 до 19980901), а также чтобы G - четное (т. е. 2,4,6,8).

Какой может быть самой удобный вариант скопировать-вставить имеющиеся данные и получить список тех, кто соответствует вышеупомянутым условиям?

Выручайте, иначе придется все делать вручную и тогда, я, возможно, застрелюсь. Программирование было в школе, 10 лет назад, поэтому какой из языков программирования использовать - без понятия
Лучший ответ
Ирина В Просветленный (49017) 7 лет назад
Задача вабчета простейшая, можно делать на чем угодно, хоть на vbs: для него не надо ничего, кроме Windows. Примерно так, хоть редко пишу на vbs:

Dim fso
Dim src
Dim dst
Set fso=CreateObject("Scripting.FileSystemObject")
Set src=fso.OpenTextFile("C:\...\OldFile.txt",1)
Set dst=fso.CreateTextFile("C:\...\NewFile.txt",True)
For i=1 to 1000
s=src.ReadLine()
ymd=Mid(s,1,8))
If Val(ymd)>=19640101 and Val(ymd)<=19980901 and (Val(Mid(s,12,1))) mod 2)=0 Then
dst.WriteLine(s)
Next
dst.Close
Set src=Nothing
Set dst=Nothing
Set fso=Nothing

Напишите это в блокноте, назовите как хотите, с расширением vbs, и запустите, ИМХО должно работать. И + пропишите там правильные пути к Вашим файлам, и количество строк.
Игорь ГоворовУченик (156) 7 лет назад
Спасибо Вам за комментарий! Попробую сделать, как Вы сказали. Количество строк указать вместо 1000 (For i=1 to 1000)?
Ирина В Просветленный (49017) Угу, вместо 1000. Если не будет работать, то напишите сюда, что нибудь придумаю.
Остальные ответы
Ярос Гуру (2977) 7 лет назад
Я не совсем пойму, а где и для чего такая процедура? Может и ошибусь, но попробуй последовательно: установи верхний и нижний лимит. Т. е. сначала укажи, что последовательность будет начинаться с 1 января 1964 (19640101). Примени. Если фильтр какой есть, он уберет все значения до указанного. Потом также укажи максимум, в данном случае 1 сентября 1998 (19980901). По сути, тебе должен будет выделен нужный временной фрагмент.
Игорь ГоворовУченик (156) 7 лет назад
А в какой программе это все делать. Я, к сожалению, совсем ничего в программировании не понимаю. Исходные данные у меня просто в word-файле.
Ярос Гуру (2977) Скажи, данные последовательно идут? От старшего года к младшему? Или вперемешку? Программ, увы, я тоже не знаю, но самый простой и быстрый способ фильтрации в Ворде, это Cntrl+F. Если последовательный ход чисел, набрав комбинацию введи дату начала. Он тебе ее выделит. Если до нее данные не нужны- убери. То же можно сделать и с датой окончания. В любом случае, при нахождении подходящей комбинации, фильтр тебе их подсветит.
Николай Просветленный (35616) 7 лет назад
есть такая штука awk -она умеет обрабатывать строковую информацию - и регулярками все можно подчистить
Игорь ГоворовУченик (156) 7 лет назад
Это куда заходить надо будет. У меня исходные документы просто в word
Николай Просветленный (35616) тады проще, скачай notepade++ -там есть мощьная фильтровалка по регулярным выражениям, надо будет заменить на пустоту то что не соответсвует шаблону первый шаблон будет 19[6-9][0-9].* - этот шаблон найдет все что будет соотвествовать с 1960-1999 следом будет можно подрезать 1999 1999.*
ГлавСборщик Просветленный (43548) 7 лет назад
Я бы на твоём месте сделал это через delphi, у меня есть знакомый человек, надёжный, может помочь за 100-150 рублей сделать, сам не буду - долго. Сроки сам ему установишь. Скайп prozergius Если что он не только в делфи может сделать, много чего знает, скорее всего поможет))
Игорь ГоворовУченик (156) 7 лет назад
Спасибо за идею? Думаете, в конечном счете, можно будет мне просто вставить исходные данные и получить те, которые соответствуют условиям?
ГлавСборщик Просветленный (43548) Так точно.
Сергей Королёв Знаток (366) 7 лет назад
Я бы попробовал на delphi или на php, на других языках сложнее будет, имхо.
Казаков Вячеслав Мыслитель (6415) 7 лет назад
А если попробовать просто выбрать "Упорядочить по... ". Ну открыть допустим этот файл в экселе, или в ворде (а уже в ворде сделать из этого таблицу, и в ней упорядочить). Это я как вариант.
Но вообще, задача нетривиальная, и исключительно интересная. Люблю такие. Вижу что она реальная, если подняли статус вопроса. А кроме того, такие уважаемые и эрудированные пользователи отвечали до меня.
Игорь ГоворовУченик (156) 7 лет назад
Спасибо за предложение! Скорее всего, так и буду решать эту задачу. Вы права, задача действительно реальная - происходит из необходимости упорядочить пациентов и выбрать из общего массива интересующую группу. Я врач и занимаюсь научной работой в Швеции.
Игорь Говоров Ученик (156) Извините, Вячеслав, описался в третьем предложении. "Вы правЫ". Lapsus linguae
Неточка Иванова Профи (606) 7 лет назад
это по какому предмету такие задачи?
Миша Милкович Ученик (174) 7 лет назад
Как дочку назвали, если не секрет?
денис леонов Просветленный (43013) 7 лет назад
Задача вабчета простейшая, можно делать на чем угодно, хоть на vbs: для него не надо ничего, кроме Windows. Примерно так, хоть редко пишу на vbs:

Dim fso
Dim src
Dim dst
Set fso=CreateObject("Scripting.FileSystemObject")
Set src=fso.OpenTextFile("C:\...\OldFile.txt",1)
Set dst=fso.CreateTextFile("C:\...\NewFile.txt",True)
For i=1 to 1000
s=src.ReadLine()
ymd=Mid(s,1,8))
If Val(ymd)>=19640101 and Val(ymd)<=19980901 and (Val(Mid(s,12,1))) mod 2)=0 Then
dst.WriteLine(s)
Next
dst.Close
Set src=Nothing
Set dst=Nothing
Set fso=Nothing

Напишите это в блокноте, назовите как хотите, с расширением vbs, и запустите, ИМХО должно работать. И + пропишите там правильные пути к Вашим файлам, и количество строк.
виталий сутормин Знаток (291) 7 лет назад
Задача вабчета простейшая, можно делать на чем угодно, хоть на vbs: для него не надо ничего, кроме Windows. Примерно так, хоть редко пишу на vbs:

Dim fso
Dim src
Dim dst
Set fso=CreateObject("Scripting.FileSystemObject")
Set src=fso.OpenTextFile("C:\...\OldFile.txt",1)
Set dst=fso.CreateTextFile("C:\...\NewFile.txt",True)
For i=1 to 1000
s=src.ReadLine()
ymd=Mid(s,1,8))
If Val(ymd)>=19640101 and Val(ymd)<=19980901 and (Val(Mid(s,12,1))) mod 2)=0 Then
dst.WriteLine(s)
Next
dst.Close
Set src=Nothing
Set dst=Nothing
Set fso=Nothing

Напишите это в блокноте, назовите как хотите, с расширением vbs, и запустите, ИМХО должно работать. И + пропишите там правильные пути к Вашим файлам, и количество строк.
Похожие вопросы