Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft Access Новый топик    Ответить
 Замена символа в строке  [new]
Морда
Guest
Как в строке заменить отдельный символ на другой, зная его положение в исходной строке?
Например в строке 1011112 заменить пятый по порядку символ на 2.

Replace ("1011112", "1", "2", 5, 1) выдаёт 212, а надо 1011212
19 дек 16, 22:09    [20024797]     Ответить | Цитировать Сообщить модератору
 Re: Замена символа в строке  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19119
new_str = left(old_str, position - 1) & new_char & mid(old_str, position+1)
19 дек 16, 22:14    [20024816]     Ответить | Цитировать Сообщить модератору
 Re: Замена символа в строке  [new]
Морда
Guest
Mid или всё таки Right
19 дек 16, 22:18    [20024841]     Ответить | Цитировать Сообщить модератору
 Re: Замена символа в строке  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19119
Вот самому не стыдно такие вопросы задавать?
19 дек 16, 22:28    [20024869]     Ответить | Цитировать Сообщить модератору
 Re: Замена символа в строке  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4295
Морда,
Sub Test_Mid()
'Replace ("1011112", "1", "2", 5, 1) выдаёт 212, а надо 1011212
Dim strText As String
strText = "1011112"
Mid(strText, 5, 1) = "2"
Debug.Print strText
End Sub

1011212
20 дек 16, 04:14    [20025298]     Ответить | Цитировать Сообщить модератору
 Re: Замена символа в строке  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4295
Akina
Вот самому не стыдно такие вопросы задавать?
не все помнят/знают, что Mid работает, как в одну сторону, так и в другую... Только знаки меняет 1 к 1...
20 дек 16, 04:17    [20025299]     Ответить | Цитировать Сообщить модератору
 Re: Замена символа в строке  [new]
Akina
Member

Откуда: Зеленоград, Москва, Россия
Сообщений: 19119
Панург
Mid работает, как в одну сторону, так и в другую
??? в смысле, что есть оператор, а есть функция? но тут-то совсем иной случай - просто у функции третий параметр (длина) необязательный, и при его отсутствии режется кусок до конца строки.
20 дек 16, 07:45    [20025354]     Ответить | Цитировать Сообщить модератору
 Re: Замена символа в строке  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4295
Akina
в смысле, что есть оператор, а есть функция?
уже не стал усложнять - оператор/функция... :)

Akina
???

Akina
но тут-то совсем иной случай
Так-то да. Это я немного не так отинтерпретировал вопрос, каюсь.
20 дек 16, 08:01    [20025367]     Ответить | Цитировать Сообщить модератору
 Re: Замена символа в строке  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 4884
Панург
Морда,
Sub Test_Mid()
'Replace ("1011112", "1", "2", 5, 1) выдаёт 212, а надо 1011212
Dim strText As String
strText = "1011112"
Mid(strText, 5, 1) = "2"
Debug.Print strText
End Sub

1011212

На сайте Микрософт к функции Replace висит заметка

Значение, возвращаемое функцией Replace является строкой, которая начинается с позиции, указанной параметром Start, и завершается в конце строки Expression, с заменой подстрок Find значениями Replace.

Т.е. Если хочешь получить нормальную замену, надо к результату добавить начало исходной строки до позиции Start.
21 дек 16, 10:08    [20030503]     Ответить | Цитировать Сообщить модератору
 Re: Замена символа в строке  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4295
Joss
Если хочешь
неа, нихочу...
21 дек 16, 12:21    [20031336]     Ответить | Цитировать Сообщить модератору
 Re: Замена символа в строке  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 4884
Панург
Joss
Если хочешь
неа, нихочу...
Все претензии к мелкомягким. Скорее всего они когда-то лопухнулись, а потом не стали исправлять ошибку, а объявили её особенностью.

Как говорится: баг переживший три релиза считается фичей.
22 дек 16, 09:45    [20035209]     Ответить | Цитировать Сообщить модератору
 Re: Замена символа в строке  [new]
Панург
Member

Откуда: настоящему индейцу завсегда везде ништяк
Сообщений: 4295
Joss
Все претензии к мелкомягким.
Спасибо конечно. Только зачем мне притензии кому-то предъявлять? Я не задавал вопроса. Как поменять нужный мне символ я знаю (ответил - с помощью оператора Mid). Мне ничего не нужно. И советов тоже.

Падоброму...
22 дек 16, 10:31    [20035362]     Ответить | Цитировать Сообщить модератору
 Re: Замена символа в строке  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 4884
Панург
... Мне ничего не нужно. И советов тоже.
Падоброму...
Ну вдруг кому-то понадобится
'---------------------------------------------------------------------------------------
' Procedure : fnReplace
' Author    : Sonnih
' Date      : 26.12.2016
' Purpose   : Ïîäìåíà ñòàíäàðòíîé ôóíêöèè Replace
'---------------------------------------------------------------------------------------
'
Public Function fnReplace(ByVal Expression, ByVal Find, ByVal Replacement, _
        Optional ByVal Start As Integer = 1, Optional ByVal Count As Integer = -1, _
        Optional ByVal Compare As VbCompareMethod = vbBinaryCompare) As String

   On Error GoTo fnReplace_Error

    If IsNull(Expression) Then
        fnReplace = ""
        Exit Function
    End If

    If IsNull(Find) Then
        fnReplace = Expression
        Exit Function
    End If
    
    If IsNull(Replacement) Then
        fnReplace = Expression
        Exit Function
    End If

    If Len(Expression) < Start Then
        fnReplace = Expression
        Exit Function
    End If
   
    If Count < -1 Then
        fnReplace = Expression
        Exit Function
    End If
   
    If Start <= 1 Then
        fnReplace = Replace(Expression, Find, Replacement, Start, Count, CompareMethod)
        Exit Function
    End If
    
    If Start > 1 Then
        fnReplace = Left(Expression, Start - 1) & Replace(Expression, Find, Replacement, Start, Count, CompareMethod)
        Exit Function
    End If
      
   On Error GoTo 0
   Exit Function

fnReplace_Error:

    MsgBox "Error " & Err.Number & " (" & Err.Description & ") in procedure fnReplace"

End Function
26 дек 16, 10:46    [20047884]     Ответить | Цитировать Сообщить модератору
 Re: Замена символа в строке  [new]
Морда
Guest
Спасибо. Завязывайте. Падоброму... Картинка с другого сайта.
26 дек 16, 19:30    [20050330]     Ответить | Цитировать Сообщить модератору
 Re: Замена символа в строке  [new]
Lieutenant Pigeon
Member [заблокирован]

Откуда: [msg=19512455]
Сообщений: 185
Морда
Как в строке заменить отдельный символ на другой, зная его положение в исходной строке?
Например в строке 1011112 заменить пятый по порядку символ на 2.

Replace ("1011112", "1", "2", 5, 1) выдаёт 212, а надо 1011212

Сугубо по ТЗ и в нативном юникоде:
Sub sb_Test()
Dim tStr() As Byte
    tStr() = "1011112"
    Debug.Print tStr()
    tStr((5 - 1) * 2) = 50
    Debug.Print tStr()
End Sub


Расширение функционала через F1: StrConv

Это вместо того, чтобы строки ворочать...
.
27 дек 16, 20:29    [20054146]     Ответить | Цитировать Сообщить модератору
 Re: Замена символа в строке  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 4884
Была когда-то у меня задача.
На входе текстовый файл, на выходе то же надо получить текстовый файл.
Строки переменной длины. В строке разные данные разделённые знаком ";" Надо было найти определённое значение в определённой позиции и заменить на другое. Например проверить значение между 5 и 6 разделителями и если оно соответствует заданному, то заменить.
Справился с заданием при помощи функций Left, Right, Mid и InStr
28 дек 16, 08:41    [20055138]     Ответить | Цитировать Сообщить модератору
 Re: Замена символа в строке  [new]
__Michelle
Member

Откуда:
Сообщений: 3083
Joss
.... Например проверить значение между 5 и 6 разделителями и если оно соответствует заданному, то заменить.
Справился с заданием при помощи функций Left, Right, Mid и InStr
А почему не Split?
28 дек 16, 10:30    [20055410]     Ответить | Цитировать Сообщить модератору
 Re: Замена символа в строке  [new]
Joss
Member

Откуда: г. Минск
Сообщений: 4884
Да, со Split было бы проще, но Split появился вроде бы только в VB6
28 дек 16, 15:43    [20057188]     Ответить | Цитировать Сообщить модератору
 Re: Замена символа в строке  [new]
Lieutenant Pigeon
Member [заблокирован]

Откуда: [msg=19512455]
Сообщений: 185
Joss
Была когда-то у меня задача ...
Да, со Split было бы проще, но Split появился вроде бы только в VB6

В VB5 не быдо, этог так, но...
... кагбэ принято сразу оговариваться, есль речь идет о "при царе Горохе"...
.
28 дек 16, 22:02    [20058287]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft Access Ответить