Zum Inhalt springen

MWT Syntax-Übersicht: Unterschied zwischen den Versionen

Aus VermCAD Hilfe Wiki
MWT-Syntax-Referenz: regelbasierte Seite aus Task MWT_Syntax (Quellen: Compiler-Code + Bestands-MWTs)
K Claude verschob die Seite MWT Syntax-Uebersicht nach MWT Syntax-Übersicht: Rechtschreibung im Seitentitel (Auftrag Lars, 22.09.2026); Weiterleitung vom alten Titel bleibt für ältere Programmversionen bestehen
 
(Eine dazwischenliegende Version desselben Benutzers wird nicht angezeigt)
Zeile 158: Zeile 158:
* <code>VERMCAD\Editor.pas:2612-2663</code> — Lesen der ProjectID (alte/neue Länge); <code>Editor.pas:4343-4349</code> — Schreiben der Binärzeile <code>#$0E</code> + 12 Bytes
* <code>VERMCAD\Editor.pas:2612-2663</code> — Lesen der ProjectID (alte/neue Länge); <code>Editor.pas:4343-4349</code> — Schreiben der Binärzeile <code>#$0E</code> + 12 Bytes
* <code>VERMCAD\Editor.pas:2664-2666</code> — Sichtbarkeits-Präfixe <code>#$1E</code>/<code>#$1F</code>
* <code>VERMCAD\Editor.pas:2664-2666</code> — Sichtbarkeits-Präfixe <code>#$1E</code>/<code>#$1F</code>
* <code>VERMCAD\GlobalConsts.pas:884-940</code> — Codierungs-Konstanten (<code>OwnerDateTimeSize</code> = 12, <code>edODT</code> = #$0E, <code>edProjectID</code> = #$1D, <code>ProjectIDSize</code> = 62)
* <code>VERMCAD\GlobalConsts.pas:901-957</code> — Codierungs-Konstanten (<code>OwnerDateTimeSize</code> = 12, <code>edODT</code> = #$0E, <code>edProjectID</code> = #$1D, <code>ProjectIDSize</code> = 62)
* <code>VERMCAD\GlobalConsts.pas:1421-1492, 1961-1968, 2661-2666</code> — Sonderzeichen-Konstanten (<code>VarPrefix</code>, <code>MisChar</code>, <code>GoDownChar</code>, <code>ExtYX_Char</code>, <code>ExtZ_Char</code>, <code>FlagVariationChar</code>, <code>VorlaufigeNR</code>)
* <code>VERMCAD\GlobalConsts.pas:1441-1512, 2044-2051, 2757-2762</code> — Sonderzeichen-Konstanten (<code>VarPrefix</code>, <code>MisChar</code>, <code>GoDownChar</code>, <code>ExtYX_Char</code>, <code>ExtZ_Char</code>, <code>FlagVariationChar</code>, <code>VorlaufigeNR</code>)
* <code>VERMCAD\VCProjectBase.pas:1306-1422</code> — Aufbau und Neuerzeugung der ProjectID (<code>TProjectID</code>)
* <code>VERMCAD\VCProjectBase.pas:1339-1455</code> — Aufbau und Neuerzeugung der ProjectID (<code>TProjectID</code>)
* <code>VERMCAD\VCSCHMWT.PAS:945</code> — zentrale Parse-Routine <code>CheckMWTRecordNew</code>; <code>VCSCHMWT.PAS:3952-3961</code> — Blockende; <code>VCSCHMWT.PAS:4012</code> — Alias <code>BEGIN</code>→<code>MESSUNG</code>
* <code>VERMCAD\VCSCHMWT.PAS:948</code> — zentrale Parse-Routine <code>CheckMWTRecordNew</code>; <code>VCSCHMWT.PAS:3968-3977</code> — Blockende; <code>VCSCHMWT.PAS:4028</code> — Alias <code>BEGIN</code>→<code>MESSUNG</code>
* <code>VERMCAD\VcEditorUtils.pas:1927-2103</code> — zentrale Keyword-Tabelle aller Blockarten
* <code>VERMCAD\VcEditorUtils.pas:1927-2108</code> — zentrale Keyword-Tabelle aller Blockarten


{{Hilfe:NachOben}}
{{Hilfe:NachOben}}
[[Kategorie:MWT Syntax|Übersicht]]
[[Kategorie:MWT Syntax|Übersicht]]

Aktuelle Version vom 22. September 2026, 10:56 Uhr

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]