Вниз
Скачать: CL | DM;

Работа со строками в VBA   Найти похожие ветки 

← →
Lamer123   (2005-02-14 13:19) [0]

Подскажите плиз, как на бейсике будет выглядеть такое (абстракный пример, где s - переменная типа String)

for i:=1 to 10 do
if s[i]="A" then s[i]=s[i+1];

Заранее спасибо :)


← →
Lamer123   (2005-02-14 15:01) [1]

люди, подскажите, ну неужели никто VB не знает? А то я кроме MID ничего путного не нашел, дак это как то громозко получается...


← →
Digitman ©   (2005-02-14 15:29) [2]


> кроме MID ничего путного не нашел


и не найдешь.
string-тип данных в VBA не позволяет обращаться к символам строки как к элементам массива (подобно Паскалю)

если это учебная задача - мотай на ус ..
если практическая - не в тот огород гребешь..


← →
vertal ©   (2005-02-14 15:42) [3]

Я тоже всё делал через Mid$.
По-моему, в VBA по-другому и нельзя.
Или можно использовать из kernel32.dll функции работы со строками и памятью (типа RtlMoveMemory, lstrcmpA и другие), но это будет еще более громоздко и менее надежно, к тому же функции типа StrPos или StrScan я там не нашел.


← →
vertal ©   (2005-02-14 15:43) [4]

Я тоже всё делал через Mid$.
По-моему, в VBA по-другому и нельзя.
Или можно использовать из kernel32.dll функции работы со строками и памятью (типа RtlMoveMemory, lstrcmpA и другие), но это будет еще более громоздко и менее надежно, к тому же функции типа StrPos или StrScan я там не нашел.


← →
Anatoly Podgoretsky ©   (2005-02-14 15:43) [5]

Lamer123   (14.02.05 15:01) [1]
Чем-же громоздко, почти одинаково if Mid() = "a" then


← →
Digitman ©   (2005-02-14 16:06) [6]


> Anatoly Podgoretsky ©   (14.02.05 15:43) [5]


там ведь дальше по ходу текста (s[i]=s[i+1]) задница во всю ширину Васика вылазит) ...
хотя автора, чувствуется, это нимало не заботит


← →
DimaK   (2005-02-14 18:49) [7]

2Digitman
Задачка рабочая (ну там со строками возня всякая...), а примерчик я так накидал, чтобы понятнее было о чем речь...

хотя автора, чувствуется, это нимало не заботит
заботит, а вдруг мой макрос увидит какой спец по VBA - чтобы стыдно не было.
Ведь согласитесь, смешно на паскале писать s[i]=s[i+1] как s:=copy(s,1,i-1)+copy(s,i+1,1)+copy(s,i+1,length(s)) ... :)


← →
Lamer123   (2005-02-14 19:02) [8]

2vertal
к тому же функции типа StrPos или StrScan я там не нашел.
а где не нашел? в kernel32? А то в VBA есть стандартная функция InStr на эту тему..


← →
palva ©   (2005-02-14 19:03) [9]

Можно одним оператором выложить строку в байтовый массив, а потом, обработав, положить обратно. Только надо учитывать, что каждый символ занимает два байта. Стоит поэкспериментировать, измеряя время выполнения, чтобы понять стоит ли игра свеч.

Dim s As String
Dim b() As Byte
s = "abcde"
b = s
t = b(0): b(0) = b(8): b(8) = t
s = b
MsgBox s " ebcda


← →
palva ©   (2005-02-14 19:12) [10]

> а вдруг мой макрос увидит какой спец

Вообще считается круто использовать регулярные выражения. Они как раз предназначены для хитрой обработки строк и поиска символов. Но для эффективной работы к RegExp надо привыкнуть.



Страницы: 1 вся ветка

Скачать: CL | DM;



Память: 0.47 MB
Время: 0.031 c
4-1105072861
-[ HAWK ]-
2005-01-07 07:41
2005.03.06
Стили


6-1103727459
frEE)stylEr
2004-12-22 17:57
2005.03.06
Twebbrowser


3-1107441308
Prohodil Mimo
2005-02-03 17:35
2005.03.06
Как конвертнуть базу на IB6x в кодировке Win1251 в Win1257


1-1108558742
Gost
2005-02-16 15:59
2005.03.06
Как засунуть номер месяца в String из DateTimePicker?


14-1108447485
Тульский
2005-02-15 09:04
2005.03.06
Свертка итогов и регистр материалов (Знатокам 1С)




   Наверх