MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração


Participe do fórum, é rápido e fácil

MaximoAccess

Caro Usuário, antes de postar pela primeira vez, leia as regras do fórum.

https://www.maximoaccess.com/t48-regras-do-forum

Obrigado

Administração

MaximoAccess

Gostaria de reagir a esta mensagem? Crie uma conta em poucos cliques ou inicie sessão para continuar.

Dicas Ms Access, Exemplos Ms Access, Codigos VBA Ms Access, SQL Ms Access


2 participantes

    [Resolvido]Expressões regulares - regexp

    avatar
    Fernando Lucas
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 20
    Registrado : 12/09/2017

    [Resolvido]Expressões regulares - regexp Empty [Resolvido]Expressões regulares - regexp

    Mensagem  Fernando Lucas 10/5/2024, 21:04

    Boa tarde pessoal,
    Nas strings abaixo em letras maiúsculas e números são os valores dos meus campos.
    Tentei remover caracters \n e \t, mas não funcionou com a função abaixo.
    O que devo alterar no .Pattern?
    E como posso pegar nas strings os campos?

    Function KillChar(strIn As String) As String
     Dim objRegex As Object
     Set objRegex = CreateObject("vbscript.regexp")
         With objRegex
             .Pattern = "\n\t"
             .IgnoreCase = False
             .Global = True
             KillChar = .Replace(strIn, vbNullString)
         End With
    End Function

    strIn = ”n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tNÚMERO \n\t\n\t\t\n\t\n\t\n\n\ /FORMATO\n\t\n\t\t\n\t\n\t\n\n\t\t\n\t\n\t\t\n\t\n\t\tUNIDADE DE ORIGEM\n\t\n\t\t\t\n\t\n\t\tDATA\n\t\n\t\t\n\t\n\t\n\n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\  t\t\t\t\t\t”

    strIn = "\n        \n            \n                \n                \n           \n\t\t\n\t\n\t\t\n\t\n\t\tNÚMERO \n\t\n\t\t\t\n\t\n\t\tINTERESSADO(S)\n\t\n\t\t\n\n\t\t\n\t\n\t\tAOS CUIDADOS DE\n\t\n\t\t\t\n\t\n\t\tUNIDADE DE ORIGEM\n\t\n\t\t\n\t\n\t\n\n\n\t\n\t\tDATA\n\t\n\t\t\n\t\n\t\n\n            \n                \n                    FÍSICO\n                \n            \n            \n        \n        \n\t\t\t\n\t\t\n            \n    "  Obs:  Está ultima com 5 ou mais espaços entre \n.....\n........

    Obrigado,
    Fernando Lucas


    Última edição por Fernando Lucas em 17/5/2024, 15:38, editado 1 vez(es)
    Marcelo David
    Marcelo David
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3899
    Registrado : 21/04/2011

    [Resolvido]Expressões regulares - regexp Empty Re: [Resolvido]Expressões regulares - regexp

    Mensagem  Marcelo David 15/5/2024, 13:32

    Vendo o seu código, e se entendi direito, não vejo razão para usar regex, uma vez que, nessa função parece que apenas está removendo \n\t.

    O replace do vba pode fazer isso de forma muito simples.
    Por exemplo, para remover os \n e \t da string:

    strIn = ”n\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\tNÚMERO \n\t\n\t\t\n\t\n\t\n\n\ /FORMATO\n\t\n\t\t\n\t\n\t\n\n\t\t\n\t\n\t\t\n\t\n\t\tUNIDADE DE ORIGEM\n\t\n\t\t\t\n\t\n\t\tDATA\n\t\n\t\t\n\t\n\t\n\n\t\t\t\t\t\t\t\t\t \n\t\t\t\t\t\t\t\t\n\t\t\t\t\t\t\t\n\t\t\t\ t\t\t\t\t\t”

    faria assim:

    'Removo \n
    strIn = Replace(strIn,"\n","")

    'removo \t
    strIn = Replace(strIn,"\t","")


    ou

    strIn = Replace(strIn, vbCrLf, "")


    .................................................................................
    Aprenda como criar formulário desacoplado.
    Conheça meu canal no Youtube e se inscreva.
    [Resolvido]Expressões regulares - regexp Marcel11

    Fernando Lucas gosta desta mensagem

    avatar
    Fernando Lucas
    Novato
    Novato


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 20
    Registrado : 12/09/2017

    [Resolvido]Expressões regulares - regexp Empty Re: [Resolvido]Expressões regulares - regexp

    Mensagem  Fernando Lucas 16/5/2024, 03:34

    Olá pessoal,
    Marcelo David obrigado pela resposta, mas  as \n e \t  também apresentam muitos espaços em brancos entre as barras, e remove-las juntará todos os campos/valores. Tenho que individualizar os campos/valores que estão em letras maiúsculas e números. Consegui resolver o problema com a função abaixo:

    Sub Fields_in_Str()
       Dim colFields As New Collection
       Dim s As String
       '  um exemplo  pequeno e abreviado
       s = "\n \t\  n\tNÚMERO \n \t\tESPÉCIE/FORMATO\n\t\t    \t\t00300.12345/2020-99\n\t\t  \t "
       Set colFields = GetTabFields(s)
       Stop       '   apenas para inspecionar a variável colFields
    End Sub

    Function GetTabFields(ByVal str As String) As Collection
       ' str = "\n \t\  n\tNÚMERO \n \t\tESPÉCIE/FORMATO\n\t\t    \t\t01300.12345/2020-99\n\t\t  \t "
       ' Extrai \n e \t e adiciona os Fields/valores numa Collection.
      ' Referenciar: Microsoft Vbscript Regular Expressions 5.5
       ' by Fernando Lucas, 2024/maio
       
       Dim RegEx As New VBScript_RegExp_55.RegExp
       Dim vMatch As VBScript_RegExp_55.MatchCollection
       Dim colField As New Collection
       Dim FieldStart  As String, FieldEnd$
       Dim vMatchFirst As Long
       
       ' Na 1a. parte do Loop é removido de str os primeiros \n e \t antes de  A..Z ou 0..9
       ' Na 2a. parte é removido de FieldStart a 1a. \ ficando o nome do campo/valor
       Do While 1 = 1      ' O Do finaliza na linha do If
           FieldStart = "":  FieldEnd = ""
           
           '  Procura em str a posição do 1o. padrão "[A-Z]|[0-9]"   onde | significa ou
           RegEx.Pattern = "[A-Z]|[0-9]"  '
           RegEx.Global = False    ' False: retorna a 1a, possição de caracter  A..Z ou 0..9
           RegEx.IgnoreCase = False
           Set vMatch = RegEx.Execute(str)
           If vMatch.Count = 0 Then Exit Do    ' Fim do Loop qdo não houver mais "[A-Z]|[0-9]"
           vMatchFirst = vMatch.Item(0).FirstIndex  ' posição do 1o.   A..Z ou 0..9
           FieldStart = VBA.Right(str, VBA.Len(str) - vMatchFirst)  ' remove de str \n e \t
           Set vMatch = Nothing
           
           '  Procura em FieldStart a posição do 1o. padrão "\\"   ou seja procura \
           RegEx.Pattern = "\\"    ' Retorna a 1a. posição da \
           RegEx.Global = False
           RegEx.IgnoreCase = False
           Set vMatch = RegEx.Execute(FieldStart)
           '  str fica menor a cada Loop
           str = VBA.Right(FieldStart, VBA.Len(FieldStart) - vMatch.Item(0).FirstIndex)
           FieldEnd = VBA.Left(FieldStart, vMatch.Item(0).FirstIndex)   ' o nome do campo

           colField.Add FieldEnd   ' Add o nome do campo numa Collection
       Loop
       Set GetTabFields = colField
       Set vMatch = Nothing
       Set colField = Nothing
       Set vMatch = Nothing
    End Function

    Obrigado,
    Fernando Lucas
    Marcelo David
    Marcelo David
    Moderador
    Moderador


    Respeito às regras : Respeito às Regras 100%

    Sexo : Masculino
    Localização : Brasil
    Mensagens : 3899
    Registrado : 21/04/2011

    [Resolvido]Expressões regulares - regexp Empty Re: [Resolvido]Expressões regulares - regexp

    Mensagem  Marcelo David 27/5/2024, 13:07

    Olá, bom dia! Excelente que resolveu! Grato pelo retorno, o fórum agradece!


    .................................................................................
    Aprenda como criar formulário desacoplado.
    Conheça meu canal no Youtube e se inscreva.
    [Resolvido]Expressões regulares - regexp Marcel11

    Fernando Lucas gosta desta mensagem


    Conteúdo patrocinado


    [Resolvido]Expressões regulares - regexp Empty Re: [Resolvido]Expressões regulares - regexp

    Mensagem  Conteúdo patrocinado


      Data/hora atual: 21/7/2024, 11:15