Excel ou Batch - Tentando automatizar a correção de texto (muitas alterações; um ou mais caracteres cada)

0

Eu tenho muitas linhas de texto. Eu posso colocá-los em um arquivo de texto ou em uma planilha do Excel. Eles precisam de muitas mudanças. Aqui está um exemplo de um antes e depois:

Input:  I'm buying one!  Only $39 .....
Output: I'm buying one - Only USD 39

Em outras palavras, o código HTML foi convertido em um apóstrofo, o ponto de exclamação tornou-se um hífen de espaço, espaços duplicados foram removidos, $ se tornou USD e foram eliminados dots e spaces até que nenhum sobrou.

Eu estou supondo que dois processos diferentes podem ser necessários - primeiro, uma simples substituição de caracteres para todas as ocorrências e um procedimento de looping que continua reduzindo várias instâncias (por exemplo, convertendo dois espaços em um até que não haja mais dois espaços combinações).

Idealmente, eu teria uma lista prontamente editável, como em uma planilha do Excel, com uma célula para o "antes" e uma célula adjacente para o "depois". Ou pelo menos eu idealmente teria isso para a simples substituição da operação.

Eu vi um monte de macros e scripts, em vários posts, mas a maioria deles não está bem no alvo e alguns deles eu não entendo. Alguma sugestão?

    
por Ray Woodcock 25.03.2012 / 15:08

3 respostas

1

Eu geralmente uso o Microsoft Word para coisas como essa. Sua busca e substituição é muito poderosa e eu acho mais fácil do que o Excel para lidar com substituições. Eu também uso um aplicativo de substituição do bloco de notas chamado NoteTab ( link ). Existe uma versão "lite" gratuita. Uma coisa boa sobre o Notetab é que ele permite que você pesquise facilmente em vários arquivos.

    
por 25.03.2012 / 15:46
1

Isso funciona se todo o seu texto for como a amostra que você forneceu. Basta abrir seu arquivo de texto no Excel e adicionar uma nova planilha para criar sua tabela de termos de substituição (com cabeçalhos). Eu configurei para ler a primeira coluna como os termos "antes" e a segunda coluna como os termos "depois". Depois disso, pressione Alt + F11 para abrir o painel do editor do VBA. Insira um novo módulo e cole o código a seguir.

Option Explicit
Sub cleanupText()

Dim allTxt() As Variant, sublist() As Variant
Dim i As Long, j As Long, k As Long, tdots As Integer

'Store data from sheets in arrays.
allTxt = Sheets(1).UsedRange.Value
sublist = Sheets(2).UsedRange.Offset(1, 0).Resize(Sheets(2).UsedRange.Rows.Count - 1, Sheets(2).UsedRange.Columns.Count).Value

For i = 1 To UBound(allTxt, 1)
    For j = 1 To UBound(allTxt, 2)
        'Loop through replacement terms and make replacements to data in array.
        For k = 1 To UBound(sublist, 1)
            allTxt(i, j) = Replace(allTxt(i, j), sublist(k, 1), sublist(k, 2))
        Next k
        allTxt(i, j) = Trim(allTxt(i, j))
        'Remove series of trailing periods.
        If Right(allTxt(i, j), 1) = "." Then
            tdots = 1
        Else
            tdots = 0
        End If
        Do While tdots = 1
            allTxt(i, j) = Left(allTxt(i, j), Len(allTxt(i, j)) - 1)
            If Right(allTxt(i, j), 1) = "." Then
                tdots = 1
            Else
                tdots = 0
            End If
        Loop
        allTxt(i, j) = Trim(allTxt(i, j))
    Next j
Next i
'Print cleaned up results in array onto sheet.
ActiveSheet.UsedRange.Value = allTxt
End Sub

Execute o código e salve seu arquivo como texto.

    
por 26.03.2012 / 16:37
0

link

Este é um ótimo complemento (para o Excel) que fará exatamente o que você deseja. Custa US $ 30 (no momento da escrita), por isso é ótimo se você usá-lo muito de tempos em tempos ou constantemente, mas se este é apenas um caso de uso de uma só vez, então pode não valer a pena. / p>

Funciona selecionando remover / substituir caracteres selecionados pelo usuário, então você pode selecionar substituir, dizer quais caracteres você quer substituir, depois com o que e o que é boom. Ele passa por todas as células selecionadas e as altera. Você pode até adicionar espaços para limpar as coisas.

    
por 25.03.2012 / 21:44