Konwertuj VMSG na CSV
Wyodrębnij rekordy SMS z kopii zapasowych VMSG do przeszukiwalnych plików CSV kompatybilnych z arkuszami kalkulacyjnymi.
Twórz pliki CSV online
Nie potrafimy jeszcze odczytać plików VMSG, więc tej konwersji nie oferujemy. Jeśli możesz wyeksportować swoją pracę do jednego z tych lub innych formatów, zrobimy z niego CSV:
Jak konwertować vmsg do csv
- Platformy mobilne
- Brak ocen.
Stara kopia zapasowa telefonu lub narzędzie do obsługi wiadomości może eksportować rekordy SMS jako .vmsg, podczas gdy arkusze kalkulacyjne, bazy danych i narzędzia do tworzenia raportów zwykle wymagają formatu .csv. Konwersja przekształca rekordy wiadomości w wiersze, które można przeszukiwać, filtrować, edytować lub importować.
Czym jest format VMSG
VMSG, nazywany również vMessage, to format tekstowy używany przez starsze telefony komórkowe, oprogramowanie do obsługi telefonów oraz narzędzia do tworzenia kopii zapasowych SMS. Plik zwykle zawiera sekcje BEGIN:VMSG, BEGIN:VENV i BEGIN:VBODY z właściwościami takimi jak TEL, DTSTART, SUBJECT, BODY, X-IRMC-BODY, X-IRMC-TYPE i X-IRMC-BOX.
VMSG jest czytelny jako zwykły tekst, ale jego zagnieżdżone rekordy i właściwości zależne od producenta nie są automatycznie wyświetlane jako wiersze i kolumny. Niektóre pliki przechowują numer telefonu w otaczającej sekcji VCARD, a nie wewnątrz treści wiadomości.
Czym jest format CSV
CSV przedstawia dane tabelaryczne w postaci wierszy i pól. Excel, LibreOffice Calc, Google Sheets, narzędzia do importowania baz danych i większość bibliotek skryptowych obsługują ten format. Eksport wiadomości zwykle korzysta z kolumn takich jak date, phone, type, folder, subject i body.
CSV jest przydatny do sortowania według daty, filtrowania wiadomości przychodzących i wychodzących, wyszukiwania tekstu wiadomości, importowania rekordów do innego systemu oraz tworzenia kompaktowego archiwum tekstowego. Nie zachowuje składni VMSG, załączników, stanów dostarczenia ani metadanych zależnych od producenta, chyba że te wartości zostaną jawnie wyeksportowane do dodatkowych kolumn.
Konwersja pliku za pomocą lokalnego skryptu
Nie istnieje uniwersalna implementacja standardu VMSG: producenci telefonów i programy do tworzenia kopii zapasowych używają różnych nazw właściwości i kodowań. Niewielki lokalny parser w języku Python jest zwykle bezpieczniejszy niż przesyłanie prywatnych wiadomości do ogólnej witryny konwertującej.
Zainstaluj Python 3, zapisz poniższy kod jako vmsg_to_csv.py i umieść go obok pliku źródłowego:
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])Uruchom python vmsg_to_csv.py messages.vmsg messages.csv. W systemach, które używają polecenia python3, uruchom python3 vmsg_to_csv.py messages.vmsg messages.csv. Otwórz wynik w Calc lub Excelu; znacznik kolejności bajtów UTF-8 pomaga oprogramowaniu arkusza wykryć znaki inne niż ASCII.
Przed konwersją otwórz kopię pliku VMSG w edytorze tekstu i sprawdź rzeczywiste nazwy jego właściwości. Skrypt rozpoznaje typowe aliasy, w tym BODY, X-IRMC-BODY, TEXT i MESSAGE. Jeśli wiadomości używają innej nazwy, dodaj ją do listy treści w skrypcie. Jeśli plik korzysta ze znaków kodowanych w innym standardzie niż UTF-8, zmień kodowanie wejściowe i przed przetworzeniem całej kopii zapasowej sprawdź znaki diakrytyczne.
Inne opcje konwersji
Dedykowane narzędzie, takie jak vmsg2csv, może działać w przypadku konkretnego wariantu kopii zapasowej telefonu, ale najpierw sprawdź jego źródło, obsługiwane właściwości i wynik na niewielkiej kopii. Dostępność i zgodność starszych narzędzi różnią się, a wiele z nich nie dekoduje poprawnie tekstu w formacie quoted-printable, łamanych wierszy ani pól zależnych od producenta.
LibreOffice Calc i Excel mogą otwierać pliki CSV, ale nie są niezawodnymi parserami VMSG. Importowanie pliku VMSG za pomocą File → Open działa dopiero po uprzednim znormalizowaniu rekordów do rozdzielanych wierszy.
Ogólne konwertery online rzadko wymieniają VMSG jako obsługiwany format wejściowy i mogą błędnie odczytywać jego zagnieżdżoną strukturę. Korzystaj z usługi online tylko wtedy, gdy wyraźnie obsługuje VMSG, wyjaśnia zasady przechowywania i usuwania danych, używa HTTPS oraz nie wymaga niepotrzebnego dostępu do konta. Nie przesyłaj kopii zapasowych SMS zawierających prywatne wiadomości, numery telefonów ani kody uwierzytelniające, chyba że akceptujesz związane z tym ryzyko dla prywatności.
Sprawdzanie przekonwertowanych danych
Porównaj kilka wierszy CSV ze źródłem, w tym wiadomości zawierające przecinki, podziały wiersza, cudzysłowy, znaki inne niż ASCII oraz puste treści. Writer CSV języka Python poprawnie umieszcza przecinki i osadzone podziały wiersza w cudzysłowach, ale program telefonu może przechowywać wielowierszową treść lub zawartość w formacie quoted-printable w sposób zależny od producenta, co wymaga dodatkowego dekodowania.
Zachowaj oryginalny plik VMSG. CSV to spłaszczony format wymiany i może pomijać załączniki, stan odczytania lub dostarczenia, strukturę kontaktów, znaczniki czasu z informacjami o strefie czasowej oraz pola, które nie zostały uwzględnione w wybranych kolumnach wyjściowych.