Trabalhando Strings no Visual Basic


O que é uma string ?  R: Uma string pode ser concebida como uma cadeia de caracteres , ou seja , uma sequência de caracteres. Ficou ainda um pouco vago não é mesmo ?

Ora , vamos tentar novamente : Para o Visual Basic , uma string é um texto que pode ser composto de uma sequência de nenhum ou mais de um caracter . Assim, uma string pode ser composta por caracteres alfabéticos , caracteres numéricos  e/ou símbolos.

Exemplos de strings :  "José Carlos"  ,  "28 de julho" ,  "16/08/2001" ,   "11111"  ,  "  " ,   " $51a" ,   "abc*=" , ""

Cada caractere de uma string é representado por um valor numérico chamado  - código de caractere , ou , código ASCII . A faixa de valores vai de 0 a 255 . 

Para gerar a lista completa no seu Visual Basic , o código é :

Dim i as integer

For i=0 to 255

   debug.Print i ; " -  " ; CHR$(i)

Next

Geralmente declaramos uma string usando a instrução Dim e o tipo de dados string. Ex: Dim variavel As String

Nota: Podemos usar o simbolo  ($)  no final do nome da variável para indicar que se trata de uma variável string. Por exemplo : Dim variavel$   , indica que declaramos uma variável do tipo String.

As strings podem ser armazenadas em variáveis declaradas como do tipo String ou Variant e podem também ser representadas por valores constantes.

Exemplo : 

 Dim nome as string

 nome = "José Carlos Macoratti"

 Debug.Print  nome

irá imprimir : José Carlos Macoratti

Para colocar aspas (") dentro de uma string devemos usar aspas duas vezes ou aspas duplas, assim :

 Dim nome as string

 nome = "Aqui temos ""ASPAS"" "

 Debug.Print  nome

irá imprimir : Aqui temos "ASPAS"

Podemos usar também o código do caractere para (") =>  chr(34)  , assim ficamos com:

 Dim nome as string

 nome = "Aqui temos " & chr$(34) &  "ASPAS" & chr$(34) & "

 Debug.Print  nome

irá imprimir : Aqui temos "ASPAS"

Nota: Vamos lembrar que a utilização da declaração Option Explicit no ínicio do seu código irá forçar você a declarar todas a variáveis . Isto pode lhe poupar de um  monte de problemas. Veja: se  você não usar Option Explicit e  atribuir o nome Jose a variável sem usar aspas para indicar que Jose é uma string e não uma variável  , ou seja : Nome = Jose    o Visual Basic não irá reclamar e seu projeto irá compilar sem problemas... (sem problemas ????)

As strings podem ser declaradas como sendo de dois tipos:

1-) Strings de comprimento variável (variable-length) - Podem conter strings de 0 a 2 bilhões de caracteres e são declaradas assim:

Dim string_variavel As String

Elas sempre contém a string a elas atribuídas que podem ser de tamanhos variados , assim podemos ter:

string_variavel = " Isto é um teste de declaração de string variavel"   ou

string_variavel = " Teste "

2-) Strings de comprimento Fixo (fixed-Length) - Podem conter somente a quantidade de caracteres com que foram declaradas. São declaradas atribuindo a quantidade de caracteres que poderão conter:

Dim string_fixa As string * 20

string_fixa = "Aqui cabem somente 20 caracteres"    

a variavel string_fixa irá conter :  "Aqui cabem somente 2" 

Comparando Strings

As strings podem ser comparadas usando os seguintes operadores de comparação :

< Menor que
<= Menor que ou igual a
= igual a
<> diferente de ou não igual a
>= Maior que ou igual a
Maior que

Ao comparar duas strings o VB compara caractere por caractere em cada string. Assim comparando :

"123ABC"  com  "123ACB"  o VB compara os dois primeiros caracteres (1) depois os dois (2) , os dois (3) até que os caracteres sejam diferentes , então a comparação é interrompida. No caso o como o código do caractere B é (66) é menor que o código do caractere C (67) então o VB considera a string "123ABC"  é menor que a string "123ACB"

Nota: a é maior de A pois o código de a é (97) enquanto que o código de A é (65)

Se a comparação ocorrer entre duas strings de tamanho diferentes:  "ABC" com "ABCD"  a comparação é encerrada quando não houver mais caracteres na primeira string para comparar com os caracteres da segunda string. Neste caso a string mais pequena - "ABC" -  é considerada menor que a string mais longa - "ABCD" ou seja :  "ABC"  <  "ABCD"

Usando o operador LIKE para comparar Strings

O Visual Basic 6 apresenta o operador LIKE que é utilizado para comparar duas strings. Sua sintaxe é:

resultado = string Like   modelo

Parte Descrição
resultado variavel numérica
string string de comparação
modelo uma expressão string conforme o a convenção definida.

Os valores adotados para comparação no modelo são:

Caracteres no Modelo

Valor comparativo na string
? Qualquer caractere simples
* Nenhum ou mais de um caractere
# Qualquer digito simples ( "0", ..."9")
[charlist] Qualquer caractere simples da lista de caracteres
[!charlist] Qualquer caractere simples da não presentes lista de caracteres

Vejamos alguns exemplos :

Comparação

Resultado

"ABCD"   Like   "AB?D" True
"ABC3D"  Like  "ABC#D" True
"ABCD"   Like  "A???D" False
"A$1D"   Like  "A*D" True

Dim Compara
Compara = "aBBBa" Like "a*a"                      ' Retorna True.
Compara = "F" Like "[A-Z]"                          ' Retorna True.
Compara = "F" Like "[!A-Z]"                         ' Retorna False.
Compara = "a2a" Like "a#a"                         ' Retorna True.
Compara = "aM5b" Like "a[L-P]#[!c-e]"          ' Retorna True.
Compara = "BAT123khg" Like "B?T*"              ' Retorna True.
Compara = "CAT123khg" Like "B?T*"              ' Retorna False.

Manipulando Strings

Vamos agora trabalhar com strings usando as funções para tratamento de strings que o VB nos oferece. Vale lembrar que a versão VB6 trás muitas funções novas para tratar strings. Essas funções facilitam em muito  o nosso trabalho e podem substituir muitas linhas de código antes necessárias para obter o mesmo efeito.

I-)  As funções strings básicas

Primeiro vamos mostrar as funções para tratamento de strings presentes em todas as versões do VB:

a-) Str(numero)  -   Converte um valor numérica em uma string do tipo Variant

Dim String
String = Str(459)                 ' Resultado  =>    " 459".
String = Str(-459.65)           ' Resultado  = >   "-459.65".
String = Str(459.001)         
  ' Resultado = >   " 459.001".

b-) Len(string )         -  Determina o número de caracteres de uma string. (o comprimento da string)

Dim sNome As String

Dim tamanho As Long

sNome = "Visual Basic"

tamanho = Len(sNome)          'Resultado =>  a variavel tamanho será igual a 12

c-) Chr$(codigo_do_caractere)     -    Retorna uma string caractere associado ao código indicado

Dim Caractere
Caractere = Chr(65)   ' Resultado ==>     A
Caractere = Chr(97)   ' Resultado ==>     a
Caractere = Chr(62)   ' Resultado ==>     >
Caractere = Chr(37)  
' Resultado ==>     %

Para exibir os códigos de todos os caracteres de 0 a 255 use o código a seguir:

Dim i as integer

For i=0 to 255

      Debug.Print i; chr$(i)

Next

d-) Asc(string)           -   Retorna um valor inteiro que representa o código do primeiro Caractere da String.

Dim MyNumber
Numero = Asc("A")             ' Resultado =>  65.
Numero = Asc("a")             ' Resultado =>  97.
Numero = Asc("Amor")      
  ' Resultado =>  65.

e-) Space(numero)  -  Retorna uma string do tipo Variant contendo a quantidade de espaços indicados por número.

 String = "Visual" & Space(10) & "Basic"          - insere dez espaços entre as strings  Visual e Basic 

f-) String$(Tamanho,String)  -   Cria uma string com comprimento igual a Tamanho e que contém o primeiro caráter indicado em String. Se String tiver mais de um caractere somente o primeiro será usado.

String$(9,"VISUAL")                                        'retorna   =>     "VVVVVVVVV"

g-) Trim$(string)     -    Remove os espaços existentes de ambos os lados de uma string.

Dim MVar
MVar = Trim("  visual basic   ")     	 'MVar irá conter    ==>      "visual basic".

h-) RTrim$(string)    -  Remove os espaços a direita da string.

Dim MVar
MVar = RTrim("  visual basic   ")     	 'MVar irá conter    ==>     "   visual basic".

i-) LTrim$(string)    -  Remove os espaços a esquerda da string.

Dim MVar
MVar = LTrim("  visual basic   ")     	 'MVar irá conter    ==>     "visual basic   ".

j-) LCase$(string)    -     Converte todos os caracteres alfanuméricos na string para minúsculas.

 LCase("SÃO JOSE DO RIO PRETO , 12-08-2001")     retorna ==>	são jose do rio preto , 12-08-2001 

l-) UCase$(string)    -     Converte todos os caracteres alfanuméricos na string para maiúsculas.

 LCase("São Jose Do Rio Preto , 12-08-2001")     retorna ==>     SÃO JOSE DO RIO PRETO , 12-08-2001 

II)  Substrings 

Substrings são pedaços de uma string. Veremos a seguir as principais funções para o tratamento de substrings.

a-) Left$(String, Tamanho)   -    Retorna uma string contendo o número de caracteres definido em Tamanho do lado esquerdo da String.

Left$("Programar com Visual Basic é fácil", 9)            Retorna   ==> "Programar"  

Left$("Programar com Visual Basic é fácil", 50)           Retorna   ==> "Programar com Visual Basic é fácil"  

Left$("Programar com Visual Basic é fácil", 0)            Retorna   ==>   ""    

b-) Right$(String, Tamanho)   -    Retorna uma string contendo o número de caracteres definido em Tamanho do lado direito da String.

Right$("Programar com Visual Basic é fácil", 8)            Retorna   ==> " é fácil"  

Right$("Programar com Visual Basic é fácil", 50)           Retorna   ==> "Programar com Visual Basic é fácil"

Right$("Programar com Visual Basic é fácil", 0)            Retorna   ==>   ""    

c-) Mid$(String, Inicio,[Tamanho])   -    Como função retorna uma substring da String dada , começando no primeiro caractere de Inicio  com comprimento definido em Tamanho. Se Tamanho for omitido ou for menor  que o comprimento da string todos os caracteres a partir de inicio será retornado.

Texto = " Usando strings no Visual Basic"

Mid$(texto,7,7)                  retorna =>    "strings"

Mid$(texto,7)                     retorna =>    "strings no Visual Basic"

 Podemos usar MID$ para substituir uma  parte da string dada, a partir do primeiro caractere da posição Inicio.

Texto ="Isto é um teste"

Mid$(texto,6)="123456"                 retorna =>  "Isto 123456"

Mid$(texto,6,3)="123456"              retorna =>   "isto 123m teste"

Mid$(texto,8)="12"                         retorna =>  "Isto é 12 teste"

d-) Instr$(Inicio,string1,string2,[Compare])   -    Determina a posição da primeira ocorrência de uma substring contida em uma string. Retorna uma variant do tipo Long.

Os argumentos são :

Argumentos Descrição
Inicio Expressão numérica que define a posição de inicio para iniciar a procura. Se omitida a procura começa no inicio da string.
string1 A expressão string a ser procurada.
string2 A expressão string a procurar.
compare Determina o tipo de comparação que será feito entre as strings.

Os possíveis tipos de comparação são:
Constante Valor Descrição
vbUseCompareOption -1 A comparação será feita como definida em  Option Compare 
vbBinaryCompare 0 Comparação binária
vbTextCompare 1 Comparação textual
vbDatabaseCompare 2 Comparação com base no seu banco de dados . Só para o Microsoft Access 

Exemplos:
Dim String1, String2, posicao

String1 = "Visual Basic 6 A linguagem"    ' string onde será feita a procura

String2 = "a"                    ' Substring a procurar

' comparação textual iniciando na posicao 4
posicao = InStr(4, String1, String2, 1)                'Retorna =>  5.

' Comparação binaria iniciando na posicao 1
posicao = InStr(1, String1, "A", 0)                      'Retorna =>  16

' Comparação binária
posicao = InStr(String1, "A")                             'Returns =>  16

posicao = InStr(1, String1, "W")                        ' Returns 0 (não achou)

Nota: Observe que :

Se A função InStr irá retornar:
string1 for igual a "" 0
string1 for Null Null
string2 for igual a "" Inicio
string2 for igual a Null Null
string2 não for encontrada 0
string2 for encontrada em string1  A posição onde ela for encontrada
start > string2 0

d-) Split(string,delimiter,count,compare_mode] VB6 - Divide uma string e retorna as substrings como um array de strings.
Parte Descrição
string ( expressão ) Uma expressão string . Se a expressão for uma string vazia ("") o array retornado estar vazio, ou seja , sem elementos.
delimiter Um string caractere usado para identificar Indica onde a divisão vai ocorrer. Se for omitida o caracter de espaço (" " ) será usado. Se for utilizado uma string vazia ("") então um array contendo a expressão completa será retornada.
count O número máximo de substrings a ser retornada. -1 indica que todas as substrings serão retornadas.
compare Valor numérico indicando o tipo de comparação a usar quando da avaliação das substrings . Veja os valores abaixo:

Os valores de compare podem ser:
Constante Valor Descrição
vbUseCompareOption –1 Realiza uma comparação com base na definição de Option Compare.
vbBinaryCompare 0 Realiza uma comparação binária.
vbTextCompare 1 Realiza uma comparação textual.
vbDatabaseCompare 2 Somente para arquivos Microsoft Access.

Exemplo 1- Vamos dividir a string "Visual Basic 6" (você pode testar com diversas expressões)

1:Private Sub Command1_Click()
2:Dim i As Integer
3:Dim vetor As Variant

4:
vetor = Split(Text1.Text)

5:List1.Clear
6:For i = LBound(vetor) To UBound(vetor)
7:      List1.AddItem i & vbTab & vetor(i)
7:Next

8:End Sub

Inicie um projeto no VB e no formulário padrão insira uma caixa de texto , uma caixa de listagem e um botão de comando   Abaixo veja o resultado do código ao lado:

O código para dividir strings e gerar vetores de substrings O resultado gera 3 substrings: vetor(0), vetor(1) e vetor(2) 

No exemplo acima usamos a função LBound para determinar o valor do menor índice de um array e UBound para determinar o maior valor para um índice de um array.  Assim acessaremos todos os índices do array.

Se substituirmos o código da linha 4 por :   vetor = Split(Text1.Text,,2) iremos obter duas substrings: 
0   Visual 

1   Basic 6

Exemplo 2-  Vamos acrescentar o caracter "s" para indicar onde a divisão irá ocorrer

Private Sub Command1_Click()
Dim i As Integer
Dim vetor As Variant

vetor = Split(Text1.Text,"s")

List1.Clear
For i = LBound(vetor) To UBound(vetor)
      List1.AddItem i & vbTab & vetor(i)
Next

End Sub

Inicie um projeto no VB e no formulário padrão insira uma caixa de texto , uma caixa de listagem e um botão de comando   Abaixo veja o resultado do código ao lado:

Note que a divisão teve inicio no caracter "s" , retornando 4 substrings contidas nos vetores com indices 0,1,2 e 3.

Podemos aproveitar esta última característica para 'contar' quantas vezes uma substring aparece numa string. Por exemplo , suponha que você queira saber quantas vezes a substring "do" aparece na frase : "Avaliação do impacto do treinamento no trabalho do programador". Usando Split fica fácil ...:

1:Dim frase As string

2:Dim vetor As Variant

 

3:frase = "Avaliação do impacto do treinamento no trabalho do programador"

4:
vetor = Split(frase,"do")

5:MsgBox " 'do' aparece na texto ' " & frase & " ' " & UBound(vetor) & " vezes."

 Você ter como resposta que 'do' aparece 4 vezes no texto, pois 'do' também esta contida na palavra 'programador'. Para contar somente as ocorrências da preposição 'do'  altere a linha 4 do código para: 4:vetor = Split(frase," do ")  e você obterá como resposta 3 vezes.

e-)Join(List,Delimter) VB6  - Concatena as substrings contidas em List em uma única string.

-List  - deve ser um array de uma dimensão contendo as strings a serem concatenadas

-Delimiter - Caractere string usado para separar as substrings na string retornada. Se omitida o caractere (" ") sera usado. Se for uma string vazia ("") , todos os itens da lista serão concatenados sem delimitadores.

Exemplo:

Dim array(1 to 4) As String

Dim sJunta As String

array(1)="Visual"

array(2)="Basic"

array(3)="6"

array(4)="A linguagem"

 

sJunta= Join(array," ")                         retorna => "Visual Basic 6 A linguagem"

sJunta= Join(array)                              retorna => "Visual Basic 6 A linguagem" 

sJunta= Join(array,",")                         retorna => "Visual,Basic,6,A,linguagem"

sJunta= Join(array,":")                         retorna => "Visual:Basic:6:A:linguagem"

sJunta= Join(array,"")                          retorna => "VisualBasic6Alinguagem"

g-) Filter(Varlist, Value, Include, Compare) VB6 - Procura em VarList pelas strings definidas em Value e retorna o resultado em um array.   

- VarList - contém um array de strings que a função irá filtrar

- Value - é a string de caracteres usada para identificar qual elemento será incluída no novo array.

- Include - Um valor boleano que indica se os elementos contendo o valor coincidente será incluido ou não na string . O valor padrão é True.

- Compare indica como a busca por Value será efetuada.

Os valores de compare podem ser:
Constante Valor Descrição
vbUseCompareOption –1 Realiza uma comparação com base na definição de Option Compare.
vbBinaryCompare 0 Realiza uma comparação binária.
vbTextCompare 1 Realiza uma comparação textual.
vbDatabaseCompare 2 Somente para arquivos Microsoft Access.

Exemplo:

Dim vetor(1 to 3) As String

Dim i as integer

Dim sFiltra As Variant

 

vetor(1)="Visual"

vetor(2)="Basic 6"

vetor(3)="a linguagem"

 

sFiltra=Filter(vetor,"a")

 

List1.Clear
For i = LBound(vetor) To UBound(vetor)
      List1.AddItem i & vbTab & vetor(i)
Next

 

h-) StrReverse(string) - VB6 -  Retorna uma string com os caracteres invertidos.

Exemplo:   StrReverse ("Visual Basic")         retorna =>  cisaB lausiV

Se string for um for um valor Null ocorrerá um erro.

h-) Replace(string, strProcura, strSubstPor, Inicio, Contador, Compare) 

  1. String - é a string a ser alterada
  2. strProcura - é a string a procurar em <String>
  3. strSubstPor - é a string usada para substituir a string <strProcura>
  4. Inicio - indica o incio da busca por <strProcura>. (Opcional)
  5. Contador - indica o número máximo de vezes que <strProcura> será substituida
  6. Compare - o modo de comparação a ser efetuada.

Esta função é muito útil para substituir ocorrências em uma string por um determinado valor. Vamos mostrar um exemplo onde vamos substituir todas a vírgulas(,) em uma frase por ponto e vírgula(;):

Exemplo:

Frase = " Geralmente ,  temos um problema ,  quando a temperatura aumenta "

NovaFrase = Replace(Frase, "," , ";" )   retorna =>  "Geralmente ;  temos um problema ;  quando a temperatura" 

Nota: Observe que você deverá estar atento ás seguintes ocorrências:

Se A função strReverse irá retornar:
string for igual a "" ""
string for Null Um erro
strProcura for igual a "" Uma cópia de string
strSubstPor for igual a "" Uma cópia de string com todas as ocorrências de StrProcura removidas
Inicio > string Uma string vazia ""
contador for igual a zero  Uma cópia de string

Em outro artigo estarei dando continuidade ao assunto , por hoje é só.

Eu sei é só VB, mas eu gosto...


José Carlos Macoratti