Форум АНТИЧАТ

Форум АНТИЧАТ (https://forum.antichat.xyz/index.php)
-   PHP, PERL, MySQL, JavaScript (https://forum.antichat.xyz/forumdisplay.php?f=37)
-   -   Вопрос по Excel (https://forum.antichat.xyz/showthread.php?t=129117)

BlackSilver 10.07.2009 11:25

Вопрос по Excel
 
Я настолько обыдлился, что генерирую исходник в Excel.
И столкнулся с такой проблемой: в одной ячейке есть строка типа IdTypeFactor. Нужно её программно преобразовать до строки id_type_factor. То есть самое сложное - перед каждой заглавной буквой ставить подчерк. Или наоборот, после каждого подчерка букву делать заглавной.
Есть идеи?

FireFenix 10.07.2009 11:38

1) Проверять коды символов, если относится к диапазону заглавных - то разделять подчёркиванием
2) Брать каждый символ, и принудительно делать его заглавным, и сравнивать с оригиналом, типа
VB : If char = UCase(char) Then ... Else ... End Id
PHP : if (char == strtoupper(char)) {} else {}
3) Юзать регулярку типа [A-ZА-Я]
a) С модом возврата смещения и по массиву смещений вхождений получаем позицию каждого заглавного символа и воротим что хотим
б) Заменять символ нижний регистр + подчёркивание

m0nsieur 10.07.2009 11:38

del...недопонял ТС

BlackSilver 10.07.2009 12:37

под конец вышло такое
Код:

Function ToField(str) As String
    Dim res As String
    Dim subs As String
    For i = 0 To Len(str) - 1
        subs = str.Substring(i, 1)
        If subs = UCase(subs) Then res = res + "_"
        res = res + subs
    Next i
    ToField = res
End Function

Удаление подчерка в начале и опускание букв уже в ячейке сделаю.
Вот только как теперь заставить таблицу пользоваться этой функцией. Не видит...

FireFenix 10.07.2009 13:40

Что значит не видит?
Когда ты запускаешь функцию?

BlackSilver 10.07.2009 13:50

Когда пишу в ячейке =ToField(A2)

FireFenix 10.07.2009 14:01

А чё оно должно собсно работать?
ToField функция не экзеля, а VBA
Приделая на событие к ячейки или добавь ещё контролы, которые по нажатию/изменению/etc будут вызывать функцию


Время: 08:14