Вниз
Скачать: 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.024 c
14-1108373663
Ega23
2005-02-14 12:34
2005.03.06
Я плакал!!!


1-1108752260
allrussia
2005-02-18 21:44
2005.03.06
Как отобразить Form1 поверх Direct3D приложения


1-1108742674
ПроНыРа
2005-02-18 19:04
2005.03.06
удаление Item-a из ListView


3-1107334339
Rostislav Rotaru
2005-02-02 11:52
2005.03.06
Помогите написать сложную для меня процедуру или функцию


6-1104411289
Sveta_cc
2004-12-30 15:54
2005.03.06
Server Socket ClientSocket




   Наверх