Removendo vírgulas extras no CSV sem outra origem de dados

1

Temos um grande banco de dados com endereços de clientes que foi exportado de um banco de dados SQL para CSV. No caso de uma empresa ter uma vírgula em seu nome, isso (previsivelmente) deixa o banco de dados inteiro fora de controle.

Infelizmente, há muitos exemplos disso (e vírgulas na segunda linha de endereço) que todo o CSV (~ 100k linhas) é uma grande bagunça. A correção óbvia é exportar os dados novamente em um formato diferente, sem dependência de vírgula, mas o acesso a esse banco de dados SQL é mais ou menos impossível no momento ... Eu tentei algumas ferramentas e pensei sobre como combinar as coisas para corrigir isso , mas achei que pedir não poderia doer. Obrigado!

    
por 分かりますか 14.06.2010 / 16:45

4 respostas

1

Na minha experiência, tentando corrigir isso a partir de seus dados atuais, você terá o tempo que quiser e não haverá garantia de que seu resultado seja idêntico aos dados iniciais. Pode ser mais fácil esperar até que o banco de dados esteja disponível novamente.

O problema básico é que a conversão para um formato CSV simples não é bijetiva - simplesmente não há mapeamento direto do arquivo CSV para os dados originais. Você pode tentar reduzir esse problema usando algumas heurísticas, mas precisará de uma certa quantidade de scripts ou programação. Também depende da plataforma e das ferramentas disponíveis e, por último, das suas habilidades.

Você pode ter alguns registros, em que nenhum valor de campo tem uma vírgula incorporada. Extraia estes primeiro, mesmo que haja poucos, é um ponto de partida.

Pode ser que você encontre uma heurística para distinguir pelo menos algumas das vírgulas "incorporadas" pelo campo que separa as vírgulas.

Você pode tentar identificar valores de dados de colunas de características, por exemplo, endereço de e-mail, número de telefone, etc. Trabalhando a partir daí, você pode reduzir o número de colunas que precisam de uma inspeção mais cuidadosa.

Continuar passo a passo de maneira a permitir que você transforme seus dados em um formato mais adequado, por exemplo, usando guias como separadores de campo.

Você também deve pensar em extrair apenas algumas colunas e um valor de chave exclusivo (número de registro?) na primeira etapa e, posteriormente, corresponder às diferentes partes.

Anote, documente, mantenha um registro do que você está fazendo. Caso contrário, você vai piorar as coisas em vez de melhorar.

Boa sorte!

    
por 14.06.2010 / 17:15
3

Como programador, minha abordagem seria criar um aplicativo pequeno que analise o arquivo linha por linha e verifique o número de vírgulas que estão na linha (você deve, presumo, saber quantas linhas corretas terão )

Se corresponder ao valor esperado, envie para um novo arquivo com guias substituindo vírgulas.

Se não corresponder, exiba a linha com uma opção para excluir quais vírgulas devem ser convertidas em guias e saída com base nessa seleção.

Isso deve fornecer um arquivo separado por tabulações com vírgulas em alguns campos de endereço.

    
por 14.06.2010 / 16:51
1

A primeira opção é apenas esperar até que você tenha acesso ao banco de dados novamente.

Caso isso não seja prático, o Excel é seu amigo CSV (se você não for um programador)

Aqui está um método do Excel que usei:

  1. Importe o CSV para o Excel para que as linhas do seu arquivo com o número correto de vírgulas acabem no número correto de células na linha do Excel. ou seja, digamos que você tenha sete campos com sete vírgulas corretamente posicionadas que serão analisadas pelo Excel em sete células com as configurações de importação de CSV corretas.

  2. Agora pegue sua folha de excel e vá para a linha superior e uma célula à direita da última célula de uma linha correta. ou seja, se você tem 7 campos, eles vão de "A" a "G". Vá para a coluna "H"

  3. No Mac, pressione Comando + seta para baixo; Em um PC, Ctr + seta para baixo. Isso irá ignorar todos os espaços em branco e parar na primeira célula com conteúdo. Corrigir manualmente a linha e passar para a próxima.

  4. Se você tiver linhas com poucos campos (vírgulas), você pode encontrá-las indo para a primeira célula à esquerda da última célula correta da célula. ou seja, se você tiver uma linha correta abrangendo A - G, vá para a coluna F e repita a etapa 3.

Com 100.000 linhas, isso só é possível se uma alta porcentagem de suas linhas estiver correta, mas você ficará surpreso com a rapidez com que pode reparar o arquivo dessa maneira. Agora você pode usar o Excel para salvar o arquivo em uma forma correta de CSV.

Boa sorte ...

    
por 14.06.2010 / 19:01
0

Não há uma solução óbvia para este problema, porque se os campos que contiverem vírgulas não forem marcados de alguma maneira especial (e você não mencionou isso) é basicamente impossível para um programa de computador determinar se uma vírgula está no endereço ou não é. Você ainda pode usar algumas heurísticas (como "se você tiver espaço antes da vírgula, provavelmente no endereço") para as linhas com vírgulas extras, mas elas são heurísticas, e elas serão perdidas. (A heurística 'espaço' é boa para começar de qualquer maneira).

Só posso ajudar escrevendo um script de shell que irá procurar linhas erradas e oferecer para editá-las. Se você precisar de algo assim, poste uma nota.

    
por 14.06.2010 / 17:05

Tags