Zum Inhalt springen

Übersicht

Aus VermCAD Hilfe Wiki

Die MWT-Datei (Messwertdatei) ist die vollständige Datengrundlage eines VermCad-Auftrags: eine einzige Textdatei, aus der alle abgeleiteten Informationen (berechnete Koordinaten, Flächen, Protokolle) reproduzierbar sind. Diese Seite beschreibt den Gesamtaufbau der Datei, die Codierungen der ersten Zeile und der Zeilen-Metadaten sowie die lexikalischen Grundregeln (Trennzeichen, Kommentare, Sonderzeichen), die für alle Blöcke und Makros gelten.

Syntaxregel

MWT-Datei   ::= [ProjectID] {GlobaleOption}* {Block}*
Block       ::= KEYWORD [Systemangabe] {',' HeaderInfo}* {Datensatz ';'}* END [';']
Datensatz   ::= beliebige Token bis zum nächsten ';' (darf über mehrere Zeilen gehen)
KEYWORD     ::= Blockname (z. B. AUFTRAG, VORGABEN, MESSUNG, FLAECHE, ...)
Regelelement Bedeutung
ProjectID Unsichtbare Projektkennung am Anfang der ersten Zeile (siehe unten). Darf beim manuellen Erstellen weggelassen werden.
GlobaleOption Compiler-Anweisung mit $-Präfix, nur am Dateianfang vor allen Blöcken erlaubt — siehe Globale Optionen.
Block Textblock, beginnt mit einem reservierten Schlüsselwort und endet mit END. Datenblöcke enthalten Punkte/Messwerte, Anweisungsblöcke (Makros) Berechnungen.
Datensatz Kleinste logische Einheit innerhalb eines Blocks; endet immer mit Semikolon ;. Der Zeilenumbruch ist nur ein Trennzeichen — ein Datensatz darf sich über mehrere Zeilen erstrecken.
END Blockende (wortgrenzengeprüft, Groß-/Kleinschreibung egal); ein Semikolon danach ist optional.

Die Reihenfolge der Makro-Blöcke in der Datei ist für die Berechnung ohne Bedeutung: VermCad analysiert alle Abhängigkeiten selbständig und stellt intern die richtige Berechnungsreihenfolge her.

Erste Zeile: ProjectID

Die erste Zeile der Datei beginnt (vor dem eigentlichen Text) mit dem Steuerzeichen #$1D, gefolgt von einer 62 Zeichen langen Projektkennung. Sie wird im VermCad-Editor nicht angezeigt. Direkt nach der Kennung folgt der normale Text der ersten Zeile (in der Regel das erste Schlüsselwort).

Position Länge Feld Bedeutung
1–8 8 Datum Datum der Ersterzeugung im Format yyyymmdd
9–14 6 BüroID Büro-Kennung, links mit 0 aufgefüllt
15–24 10 Code Zusatzcode (seit 15.10.2015); Zeichen 1 codiert u. a. verfügbare Begleitdateien (z. B. 1 = weder XML noch NAS, 2 = XML ohne NAS, …)
25–62 38 GUID Projekt-GUID inklusive geschweifter Klammern {…}

Beispiel (dekodiert): 201506260000002000000000{C86A825B-…}VORGABEN — Erzeugung 26.06.2015, BüroID 000000, Code 2000000000, GUID, danach beginnt der Text mit VORGABEN.

Alte Dateien besitzen eine 52 Zeichen lange Kennung ohne das Code-Feld; VermCad erkennt beide Varianten an der schließenden }. Beim manuellen Erzeugen einer MWT darf die ProjectID weggelassen werden — VermCad legt beim Speichern eine neue Kennung an.

Binäre Zeilencodierung (Änderungsdatum und Nutzer)

Nach jeder Textzeile speichert VermCad eine binäre Pseudo-Zeile mit Metadaten:

#$0E  <4 Byte Owner (UserID, LONGINT)>  <8 Byte Änderungszeitpunkt (TDateTime, Double)>  CRLF
  • Gesamtlänge der Binärdaten: 12 Bytes; Präfix ist das Steuerzeichen #$0E.
  • Inhalt: die UserID des Programm-Nutzers, der die Zeile zuletzt geändert hat, und der Änderungszeitpunkt; Anzeige im Editor als nnn dd.mm.yyyy hh:mm:ss.
  • Zusätzlich können Zeilen ein Sichtbarkeits-Präfix tragen: #$1E (Zeile sichtbar) bzw. #$1F (Zeile unsichtbar), gespeichert vor der betreffenden Zeile.
  • Die Binärzeilen dürfen weggelassen werden (z. B. beim manuellen oder programmatischen Erzeugen einer MWT); VermCad ergänzt sie beim nächsten Speichern automatisch. In allen Beispielen dieser Dokumentation sind sie deshalb nicht dargestellt.

Lexikalische Regeln

  • Groß-/Kleinschreibung: Es wird nicht zwischen Groß- und Kleinschreibung unterschieden (MESSUNG = Messung = messung).
  • Trennzeichen: Zwischen einzelnen Informationen sind Leerzeichen, Tabulatoren und Zeilenumbrüche in beliebiger Anzahl erlaubt. Es kommt ausschließlich auf die richtige Reihenfolge der Daten an, nicht auf eine spaltenmäßige Formatierung.
  • Datensatzende: Ein Datensatz endet mit ; oder — als Blockabschluss — mit dem Schlüsselwort END.
  • Kommentare: { … }, an beliebiger Stelle statt eines Trennzeichens, auch mitten im Datensatz und über Zeilengrenzen hinweg. Kommentare sind schachtelbar. Eine schließende } ohne öffnende { ist ein Syntaxfehler.
  • Auskommentieren: Datenzeilen werden durch Einklammern mit { … } deaktiviert; VermCad selbst verwendet dabei die Form {* … ;*}, die die Originalzeile erhält.
{ Das ist ein gültiger Kommentar }
{ Dies ist { ebenfalls } erlaubt. }
{*xx  2    60001 096  x    Y = 32644247.304   X = 5715070.585;*}   { deaktivierte Datenzeile }

Sonderzeichen

Zeichen Bedeutung
; Ende eines Datensatzes. Ein Datensatz darf über mehrere Zeilen gehen.
END Blockende; optionales ; danach. (Kein Sonderzeichen, aber reserviertes Wort.)
, Leitet Header-Zusatzinfos eines Blocks/Makros ein und trennt sie (siehe Blockkopf-Parameter); trennt außerdem gleichartige Teil-Informationen innerhalb eines Datensatzes (z. B. Punkte einer Teilliste).
$ Präfix der Compiler-Anweisungen am Dateianfang (siehe Globale Optionen).
= Zuweisung Bezeichner = Wert (siehe Wertzuweisungen).
x Fehlzeichen/Platzhalter („nicht angegeben“), immer Kleinbuchstabe: fehlender NV als xx, fehlende Vermarkungsart, fehlende Flags, fehlende Punktnummer als xxxxx, fehlender Nummerierungsbezirk als xxxxxxxx.
# Suffix an einer Punktnummer = untergegangener Punkt; als Flag: Punkt gelöscht/untergegangen. In Berechnungsprotokollen zusätzlich: Kennzeichen einer nicht verwendeten Berechnung.
_ Suffix „nur Lage“ an Flags und Optionen (z. B. A_, AT_, $EK_).
| Suffix „nur Höhe“ an Flags und Optionen (z. B. A|, AT|, $A|).
* Flag-Variante: B* = Neukoordinierung, die Vorgabe ersetzt (siehe Punktidentifikation und Flags).
' bzw. " String-Begrenzer für Texte, z. B. REM = '…', GEM = '…', KS-Namen. (Doppelte Anführungszeichen kommen in Altdateien vor.)
+ Fortsetzung mehrzeiliger Texte: GEM = '…' + '…'; außerdem Ein-Schalter bei Optionen ($NE+;).
. Dezimaltrennzeichen der Zahlen; trennt zudem „Doppelworte“.
- Aus-Schalter bei Optionen ($NOT_Z-;, AT-); vorangestellt an einen Nummerierungsbezirk im Block NUMMERIERUNGSBEZIRKE = deaktivierter NB; Vorzeichen in Flächen-Referenzlisten; negativer Wert bei A= unterdrückt die Auswertung.
v / V Präfix vorläufige Punktnummer (Baden-Württemberg: V, alternativ S; alle anderen Bundesländer: v).
(y,x[,z]) Shift-Koordinaten im Blockkopf: die angegebenen Werte werden von allen Y/X/Z des Blocks abgezogen (siehe Blockkopf-Parameter).

Beispiele

Minimale vollständige MWT (Bundesland-neutral)

$NE;                                 { globale Option: nur fatale Fehler melden }

AUFTRAG
  Nummer = 26-0001;
  Lagestatus = 489;
END

VORGABEN  LS 489
{ NV  A       NR VMA  F                                            }
  xx  2        1  x  SA    Y = 32571196.130   X = 5466242.330;
  xx  2        2  x  SA    Y = 32571246.130   X = 5466242.330;
END

MESSUNG , A = 2
  xx  5    10001  x   x    hi = 1.550;
  xx  2        1  x   A    Hz = 0.00000    V = 100.00000   SD = 50.000   hr = 1.300;
  xx  2        2  x   A    Hz = 50.00000   V = 100.00000   SD = 70.711   hr = 1.300;
END

Hinweis: ProjectID und binäre Codierungszeilen sind weggelassen; VermCad ergänzt beide beim Speichern.

Datensatz über mehrere Zeilen (GNSS, Baden-Württemberg)

GNSS_MESSUNG
 0390 1 662512503  x   K    Y   = 32571196.13   X   =  5466242.33   Z   =     455.961
                            Time=    06:59:22   MD  =          10   Ep  =          10
                            s2D =       0.033   SV  =          22   PDO =         1.3
                            HDO =         0.7   VDO =         1.1   REM = 'AH-IMU:2.00  Qual:Fix - HDRTK';
END

Verfügbarkeit und Besonderheiten

  • Der Grundaufbau (Blöcke, ;, END, Kommentare, Sonderzeichen) gilt für alle Bundesländer.
  • Veraltete Blockform: BEGIN [System = <name>] wird als MESSUNG interpretiert (Altformat aus den 1990er-Jahren, wird weiterhin gelesen).
  • Weitere Aliase alter Schreibweisen: LISTE→PUNKTLISTE, NUMERIERUNGSBEZIRKE→NUMMERIERUNGSBEZIRKE, GPS_MESSUNG→GNSS_MESSUNG, GPS_NETZMESSUNG→GNSS_NETZMESSUNG, POLYGONPUNKTE→RECHTWINKELZUG, GRENZERMITTLUNG→GRENZPRUEFUNG.
  • Fehlerquelle: Compiler-Anweisungen ($…) nach dem ersten Datenblock erzeugen den Fehler „Compiler-Anweisung nicht am Anfang“.
  • Fehlerquelle: eine schließende } ohne zugehörige öffnende { bricht den Kommentar-Zähler und führt zu einem Syntaxfehler.
  • Die MWT-Syntax der einzelnen Blöcke ist teilweise bundeslandabhängig; Details stehen auf den jeweiligen Block-/Makroseiten.

Entwicklerhinweise

Diese Angaben richten sich an Entwickler bzw. eine KI mit Zugriff auf den VermCad-Quellcode; für die reine Nutzung der MWT-Syntax sind sie nicht nötig. Unit-Namen und besonders Zeilennummern können sich durch die laufende Weiterentwicklung verschieben - sie dienen als Einstieg, nicht als exakte Fundstelle.

Quellen im Code:

  • VERMCAD\EdText.pas:2612-2654 — Datensatz-Tokenizer NextAusdruck (bis ; oder END)
  • VERMCAD\EdText.pas:401-507, 1670-1736 — Kommentarbehandlung { }, schachtelbar (CommentDeep)
  • VERMCAD\EdText.pas:1380-1414 — Owner/DateTime je Zeile (SetOwnerAndDateTime, TakeOwnerAndDateTimeBin)
  • VERMCAD\Editor.pas:2612-2663 — Lesen der ProjectID (alte/neue Länge); Editor.pas:4343-4349 — Schreiben der Binärzeile #$0E + 12 Bytes
  • VERMCAD\Editor.pas:2664-2666 — Sichtbarkeits-Präfixe #$1E/#$1F
  • VERMCAD\GlobalConsts.pas:901-957 — Codierungs-Konstanten (OwnerDateTimeSize = 12, edODT = #$0E, edProjectID = #$1D, ProjectIDSize = 62)
  • VERMCAD\GlobalConsts.pas:1441-1512, 2044-2051, 2757-2762 — Sonderzeichen-Konstanten (VarPrefix, MisChar, GoDownChar, ExtYX_Char, ExtZ_Char, FlagVariationChar, VorlaufigeNR)
  • VERMCAD\VCProjectBase.pas:1339-1455 — Aufbau und Neuerzeugung der ProjectID (TProjectID)
  • VERMCAD\VCSCHMWT.PAS:948 — zentrale Parse-Routine CheckMWTRecordNew; VCSCHMWT.PAS:3968-3977 — Blockende; VCSCHMWT.PAS:4028 — Alias BEGIN→MESSUNG
  • VERMCAD\VcEditorUtils.pas:1927-2108 — zentrale Keyword-Tabelle aller Blockarten



[Nach oben]