Во-первых, каков формат года? Должно быть 4 знака, то есть = [0001, 2020] Во-вторых, каков формат самой даты? Это число без разделителей? ддмм? Или с разделителями - точками, что более естественно? дд.мм.? Или с разделителями - слешами, по-американски? дд/мм/? Или совсем по-американски, месяц впереди дня? мм/дд/? Или без разделителей, но в обратном порядке? ммдд? Я и такое видел! Будем считать, что это число без разделителей, 1 вариант, ддмм. 8 цифр. Тогда проверка должна быть примерно такой: Пишу на бейсике, на паскаль сами переводите. Poz1 = 1: Poz2 = 0 Do While Poz1 > 0 ' Цикл, пока в строке встречаются пробелы Poz2 = InStr(Poz1, Stroka, " ") ' Ищем пробел в строке If Poz2 > 0 Then ' Если нашли пробел - это конец слова If Poz2 - Poz1 = 8 Then ' Если длина слова 8 знаков Flag = True ' Признак, что это 8 цифр, устанавливаем в истину For i= 1 To 8 If Chr( Mid (Stroka, Poz1 + i - 1, 1)) < &H30 Or _ Chr( Mid (Stroka, Poz1 + i - 1, 1)) > &H39 Then Flag = False ' Какой-то из знаков оказался НЕ цифрой End If Next i If Flag = True Then ' Если это все же 8 цифр, то проверяем, дата ли это Day = Val (Mid (Stroka, Poz1, 2)) Month = Val (Mid (Stroka, Poz1+2, 2)) Year = Val (Mid (Stroka, Poz1+4, 4)) If (Day >= 1) And (Day <= 31) And (Month >= 1) And (Month <= 12) _ And (Year >= 1) And (Year <= 2020) Then ' Если это ДАТА Call ChangeDate(Day, Month, Year) ' Вызываем п/п замены даты End If End If End If Else ' Если не нашли пробел - это было последнее слово Poz2 = Len(Stroka) ' Устанавливаем Poz2 на конец строки If Poz2 - Poz1 = 8 Then ' Если длина слова 8 знаков Flag = True ' Признак, что это 8 цифр, устанавливаем в истину For i= 1 To 8 If Chr( Mid (Stroka, Poz1 + i - 1, 1)) < &H30 Or _ Chr( Mid (Stroka, Poz1 + i - 1, 1)) > &H39 Then Flag = False ' Какой-то из знаков оказался НЕ цифрой End If Next i If Flag = True Then ' Если это все же 8 цифр, то проверяем, дата ли это Day = Val (Mid (Stroka, Poz1, 2)) Month = Val (Mid (Stroka, Poz1+2, 2)) Year = Val (Mid (Stroka, Poz1+4, 4)) If (Day >= 1) And (Day <= 31) And (Month >= 1) And (Month <= 12) _ And (Year >= 1) And (Year <= 2020) Then ' Если это ДАТА Call ChangeDate(Day, Month, Year) ' Вызываем п/п замены даты End If End If End If End If Poz1 = Poz2 ' Устанавливаем начало нового слова Loop End Sub
Sub ChangeDate() If (Day = 31) And (Month = 12) Then ' Если это было 31 декабря Year = Year + 1 ' То ставим 1 января следующего года strDay = "01": strMounth = "01": strYear = Trim(Str(Year)) ElseIf (Day = 31) And (Month = 1) Then ' 31 января strDay = "01": strMounth = "02": strYear = Trim(Str(Year)) ElseIf (Day = 28) And (Month = 2) And (Year Mod 4 <> 0) Then ' 28 февраля strDay = "01": strMounth = "03": strYear = Trim(Str(Year)) ElseIf (Day = 29) And (Month = 2) And (Year Mod 4 = 0) Then ' 29 февраля strDay = "01": strMounth = "03": strYear = Trim(Str(Year)) ElseIf (Day = 31) And (Month = 3) Then ' 31 марта strDay = "01": strMounth = "04": strYear = Trim(Str(Year)) ElseIf (Day = 30) And (Month = 4) Then ' 30 апреля strDay = "01": strMounth = "05": strYear = Trim(Str(Year)) ElseIf (Day = 31) And (Month = 5) Then ' 31 мая strDay = "01": strMounth = "06": strYear = Trim(Str(Year)) ElseIf (Day = 30) And (Month = 6) Then ' 30 июня strDay = "01": strMounth = "07": strYear = Trim(Str(Year)) ElseIf (Day = 31) And (Month = 7) Then ' 31 июля strDay = "01": strMounth = "08": strYear = Trim(Str(Year)) ElseIf (Day = 31) And (Month = 8) Then ' 31 августа strDay = "01": strMounth = "09": strYear = Trim(Str(Year)) ElseIf (Day = 30) And (Month = 9) Then ' 30 сентября strDay = "01": strMounth = "10": strYear = Trim(Str(Year)) ElseIf (Day = 31) And (Month = 10) Then ' 31 октября strDay = "01": strMounth = "11": strYear = Trim(Str(Year)) ElseIf (Day = 30) And (Month = 11) Then ' 30 ноября strDay = "01": strMounth = "12": strYear = Trim(Str(Year)) Else ' Любой другой день Day = Day + 1 ' Ставим следующий день If (Day < 10) Then strDay = "0" & Trim(Str(Day)) Else strDay = Trim(Str(Day)) If (Mounth < 10) Then strMounth = "0" & Trim(Str(Mounth)) Else strMounth = Trim(Str(Mounth)) End If If Year < 10 Then strYear = "000" & strYear ElseIf Year < 100 Then strYear = "00" & strYear ElseIf Year < 1000 Then strYear = "0" & strYear End If Stroka = Left(Stroka, Poz1) & strDay & strMonth & strYear & Mid(Stroka, Poz2) End Sub Как видите, программа оказалась весьма непростой.
Шишкин всегда старался изобразить природу могучей и величественной. Картина «Среди долины ровныя» показывает нам русскую живописную равнину. Эта долина настолько широка и бесконечна, что конца ей нет, и лишь где-то белеет маленький ручеек, виднеется крыша церкви, а на заднем плане видно легкий туман и тонкой ленточкой вьется проселочная дорожка. Мы можем почувствовать глубину картины из-за грамотного чередования творцом насыщенности цветов, которые придают полотну динамичность.
Шишкин великолепно передал нам аромат и всю красоты полевых цветочков, которые растут на просторах. Мы можем любоваться васильками, ромашками, боярышником и колокольчиками. Над долиной возвышается могучий дуб и цветочки, такие хрупкие, как бы подчеркивают всю его величественность. Он возвышается над долиной одинокий и благородный. Все невзгоды, которые выпали на его долю, искривили его ветви. Но он стал еще сильнее. Несмотря на то что облака на небе спокойны, чувствуется скорое приближение грозы и тишина перед ней окутала всю долину. Дуб шевелит своими ветвями и ожидает, когда начнется гроза, тучки чуть отбросили свою тень на долину. Дуб в полной уверенности, что выстоит эту грозу, и она не сломает его ветви и его ствол.
Произведение Шишкина «Среди долины ровныя» является одним из самых монументальных и самых торжественных произведений живописца. Картина в полной мере отражает всю величественность нашей русской природы, в ней просматривается наша русская душа. Дуб символизирует нашу русскую душу, он не пал под натиском невзгод и стал только сильнее. Он могучий, одинокий стоит один во всей долине и его не сломить.
Картина «Среди долины ровныя…» написана Иваном Ивановичем Шишкиным в 1882 году через год после внезапной смерти любимой жены художника. Он сильно переживал потерю. Но родная природа, которая всегда манила художника к себе, не дала ему раствориться в своем горе.
Однажды, идя по долине, Шишкин случайно набрел на этот величественный дуб, который одиноко возвышался над окружающими просторами. Этот дуб напомнил художнику его самого, такого же одинокого, но не сломленного бурями и невзгодами. Так родилась картина, которую художник назвал строчками из русской народной песни.
Стоя у могучего дерева, Шишкин вспомнил слова старинной русской песни «Среди долины ровныя…», в которой поется об одиноком дубе, о горе человека, потерявшего «нежного друга». Художник как бы ожил после этой встречи. Он снова стал творить, идя по жизни одиноко, но крепко стоя на родной земле, как тот дуб на его картине.
Шишкин всегда старался изобразить природу могучей и величественной. Картина «Среди долины ровныя» показывает нам русскую живописную равнину. Эта долина настолько широка и бесконечна, что конца ей нет, и лишь где-то белеет маленький ручеек, виднеется крыша церкви, а на заднем плане видно легкий туман и тонкой ленточкой вьется проселочная дорожка. Мы можем почувствовать глубину картины из-за грамотного чередования творцом насыщенности цветов, которые придают полотну динамичность.
Шишкин великолепно передал нам аромат и всю красоты полевых цветочков, которые растут на просторах. Мы можем любоваться васильками, ромашками, боярышником и колокольчиками. Над долиной возвышается могучий дуб и цветочки, такие хрупкие, как бы подчеркивают всю его величественность. Он возвышается над долиной одинокий и благородный. Все невзгоды, которые выпали на его долю, искривили его ветви. Но он стал еще сильнее. Несмотря на то что облака на небе спокойны, чувствуется скорое приближение грозы и тишина перед ней окутала всю долину. Дуб шевелит своими ветвями и ожидает, когда начнется гроза, тучки чуть отбросили свою тень на долину. Дуб в полной уверенности, что выстоит эту грозу, и она не сломает его ветви и его ствол.
Произведение Шишкина «Среди долины ровныя» является одним из самых монументальных и самых торжественных произведений живописца. Картина в полной мере отражает всю величественность нашей русской природы, в ней просматривается наша русская душа. Дуб символизирует нашу русскую душу, он не пал под натиском невзгод и стал только сильнее. Он могучий, одинокий стоит один во всей долине и его не сломить.
Во-вторых, каков формат самой даты? Это число без разделителей? ддмм?
Или с разделителями - точками, что более естественно? дд.мм.?
Или с разделителями - слешами, по-американски? дд/мм/?
Или совсем по-американски, месяц впереди дня? мм/дд/?
Или без разделителей, но в обратном порядке? ммдд? Я и такое видел!
Будем считать, что это число без разделителей, 1 вариант, ддмм. 8 цифр.
Тогда проверка должна быть примерно такой:
Пишу на бейсике, на паскаль сами переводите.
Poz1 = 1: Poz2 = 0
Do While Poz1 > 0 ' Цикл, пока в строке встречаются пробелы
Poz2 = InStr(Poz1, Stroka, " ") ' Ищем пробел в строке
If Poz2 > 0 Then ' Если нашли пробел - это конец слова
If Poz2 - Poz1 = 8 Then ' Если длина слова 8 знаков
Flag = True ' Признак, что это 8 цифр, устанавливаем в истину
For i= 1 To 8
If Chr( Mid (Stroka, Poz1 + i - 1, 1)) < &H30 Or _
Chr( Mid (Stroka, Poz1 + i - 1, 1)) > &H39 Then
Flag = False ' Какой-то из знаков оказался НЕ цифрой
End If
Next i
If Flag = True Then ' Если это все же 8 цифр, то проверяем, дата ли это
Day = Val (Mid (Stroka, Poz1, 2))
Month = Val (Mid (Stroka, Poz1+2, 2))
Year = Val (Mid (Stroka, Poz1+4, 4))
If (Day >= 1) And (Day <= 31) And (Month >= 1) And (Month <= 12) _
And (Year >= 1) And (Year <= 2020) Then ' Если это ДАТА
Call ChangeDate(Day, Month, Year) ' Вызываем п/п замены даты
End If
End If
End If
Else ' Если не нашли пробел - это было последнее слово
Poz2 = Len(Stroka) ' Устанавливаем Poz2 на конец строки
If Poz2 - Poz1 = 8 Then ' Если длина слова 8 знаков
Flag = True ' Признак, что это 8 цифр, устанавливаем в истину
For i= 1 To 8
If Chr( Mid (Stroka, Poz1 + i - 1, 1)) < &H30 Or _
Chr( Mid (Stroka, Poz1 + i - 1, 1)) > &H39 Then
Flag = False ' Какой-то из знаков оказался НЕ цифрой
End If
Next i
If Flag = True Then ' Если это все же 8 цифр, то проверяем, дата ли это
Day = Val (Mid (Stroka, Poz1, 2))
Month = Val (Mid (Stroka, Poz1+2, 2))
Year = Val (Mid (Stroka, Poz1+4, 4))
If (Day >= 1) And (Day <= 31) And (Month >= 1) And (Month <= 12) _
And (Year >= 1) And (Year <= 2020) Then ' Если это ДАТА
Call ChangeDate(Day, Month, Year) ' Вызываем п/п замены даты
End If
End If
End If
End If
Poz1 = Poz2 ' Устанавливаем начало нового слова
Loop
End Sub
Sub ChangeDate()
If (Day = 31) And (Month = 12) Then ' Если это было 31 декабря
Year = Year + 1 ' То ставим 1 января следующего года
strDay = "01": strMounth = "01": strYear = Trim(Str(Year))
ElseIf (Day = 31) And (Month = 1) Then ' 31 января
strDay = "01": strMounth = "02": strYear = Trim(Str(Year))
ElseIf (Day = 28) And (Month = 2) And (Year Mod 4 <> 0) Then ' 28 февраля
strDay = "01": strMounth = "03": strYear = Trim(Str(Year))
ElseIf (Day = 29) And (Month = 2) And (Year Mod 4 = 0) Then ' 29 февраля
strDay = "01": strMounth = "03": strYear = Trim(Str(Year))
ElseIf (Day = 31) And (Month = 3) Then ' 31 марта
strDay = "01": strMounth = "04": strYear = Trim(Str(Year))
ElseIf (Day = 30) And (Month = 4) Then ' 30 апреля
strDay = "01": strMounth = "05": strYear = Trim(Str(Year))
ElseIf (Day = 31) And (Month = 5) Then ' 31 мая
strDay = "01": strMounth = "06": strYear = Trim(Str(Year))
ElseIf (Day = 30) And (Month = 6) Then ' 30 июня
strDay = "01": strMounth = "07": strYear = Trim(Str(Year))
ElseIf (Day = 31) And (Month = 7) Then ' 31 июля
strDay = "01": strMounth = "08": strYear = Trim(Str(Year))
ElseIf (Day = 31) And (Month = 8) Then ' 31 августа
strDay = "01": strMounth = "09": strYear = Trim(Str(Year))
ElseIf (Day = 30) And (Month = 9) Then ' 30 сентября
strDay = "01": strMounth = "10": strYear = Trim(Str(Year))
ElseIf (Day = 31) And (Month = 10) Then ' 31 октября
strDay = "01": strMounth = "11": strYear = Trim(Str(Year))
ElseIf (Day = 30) And (Month = 11) Then ' 30 ноября
strDay = "01": strMounth = "12": strYear = Trim(Str(Year))
Else ' Любой другой день
Day = Day + 1 ' Ставим следующий день
If (Day < 10) Then strDay = "0" & Trim(Str(Day)) Else strDay = Trim(Str(Day))
If (Mounth < 10) Then strMounth = "0" & Trim(Str(Mounth)) Else strMounth = Trim(Str(Mounth))
End If
If Year < 10 Then
strYear = "000" & strYear
ElseIf Year < 100 Then
strYear = "00" & strYear
ElseIf Year < 1000 Then
strYear = "0" & strYear
End If
Stroka = Left(Stroka, Poz1) & strDay & strMonth & strYear & Mid(Stroka, Poz2)
End Sub
Как видите, программа оказалась весьма непростой.