Converter tabela HTML grande em CSV

4

Eu tenho alguns dados (detalhes pessoais básicos) que eu preciso exportar de um antigo sistema legado para um sistema mais novo (MySQL DB). São aproximadamente 200 MB divididos em 6 arquivos.

O sistema do qual estou exportando pode exportar todos os dados necessários como um arquivo do Excel. No entanto, o método de criação de um Excel é criar uma tabela HTML e salvá-la com uma extensão .xls . Quando visualizados em um editor de texto, eles ficam assim (exceto 600.000 linhas).

<table>
<tr>

            <td class="tableh">
                <b>Birth&nbsp;Date</b>
            </td>

            <td class="tableh">
                <b>First&nbsp;Name</b>
            </td>

Para minha surpresa, o Excel pode realmente abrir esse documento. Infelizmente, leva cerca de meia hora para fazer isso (por arquivo) e quase o mesmo tempo para salvá-lo em um formato adequado.

Alguém tem alguma sugestão para convertê-los (mais rápido do que os 45-60 minutos do Excel)?

    
por Dracs 10.07.2013 / 09:28

3 respostas

2

É apenas uma única mesa? Tem certeza de que seu sistema não pode exportar como csv? (Parece incomum que possa exportar para o Excel, ou html, mas não csv.)

Eu ficaria tentado a dividir o arquivo (novamente) e depois montá-lo novamente. Eu tentaria substituir (em ST ou outro editor) texto em primeiro lugar que não requer regex. A regex-substituição é provavelmente muito mais lenta que a substituição padrão. Eu usaria o padrão de substituição, tanto quanto possível, mesmo usando-o apenas para reduzir a quantidade de substituições de expressão regular que preciso fazer. Eu experimentaria um pouco para descobrir quanto tempo o processo inteiro levaria.

Como alternativa, posso tentar converter o arquivo para o formato XML, adicionando tags no início e, novamente, substituindo um pouco. Então pule o Excel completamente e eu achei isso para o MySQL:

LOAD XML LOCAL INFILE '/pathtofile/file.xml' 
INTO TABLE my_tablename(personal_number, firstname, ...);

para importar XML. "LOAD XML INFILE está disponível no MySQL 5.2"

Você pode esperar para ver se alguém pode contribuir. Boa sorte.

    
por 11.07.2013 / 01:32
2

Uma solução não-excel também é adequada? Se sim, qual é a velocidade de download e download?

Este serviço online fez um bom trabalho no meu teste rápido.
Dependendo da sua conexão à Internet, pode ser mais rápido que o Excel.

Arquivo de entrada

<table>
<tr>
            <td class="tableh">
                <b>Birth&nbsp;Date</b>
            </td>
            <td class="tableh">
                <b>First&nbsp;Name</b>
            </td>
</table>
</tr>

Arquivo de saída

Birth Date, First Name
  • Você pode escolher entre diferentes delimitadores (vírgula, ponto e vírgula, barra vertical, tabulação)

É claro que você precisa se perguntar se esses detalhes pessoais podem ser enviados para um serviço online ou não. Eu não posso te dizer isso.

    
por 11.07.2013 / 02:29
0

Desculpe, não tenho código para compartilhar, mas talvez sua melhor estratégia seja cortar a parte do processo no Excel e ir direto para o texto delimitado por vírgulas.

Duas ideias:

  1. Transforme o arquivo html em um arquivo xml adequado (só precisará de algumas tags de cabeçalho e uma tag wrapper geral), crie uma folha de estilo xslt (deve ser muito simples) e execute o arquivo xml através de um processador xslt como xsltproc .

  2. Se você estiver no Linux / Unix, considere escrever um script usando um editor de fluxo como awk para remover as tags e gerar os campos.

Em ambos os casos, a lógica seria algo como:

  • se você encontrar um <th> , imprima uma nova linha
  • se você encontrar um par <td> </td> , envie seu conteúdo entre aspas

Existe um ótimo fórum xslt no SO, que vale postar lá para amostras de código.

    
por 25.09.2013 / 17:04