Convertir vmsg a csv

Convertir VMSG a CSV

Extrae los registros de SMS de las copias de seguridad de VMSG en archivos CSV compatibles con hojas de cálculo y con capacidad de búsqueda.

Cree archivos CSV en línea

Todavía no podemos leer archivos VMSG, así que esta conversión no está disponible. Si puede exportar su trabajo a alguno de estos formatos u otros, lo convertiremos en CSV:

Cómo convertir un archivo vmsg a csv

Una utilidad antigua de copia de seguridad del teléfono o de mensajería puede exportar los registros SMS como .vmsg, mientras que las hojas de cálculo, las bases de datos y las herramientas de generación de informes suelen requerir .csv. La conversión transforma los registros de mensajes en filas que se pueden buscar, filtrar, editar o importar.

Qué es el formato VMSG

VMSG, también llamado vMessage, es un formato basado en texto utilizado por teléfonos móviles antiguos, software de gestión telefónica y utilidades de copia de seguridad de SMS. Un archivo suele contener secciones BEGIN:VMSG, BEGIN:VENV y BEGIN:VBODY, con propiedades como TEL, DTSTART, SUBJECT, BODY, X-IRMC-BODY, X-IRMC-TYPE y X-IRMC-BOX.

VMSG se puede leer como texto sin formato, pero sus registros anidados y sus propiedades específicas del proveedor no se muestran automáticamente como filas y columnas. Algunos archivos almacenan el número de teléfono en una sección VCARD circundante en lugar de dentro del cuerpo del mensaje.

Qué es el formato CSV

CSV representa datos tabulares como filas y campos. Excel, LibreOffice Calc, Google Sheets, las herramientas de importación de bases de datos y la mayoría de las bibliotecas de scripting lo admiten. Una exportación de mensajes suele utilizar columnas como date, phone, type, folder, subject y body.

CSV resulta útil para ordenar por fecha, filtrar mensajes entrantes y salientes, buscar texto en los mensajes, importar registros a otro sistema y crear un archivo de texto compacto. No conserva la sintaxis de VMSG, los archivos adjuntos, los estados de entrega ni los metadatos específicos del proveedor, a menos que esos valores se exporten explícitamente a columnas adicionales.

Convertir el archivo con un script local

No existe una implementación estándar universal de VMSG: los proveedores de teléfonos y los programas de copia de seguridad utilizan diferentes nombres de propiedades y codificaciones. Un pequeño parser local de Python suele ser más seguro que cargar mensajes privados en un sitio web de conversión genérico.

Instala Python 3, guarda lo siguiente como vmsg_to_csv.py y colócalo junto al archivo de origen:

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])

Ejecuta python vmsg_to_csv.py messages.vmsg messages.csv. En los sistemas que utilizan el comando python3, ejecuta python3 vmsg_to_csv.py messages.vmsg messages.csv. Abre el resultado en Calc o Excel; la marca de orden de bytes UTF-8 ayuda al software de hojas de cálculo a detectar caracteres que no pertenecen a ASCII.

Antes de la conversión, abre una copia del archivo VMSG en un editor de texto y comprueba los nombres reales de sus propiedades. El script reconoce alias comunes, incluidos BODY, X-IRMC-BODY, TEXT y MESSAGE. Si los mensajes utilizan otro nombre, añádelo a la lista del cuerpo en el script. Si el archivo utiliza un conjunto de caracteres que no sea UTF-8, cambia la codificación de entrada y prueba los caracteres acentuados antes de procesar toda la copia de seguridad.

Otras opciones de conversión

Una utilidad especializada como vmsg2csv puede funcionar para una variante específica de copia de seguridad del teléfono, pero verifica primero su origen, las propiedades compatibles y el resultado con una copia pequeña. La disponibilidad y compatibilidad de las utilidades antiguas varían, y muchas no decodifican correctamente el texto quoted-printable, las líneas plegadas ni los campos específicos del proveedor.

LibreOffice Calc y Excel pueden abrir CSV, pero no son parsers fiables de VMSG. Importar un archivo VMSG mediante File → Open solo funciona después de que los registros ya se hayan normalizado en filas delimitadas.

Los conversores online genéricos rara vez indican VMSG como entrada compatible y pueden interpretar incorrectamente su estructura anidada. Utiliza un servicio online solo si admite explícitamente VMSG, explica su política de conservación y eliminación, utiliza HTTPS y no requiere acceso innecesario a una cuenta. No cargues copias de seguridad de SMS que contengan mensajes privados, números de teléfono o códigos de autenticación, a menos que el riesgo para la privacidad sea aceptable.

Comprobar los datos convertidos

Compara varias filas del CSV con el origen, incluidos los mensajes que contengan comas, saltos de línea, comillas, caracteres que no pertenezcan a ASCII y cuerpos vacíos. El escritor CSV de Python entrecomilla correctamente las comas y los saltos de línea incrustados, pero un programa de teléfono puede almacenar contenido multilínea o quoted-printable en un formato específico del proveedor que requiera una decodificación adicional.

Conserva el archivo VMSG original. CSV es un formato de intercambio aplanado y puede omitir archivos adjuntos, el estado de lectura o entrega, la estructura de contactos, las marcas de tiempo con información de zona horaria y los campos que no se incluyeron en las columnas de salida seleccionadas.

Otras conversiones de archivos .vmsg

Convertir a .csv
desde otros formatos

Compartir en redes sociales: