1. Este site usa cookies. Ao continuar a usar este site está a concordar com o nosso uso de cookies. Saber Mais.

[VB6] Remover linhas de string q n começam por TAB ou "<"

Discussão em 'Programação' iniciada por Armadillo, 25 de Setembro de 2007. (Respostas: 3; Visualizações: 2170)

  1. Armadillo

    Armadillo Folding Member

    Boas.
    Tenho um grande problema.
    A minha app(VB6) exporta dados para um formato do genero de XML.
    O que acontece eh q estes ficheiros contêm alguns erros de exportaçao:

    Código:
    <ACCOUNT>
        <ID>15315
        <DATA_IN>2003-01-31 
        <NAME>JS Uni
        <CAS>0
        <FAX>229
        <FACT>Zi I - Sector VIII
        <CIFACT>MUNDE
        <STAFACT>Port
        <CP>4471
    QZAIA
    MFLA
        <WWW>
        <TICKER>15315
        <CPENTRG>447
    MAI1
    MAW
        <ENTRG>6
        <USER>
    </ACCOUNT>
    
    Como podem ver, existem algumas linhas que n estao no formato <nomeCampo>Valor.

    No entretanto, ja tentei resolver com este script, q tenta detectar este tipo de linha mas n funca la mto bem.

    Código:
    Public Function DelAlienLines(Reg As String) As String
    
    Dim ExisteQuebra As Long, existequebra2 As Long, PosStr As String, Tmnh As Long, ExisteTab As Long, ExisteHead As Long
    Dim tmpstr1 As String, tmpstr2 As String
    PosStr = 1
    
    
    Tmnh = Len(Reg)
    
    
    While PosStr < Tmnh
        ExisteQuebra = InStr(PosStr, Reg, Chr(13))          'procura quebra
        If ExisteQuebra > 0 Then                            'Se esxistir
            ExisteTab = InStr(PosStr, vbTab, Reg)           'procura TAB
            If ExisteTab > 0 Then                           'Se existir
                ExisteHead = InStr(PosStr + 1, "<", Reg)    'Procura '<'
                If ExisteHead > 0 Then                      'se existir
                    existequebra2 = InStr(ExisteHead + 1, Reg, Chr(13))       'procura quebra seguinte
                    'remove o q esta entre existequebra e existequebra2
                    tmpstr1 = Right(Reg, ExisteQuebra)
                    tmpstr2 = Left(Reg, existequebra2)
                    DelAlienLines = tmpstr1 & tmpstr2
                End If
            End If
        End If
    
    PosStr = PosStr + 1
    Wend
    
    End Function
    
    Pah, preciso mesmo de ajuda q isto aqui ta f#%&«.

    Obrigado
     
  2. Armadillo

    Armadillo Folding Member

  3. mOrSa

    mOrSa Power Member

    Isto funcionou... por isso! Espero que saibas trabalhar com arraylists e que estejas a usar .net :)

    Código:
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    
          Dim str As String = ""
          Dim str2 As String = ""
          Dim array_inicial, array_final As New ArrayList
          Dim i, j, tamanho As Integer
    
          ' eu colei o texto numa rith text box :) - so pra testar
          str = RichTextBox1.Text
          'tamanho string
          tamanho = str.Length - 1
          ' percorre a string
          For i = 0 To tamanho
             ' converte para o cod ASCII
             j = Convert.ToInt16(str.Chars(i))
             ' se for um \n a string anterior passa para o array
             If j = 10 Then
                array_inicial.Add(str2)
                str2 = ""
             ElseIf j = 32 Then
                ' se for um \t não faz nada
             Else
                ' continua a copiar a string
                str2 += str.Chars(i)
             End If
          Next ' remoção de espaços completa
    
          'remover linhas sem < <- 
          i = array_inicial.Count - 1 ' num elementos no arraylist
          For j = 0 To i
             Dim str_test As String
             ' converter os objectos do array inicial em strings
             str_test = CType(array_inicial.Item(j), String)
             'testar - pode ser substituido por str_test.chars(0) = "<"
             If str_test.StartsWith("<") Then
                'adicional o valor da string
                array_final.Add(str_test)
             End If
          Next
          ' os items encontram-se no array_final
    
       End Sub
    Não me dei ao trabalho de optimizar isso! Espero que consiga safar-te :)

    1abraço!
     
  4. mOrSa

    mOrSa Power Member

    Foram uns 10 segundos! :lol:
     

Partilhar esta Página