Convertir vmsg en csv

Convertir VMSG en CSV

Extraire les enregistrements SMS des sauvegardes VMSG dans des fichiers CSV compatibles avec les tableurs et interrogeables.

Créer des fichiers CSV en ligne

Nous ne savons pas encore lire les fichiers VMSG, cette conversion n’est donc pas proposée. Si vous pouvez exporter votre travail dans l’un de ces formats ou d’autres, nous en ferons un CSV :

Comment convertir vmsg en fichier csv

Un ancien utilitaire de sauvegarde de téléphone ou de messagerie peut exporter les enregistrements SMS au format .vmsg, tandis que les tableurs, les bases de données et les outils de reporting nécessitent généralement le format .csv. La conversion transforme les enregistrements de messages en lignes qui peuvent être recherchées, filtrées, modifiées ou importées.

Qu’est-ce que le format VMSG ?

VMSG, également appelé vMessage, est un format textuel utilisé par les anciens téléphones mobiles, les logiciels de gestion de téléphone et les utilitaires de sauvegarde des SMS. Un fichier contient généralement des sections BEGIN:VMSG, BEGIN:VENV et BEGIN:VBODY, avec des propriétés telles que TEL, DTSTART, SUBJECT, BODY, X-IRMC-BODY, X-IRMC-TYPE et X-IRMC-BOX.

VMSG est lisible en texte brut, mais ses enregistrements imbriqués et ses propriétés spécifiques à certains fournisseurs ne sont pas automatiquement affichés sous forme de lignes et de colonnes. Certains fichiers stockent le numéro de téléphone dans une section VCARD environnante plutôt qu’à l’intérieur du corps du message.

Qu’est-ce que le format CSV ?

CSV représente les données tabulaires sous forme de lignes et de champs. Excel, LibreOffice Calc, Google Sheets, les outils d’importation de bases de données et la plupart des bibliothèques de script le prennent en charge. Une exportation de messages utilise généralement des colonnes telles que date, phone, type, folder, subject et body.

CSV est utile pour trier par date, filtrer les messages entrants et sortants, rechercher du texte dans les messages, importer des enregistrements dans un autre système et créer une archive textuelle compacte. Il ne conserve pas la syntaxe VMSG, les pièces jointes, les états de remise ou les métadonnées spécifiques à certains fournisseurs, sauf si ces valeurs sont explicitement exportées dans des colonnes supplémentaires.

Convertir le fichier avec un script local

Il n’existe pas d’implémentation universelle de la norme VMSG : les fabricants de téléphones et les programmes de sauvegarde utilisent des noms de propriétés et des encodages différents. Un petit analyseur Python local est généralement plus sûr que l’envoi de messages privés vers un site web de conversion générique.

Installez Python 3, enregistrez le code suivant sous le nom vmsg_to_csv.py et placez-le à côté du fichier source :

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

Exécutez python vmsg_to_csv.py messages.vmsg messages.csv. Sur les systèmes qui utilisent la commande python3, exécutez python3 vmsg_to_csv.py messages.vmsg messages.csv. Ouvrez le résultat dans Calc ou Excel : la marque d’ordre des octets UTF-8 aide les logiciels de tableur à détecter les caractères non ASCII.

Avant la conversion, ouvrez une copie du fichier VMSG dans un éditeur de texte et vérifiez ses noms de propriétés réels. Le script reconnaît les alias courants, notamment BODY, X-IRMC-BODY, TEXT et MESSAGE. Si les messages utilisent un autre nom, ajoutez-le à la liste du corps dans le script. Si le fichier utilise un jeu de caractères autre que UTF-8, modifiez l’encodage d’entrée et testez les caractères accentués avant de traiter l’intégralité de la sauvegarde.

Autres options de conversion

Un utilitaire dédié tel que vmsg2csv peut fonctionner pour une variante spécifique de sauvegarde de téléphone, mais vérifiez d’abord sa source, les propriétés prises en charge et sa sortie avec une petite copie. La disponibilité et la compatibilité des anciens utilitaires varient, et nombre d’entre eux ne décodent pas correctement le texte quoted-printable, les lignes repliées ou les champs spécifiques aux fournisseurs.

LibreOffice Calc et Excel peuvent ouvrir les fichiers CSV, mais ce ne sont pas des analyseurs VMSG fiables. L’importation d’un fichier VMSG via File → Open ne fonctionne qu’une fois les enregistrements normalisés en lignes délimitées.

Les convertisseurs en ligne génériques indiquent rarement VMSG comme format d’entrée pris en charge et peuvent mal interpréter sa structure imbriquée. N’utilisez un service en ligne que s’il prend explicitement VMSG en charge, explique sa politique de conservation et de suppression, utilise HTTPS et n’exige pas un accès inutile à un compte. N’envoyez pas de sauvegardes SMS contenant des messages privés, des numéros de téléphone ou des codes d’authentification, sauf si le risque pour la confidentialité est acceptable.

Vérifier les données converties

Comparez plusieurs lignes du fichier CSV avec la source, notamment les messages contenant des virgules, des sauts de ligne, des guillemets, des caractères non ASCII et des corps vides. Le writer CSV de Python place correctement entre guillemets les virgules et les sauts de ligne intégrés, mais un programme de téléphonie peut stocker le contenu multiligne ou quoted-printable dans un format spécifique au fournisseur qui nécessite un décodage supplémentaire.

Conservez le fichier VMSG original. CSV est un format d’échange aplati et peut omettre les pièces jointes, l’état de lecture ou de remise, la structure des contacts, les horodatages avec les informations de fuseau horaire et les champs qui n’ont pas été inclus dans les colonnes de sortie sélectionnées.

Autres conversions de fichiers .vmsg

Conversion vers .csv
depuis d'autres formats

Partager sur les réseaux sociaux :