Converter vmsg para csv

Converter VMSG para CSV

Extraia registros de SMS de backups VMSG para arquivos CSV pesquisáveis e compatíveis com planilhas.

Crie ficheiros CSV online

Ainda não conseguimos ler ficheiros VMSG, por isso esta conversão não está disponível. Se conseguir exportar o seu trabalho para um destes formatos ou outros, transformamo-lo em CSV:

Como converter vmsg para csv arquivo

Um backup antigo de telefone ou utilitário de mensagens pode exportar registros de SMS como .vmsg, enquanto planilhas, bancos de dados e ferramentas de geração de relatórios normalmente exigem .csv. A conversão transforma os registros de mensagens em linhas que podem ser pesquisadas, filtradas, editadas ou importadas.

O que é o formato VMSG

VMSG, também chamado de vMessage, é um formato baseado em texto usado por telefones celulares antigos, software de gerenciamento de telefones e utilitários de backup de SMS. Um arquivo geralmente contém as seções BEGIN:VMSG, BEGIN:VENV e BEGIN:VBODY, com propriedades como TEL, DTSTART, SUBJECT, BODY, X-IRMC-BODY, X-IRMC-TYPE e X-IRMC-BOX.

VMSG pode ser lido como texto simples, mas seus registros aninhados e propriedades específicas do fornecedor não são exibidos automaticamente como linhas e colunas. Alguns arquivos armazenam o número de telefone em uma seção VCARD ao redor, em vez de dentro do corpo da mensagem.

O que é o formato CSV

CSV representa dados tabulares como linhas e campos. Excel, LibreOffice Calc, Google Sheets, ferramentas de importação de bancos de dados e a maioria das bibliotecas de scripting oferecem suporte a ele. Uma exportação de mensagens normalmente usa colunas como date, phone, type, folder, subject e body.

CSV é útil para ordenar por data, filtrar mensagens recebidas e enviadas, pesquisar o texto das mensagens, importar registros para outro sistema e criar um arquivo de texto compacto. Ele não preserva a sintaxe VMSG, anexos, estados de entrega ou metadados específicos do fornecedor, a menos que esses valores sejam exportados explicitamente para colunas adicionais.

Converter o arquivo com um script local

Não existe uma implementação universal do padrão VMSG: fornecedores de telefones e programas de backup usam nomes de propriedades e codificações diferentes. Um pequeno parser local em Python geralmente é mais seguro do que enviar mensagens privadas para um site genérico de conversão.

Instale Python 3, salve o conteúdo a seguir como vmsg_to_csv.py e coloque-o ao lado do arquivo de origem:

import csv
import sys
import quopri


def decode(value, params):
    if any(p.upper() == 'ENCODING=QUOTED-PRINTABLE' for p in params):
        value = quopri.decodestring(value).decode('utf-8', errors='replace')
    slash = chr(92)
    return (value.replace(slash + 'n', '\n')
                 .replace(slash + 'N', '\n')
                 .replace(slash + ',', ',')
                 .replace(slash + ';', ';')
                 .replace(slash + slash, slash))


def convert(source, destination):
    rows = []
    record = None
    contact_tel = ''
    in_vcard = False

    with open(source, encoding='utf-8-sig', errors='replace') as handle:
        lines = []
        for raw in handle:
            line = raw.rstrip('\r\n')
            if line.startswith((' ', '\t')) and lines:
                lines[-1] += line[1:]
            else:
                lines.append(line)

    for line in lines:
        upper = line.upper()
        if upper == 'BEGIN:VCARD':
            in_vcard = True
            continue
        if upper == 'END:VCARD':
            in_vcard = False
            continue
        if upper == 'BEGIN:VBODY':
            record = {}
            continue
        if upper == 'END:VBODY':
            if record is not None:
                record['_CONTACT_TEL'] = contact_tel
                rows.append(record)
            record = None
            continue
        if ':' not in line:
            continue
        left, value = line.split(':', 1)
        parts = left.split(';')
        name = parts[0].upper()
        value = decode(value, parts[1:])
        if in_vcard and name == 'TEL':
            contact_tel = value
        elif record is not None:
            record[name] = value

    def first(row, names):
        for name in names:
            if row.get(name, ''):
                return row[name]
        return ''

    columns = ['date', 'phone', 'type', 'folder', 'subject', 'body']
    with open(destination, 'w', newline='', encoding='utf-8-sig') as handle:
        writer = csv.DictWriter(handle, fieldnames=columns)
        writer.writeheader()
        for row in rows:
            writer.writerow({
                'date': first(row, ['DTSTART', 'DATE']),
                'phone': first(row, ['TEL', 'X-IRMC-RECIPIENT', 'TO', 'FROM', '_CONTACT_TEL']),
                'type': first(row, ['X-IRMC-TYPE', 'TYPE']),
                'folder': first(row, ['X-IRMC-BOX', 'FOLDER']),
                'subject': first(row, ['SUBJECT']),
                'body': first(row, ['BODY', 'X-IRMC-BODY', 'TEXT', 'MESSAGE'])
            })


if len(sys.argv) != 3:
    raise SystemExit('Usage: python vmsg_to_csv.py input.vmsg output.csv')
convert(sys.argv[1], sys.argv[2])

Execute python vmsg_to_csv.py messages.vmsg messages.csv. Em sistemas que usam o comando python3, execute python3 vmsg_to_csv.py messages.vmsg messages.csv. Abra o resultado no Calc ou Excel; a marca de ordem de bytes UTF-8 ajuda o software de planilhas a detectar caracteres não ASCII.

Antes da conversão, abra uma cópia do arquivo VMSG em um editor de texto e verifique os nomes reais de suas propriedades. O script reconhece aliases comuns, incluindo BODY, X-IRMC-BODY, TEXT e MESSAGE. Se as mensagens usarem outro nome, adicione-o à lista de corpos no script. Se o arquivo usar um conjunto de caracteres diferente de UTF-8, altere a codificação de entrada e teste os caracteres acentuados antes de processar todo o backup.

Outras opções de conversão

Um utilitário dedicado, como vmsg2csv, pode funcionar para uma variante específica de backup de telefone, mas verifique sua origem, as propriedades compatíveis e a saída usando primeiro uma cópia pequena. A disponibilidade e a compatibilidade de utilitários antigos variam, e muitos não decodificam corretamente texto quoted-printable, linhas dobradas ou campos específicos do fornecedor.

LibreOffice Calc e Excel podem abrir CSV, mas não são parsers VMSG confiáveis. Importar um arquivo VMSG por meio de File → Open só funciona depois que os registros já tiverem sido normalizados em linhas delimitadas.

Conversores online genéricos raramente listam VMSG como entrada compatível e podem interpretar incorretamente sua estrutura aninhada. Use um serviço online somente se ele oferecer suporte explícito a VMSG, explicar sua política de retenção e exclusão, usar HTTPS e não exigir acesso desnecessário à conta. Não envie backups de SMS contendo mensagens privadas, números de telefone ou códigos de autenticação, a menos que o risco à privacidade seja aceitável.

Verificar os dados convertidos

Compare várias linhas do CSV com a origem, incluindo mensagens que contenham vírgulas, quebras de linha, aspas, caracteres não ASCII e corpos vazios. O writer de CSV do Python coloca corretamente entre aspas vírgulas e quebras de linha incorporadas, mas um programa de telefone pode armazenar conteúdo multilinha ou quoted-printable em um formato específico do fornecedor que exija decodificação adicional.

Guarde o arquivo VMSG original. CSV é um formato de intercâmbio achatado e pode omitir anexos, status de leitura ou entrega, estrutura de contatos, registros de data e hora com informações de fuso horário e campos que não foram incluídos nas colunas de saída selecionadas.

Outras conversões de arquivo .vmsg

Converter para .csv
de outros formatos

Compartilhar nas redes sociais: