Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2009, 13:48   #1
peq
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 230
По умолчанию работа со стринг

уже битый час не могу разбить текстовую строчку(string) по её элементам(char?)

интересует
1. посмотреть и присвоить iй элемент в строчке хм.. какой-нибудь переменной навроде char в с
2. вырезать iй(можно просто отрезать с конца) элемент из строчки
3. добавить iй(можно также добавить в конец) элемент в строчку

если кто-нибудь может помочь, буду благодарен
peq вне форума Ответить с цитированием
Старый 26.08.2009, 15:29   #2
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Код:
Sub MidFun()
  s = "1234567890"
  i = 7
  Debug.Print ""
  Debug.Print "исходная строка          =" & s
  Debug.Print "работаем с символом i    =" & i
  Debug.Print "i-й символ строки        =" & Mid(s, i, 1)
  Debug.Print "строка без i-го символа  =" & Mid(s, 1, i - 1) & Mid(s, i + 1, Len(s))
  Debug.Print "# добавлен в i-ю позицию =" & Mid(s, 1, i - 1) & "#" & Mid(s, i, Len(s))
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 26.08.2009, 15:58   #3
peq
Форумчанин
 
Регистрация: 01.03.2009
Сообщений: 230
По умолчанию

супер. большое спасибо
peq вне форума Ответить с цитированием
Старый 26.08.2009, 23:09   #4
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

Замена символа в i-й позиции на "#"
Код:
mid(s,i,1)="#"
Aent вне форума Ответить с цитированием
Старый 27.08.2009, 09:57   #5
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

Цитата:
Код:
mid(s,i,1)="#"
и это действительно работает! я потрясён.
Весь мой многолетний опыт программирования говорил о том, что функции могут быть только в правой части оператора присваивания! оказывается, хитроумный VB опровергает эту аксиому...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.08.2009, 10:41   #6
SAS888
Старожил
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,180
По умолчанию

Serge_Bliznykov
Зря Вы так. Код от Aent абсолютно справедлив. Попробуйте выполнить, например, такой макрос:
Код:
Sub test()
    Dim s As String, i As Integer
    i = 3: s = "abcdefgh"
    Mid(s, i, 1) = "#"
    MsgBox s
End Sub
Чем шире угол зрения, тем он тупее.
SAS888 вне форума Ответить с цитированием
Старый 27.08.2009, 10:42   #7
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Serge_Bliznykov, я то же перепроверил и испытал аналогичные чувства, постеснялся только об этом написать. Век живи...

Aent, спасибо.

SAS888, я видел уже это, наверное, в твоих ответах, но вылетело из головы как было сделано. Теперь, надеюсь, останется. И тебе спасибо!
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете

Последний раз редактировалось IgorGO; 27.08.2009 в 10:49.
IgorGO вне форума Ответить с цитированием
Старый 27.08.2009, 13:16   #8
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

SAS888, Вы, вероятно, неправильно поняли моё сообщение... Дело в том, что я не говорил, что код неверен, несправедлив или не работает. Первым же делом я сразу его проверил. Восхитился. И результаты своего потрясения и восхищения выразил многоуважаемому Aent!
Serge_Bliznykov вне форума Ответить с цитированием
Старый 27.08.2009, 13:46   #9
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

1) Serge_Bliznykov, В данном контексте Mid оператор (statement) а не функция левой части оператора присваивания.
2) Последние в VB тем не менее фактически присутствуют
Код:
Public Property Let SS(s As String, sl As String, sr As String, sv As String)
    Dim i As Long, j As Long
    i = InStr(s, sl)
    If i > 0 Then
        j = InStr(i + 1, s, sr)
        If j > 0 Then
            s = Left(s, i) & sv & Mid(s, j)
        End If
    End If
End Property
Public Property Get SS(s As String, sl As String, sr As String) As String
    Dim i As Long, j As Long
    i = InStr(s, sl)
    If i > 0 Then
        j = InStr(i + 1, s, sr)
    End If
    If j > 0 Then
        SS = Mid(s, i + 1, j - i - 1)
    End If
End Property
Public Sub test()
  Dim s As String
  s = "!!!![000000]!!!!!"
  SS(s, "[", "]") = SS("aaa[123]bbb", "[", "]")
  Debug.Print s ' будет напечатано !!!![123]!!!!!
End Sub

Последний раз редактировалось Aent; 27.08.2009 в 14:55.
Aent вне форума Ответить с цитированием
Старый 27.08.2009, 14:24   #10
Aent
Форумчанин
 
Аватар для Aent
 
Регистрация: 17.07.2009
Сообщений: 519
По умолчанию

VB (VBA) имеет ещё несколько полезных (но не очень популярных) механизмов работы со строками. Позволю себе вкратце их напомнить
1) Функции
StrReverse - реверсирование строки
Пример: StrReverse("12345") = "54321"
InStrRev - поиск позиции подстроки в реверсированной строке
Пример: InstrRev("1_2_3_4","_") = 6
Обратите внимание в HELP на 3-й параметр он соответствует 1-му для
InStr

Так же при форматировании текста бывают полезны строковые функции
FormatCurency
FormatDateTime
FormatNumber
FormatPercent
MonthName
WeekDayName

Описания присутствуют в HELP по VBA

2) Операторы
LSET строка1 = строка2 и RSET строка1 = строка2
Пример:
Код:
Dim  MyStr as string*10
MyStr = "0123456789"
LSet MyStr ="+++"    'MyStr = "+++       "
Rset MyStr ="+++"    'MyStr = "       +++"
Надо заметить, что почему то в реализацию VBA диалекта Basic не попали некоторые популярные (и апробированные в других диалектах) строковые функции VERIFY, REMOVE, PARSECOUNT и т.д.
Cм например Power Basic http://www.powerbasic.com/support/he...y_function.htm
Разумеется, их при желании можно реализовать самому, но ....
И конечно, очень не хватает механизма аналогичного ключевому слову ANY в PB

Последний раз редактировалось Aent; 27.08.2009 в 14:51.
Aent вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Задача. Работа с псевдослучайными последовательностями (ПСП). Работа с цветом. 0101 Помощь студентам 3 17.12.2009 23:57
Помогите со стринг гридом student_63 Помощь студентам 6 03.12.2007 17:41
Стринг UnD)eaD)Snake Общие вопросы Delphi 5 08.10.2007 08:29