5 строк кода

Как писать приложения на MS Access

2 полезные строковые функции

2 комментария

В своей работе некоторые самописные функции для работы со строками стали уже не заменимыми. Они располагаются в модуле mc_str.

1. CM_ConcLabel() — объединить название и значение.
2. CM_ConcStr() — объединить набор строк через разделитель.

Пример использования CM_ConcLabel():

Dim stAddress as String

'-- Если корпус не указан, то он не отобразится
stAddress = CM_ConcLabel("ул. ", stUl) & " " CM_ConcLabel("дом ", stDom) & " " & CM_ConcLabel("корп. ", stKorpus)

Пример использования CM_ConcStr():

Dim stFilter As String
Dim frmPl as Form

'-- ...

If Nz(frmPl("P_T_KLIENT_FLT")) <> "" Then
	stFilter = "T_KLIENT Like '*" & frmPl("P_T_KLIENT_FLT") & "*'"
End If

If Nz(frmPl("P_MES_FLT"), 0) <> 0 Then
	stFilter = CM_ConcStr(" AND ", stFilter, "MES = " & frmPl("P_MES_FLT"))
End If

If Nz(frmPl("P_GOD_FLT"), 0) <> 0 Then
	stFilter = CM_ConcStr(" AND ", stFilter, "GOD = " & frmPl("P_GOD_FLT"))
End If

Тест функций:

Public Function CM_ConcLabel(ByVal stLabel As String _
                            , ByVal vVal As Variant _
                            , Optional ByVal bIsReverse As Boolean = False) As String
' склеить наименование и значение
' вход:
'   bIsReverse - поменять наименование и значение местами
On Error GoTo Err_

    If IsNull(vVal) Or vVal = "" Or vVal = 0 Then
        Exit Function
    End If

    If Not bIsReverse Then
        CM_ConcLabel = stLabel & CStr(vVal)
    Else
        CM_ConcLabel = CStr(vVal) & stLabel
    End If

Exit_:
    Exit Function
Err_:
    Err.Raise Date, Time, "CM_ConcLabel()->" & Err.Source, Err.Number, Err.Description
    Resume Exit_
End Function
Public Function CM_ConcStr(ByVal stRazd As String, ParamArray stMasVals() As Variant) As String
' <Скоков С.А.> создана: 2004-07-08

' Выполняет конкатенацию (склеивание) строк  (может принимать Null)
' вход: stVals - массив значений, передаются как параметы через запятую, подробнее см. в справке про ParamArray
'       stRazd - разделитель
' выход: склиеная строка
' пример: CM_ConcStr(" разделитель ", "строка1", "строка2", "строка3", "строка4")

On Error GoTo Err_
    Dim iIdx As Integer
    Dim iMaxIdx As Integer
    Dim stRet As String
    
    iMaxIdx = UBound(stMasVals)
    ' есть ли чего в масиве
    If iMaxIdx = -1 Then
        Exit Function
    End If
    
    For iIdx = LBound(stMasVals) To iMaxIdx
        ' -- если пусто, то не вклеиваем
        If Nz(stMasVals(iIdx)) <> "" Then
            ' -- если что-то в выходной строке есть, то нужно вклеить разделитель
            If stRet <> "" Then
                stRet = stRet & stRazd
            End If
            
            stRet = stRet & stMasVals(iIdx)
        End If
    Next iIdx
    
    CM_ConcStr = stRet
Exit_:
    Exit Function
Err_:
    CM_ConcStr = "#Error"
    Resume Exit_
    
End Function

Written by Сергей Скоков

Август 8th, 2012 at 12:09 пп

2 комментария to '2 полезные строковые функции'

Subscribe to comments with RSS or TrackBack to '2 полезные строковые функции'.

  1. А вместо CM_ConcLabel такая конструкция в коде не проще? iif (isnull(stUl),»»,»корп.» & stUl)

    Роман

    22 Окт 12 at 09:42

  2. Мне не нравится употреблять в выражении stUl два раза. Часто при копипасте можно ошибиться.
    P.S. stUl может быть равен не только Null

    Сергей Скоков

    23 Окт 12 at 23:32

Leave a Reply