Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.06;
Скачать: 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 вся ветка

Текущий архив: 2005.03.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.044 c
1-1109009885
mariya_mezenceva
2005-02-21 21:18
2005.03.06
fastreport3 (экспорт в excel)


4-1106198609
!Cyber
2005-01-20 08:23
2005.03.06
Как программно закрыть окно чужого диалога


1-1108304762
Сергей Ю.
2005-02-13 17:26
2005.03.06
Как можно разделить функции одной программы между несколькими?


1-1108965198
xOn
2005-02-21 08:53
2005.03.06
Процедуры и функции Delphi


1-1108804381
saNat
2005-02-19 12:13
2005.03.06
Копирование изображения