Страницы: 1
RSS
Вставить символы в текстовую строку
 
Добрый день!
Есть переменная вида: d = "20102021"
Как вставить точки после 2-й и 4-й позиции, чтобы получить дату 20.10.2021 ?
Изменено: vikttur - 20.10.2021 12:29:25
 
Все, уже сам догадался.
Код
d1 = Mid(d, 1, 2) & "." & Mid(d, 3, 2) & "." & Mid(d, 5, 4)
Изменено: Михаил - 21.10.2021 10:49:12
 
Михаил, круто!!!
Я пока читал, открывал Excel, сочинял...
Ну как вариант - не через одну Mid, а через три :)
Код
d = "20102021"
?left(d,2) & "." & mid(d,3,2) & "." & right(d,4)
20.10.2021
 
Код
replace(format(d,"00-00-0000"),"-",".")
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Строковые быстрее, но это 10 млн, так что разницу вряд ли заметите
есть ещё трюк с заменой середины одним махом с помощью Mid$()=, но в данном случае не прокатит
Изменено: Jack Famous - 21.10.2021 09:25:05
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Цитата
Михаил написал: получить дату
Дату, а не текст!
Код
CDate(Format(d, "00\.00\.0000"))
 
Цитата
vikttur: Дату, а не текст!
это уже другой момент - по теме нужно просто точки вставить, "раздвинув строку"  :D
Добавил твой вариант в сравнение  ;)
Изменено: Jack Famous - 20.10.2021 12:28:57
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Спасибо всем участвующим.
 
Jack Famous, Mid не надо скидывать с весов. Можно ещё в 2-3 раза ускориться
Код
Sub t()
Dim tx$, res$, t!, n&

res = String$(10, ".")
  
tx = "20102021"
t = Timer
    For n = 1 To 10000000
'        res = Mid(tx, 1, 2) & "." & Mid(tx, 3, 2) & "." & Mid(tx, 5, 4) ' 4,9 (4,6, ???? $)
'        res = Left(tx, 2) & "." & Mid(tx, 3, 2) & "." & Right(tx, 4)    ' 4,7 (4,3, ???? $)
'        res = Replace(Format(tx, "00-00-0000"), "-", ".")               ' 22.6 ($ ?? ????????)
'        res = Format(tx, "00\.00\.0000")                                ' 12.3 ($ ?? ????????)
        Mid$(res, 1, 2) = tx
        Mid$(res, 4, 2) = Mid$(tx, 3, 2)
        Mid$(res, 7, 4) = Mid$(tx, 5, 4)
    
    Next n
Debug.Print Timer - t, res
End Sub
 
Класс! )
 
думаю, если поднапрячься - резервы для более стремительного решения этой не простой задачи еще есть...
с интересом слежу за развитием событий
Виктор, за Format "\." спасибо, напомнил (я обходил как мог)))
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Цитата
vikttur написал:
Дату, а не текст!
а региональные настройки могут сильно пошутить, поэтому лучше так
Код
 CDate(Format(d, "00-00-0000"))
как ни странно но этот разделитель более "международный".
По вопросам из тем форума, личку не читаю.
 
Апострофф, ни хрена ж себе  8-0
Я-то как-бы тоже могу так, но даже проверять не стал (а зря, как оказалось) - подумал, что 4 строковых присваивания НУ НИКАК не будут быстрее 3ёх, а оно вон чё
К тому же Left и Right обычно немного быстрее Mid, однако, видимо, НЕ в случае замены середины

Выносить из цикла res = String$(10, ".") некорректно для сравнения, но даже с ним в цикле время почти в 2 раза меньше ближайшего (добавил в свой тест выше)  :idea:

Благодарю - сразу смекнул, какие свои самописные функции можно апдейтнуть  ;)
Изменено: Jack Famous - 21.10.2021 09:30:43
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
 
Как из простого вопроса развить спортивную тему "кто быстрее" :)
 
Цитата
Михаил: Как из простого вопроса развить спортивную тему "кто быстрее"
работают профессионалы  :D
Дело не в том, как ускорить ВАШ макрос - я написал, что разницы ВЫ не заметите, зато, если использовать ПРАВИЛЬНЫЙ/БЫСТРЕЙШИЙ вариант из многих в своих больших проектах, то, в совокупности с другими подобными знаниями о скоростных методах можно добиться ЗАМЕТНОГО (иногда кратного) прироста и в совершенно реальных "боевых" макросах  ;)
Во всех делах очень полезно периодически ставить знак вопроса к тому, что вы с давних пор считали не требующим доказательств (Бертран Рассел) ►Благодарности сюда◄
Страницы: 1
Наверх