Sprung zum Seitenende Struktur Themen A...Z Titel << >>

CXI-Basis-Programmierreferenz / Version 2 / Datenspeicherung / CxiTree / Zusatzfunktionen /

Merge... - Mischen von Variablen

[C++] CxiError CxiTree :: MergeTo (CxiTree& trgcxi, CxiLong options = 0) const
[C++] CxiError CxiTree :: MergeFrom (const CxiTree& srccxi, CxiLong options = 0)
[C] CxiError cxiMerge (CxiHandle trgcxi, CxiHandle srccxi, CxiLong options)

[S2:STANDARD] Mischt Variablen zweier CXI-Bäume

trgcxi:
CXI-Baum, der die Variablen aufnehmen soll

srccxi:
CXI-Baum, der die zu mischenden Variablen enthält

options:
VERHALTEN, WENN ZIELVARIABLE SCHON EXISTIERT:
- cxiOptMergeAdd (=0, Vorgabe): Zielvariable unverändert lassen
- cxiOptMergeReplace: Zielvariablen außer cxiTypeSub ersetzen
- cxiOptMergeForce: Zielvariable in jedem Fall ersetzen
BEARBEITUNG VON UNTERBÄUMEN:
- cxiOptMergeSubTree (=0, Vorgabe): Unterbäume rekursiv bearbeiten
- cxiOptMergeNoSubTree: Unterbäume nicht bearbeiten

return:
0 ok, sonst Fehler

Diese Funktion kopiert in einer Schleife alle Variablen des Quellblocks (srccxi) in den Zielblock (trgcxi), wobei die angegebenen Optionen berücksichtigt werden. Zum Kopieren einer Variablen wird jeweils CopyVar aufgerufen.

Der Quell- und Zielblock dürfen nicht identisch sein. Der Zielbaum darf kein direkter oder indirekter Unterbaum der Quelle sein.

Achtung! Die Option cxiOptMergeForce ersetzt auch Variablen vom Typ cxiTypeSub, so dass Unterbäume immer komplett ersetzt werden; es erfolgt in diesem Fall kein rekursiver Abgleich.

Die beiden Member-Funktionen benutzen den CXI-Baum, zu dem sie gehören, als Quelle (MergeTo) bzw. Ziel (MergeFrom).

Der Operator += entspricht einem Aufruf von MergeFrom mit den Optionen cxiOptMergeReplace und cxiOptMergeSubTree.

Um ausgewählte Variablen zu kopieren, kann MergeWild... verwendet werden.

Portabilität:
Diese Funktion ist in allen unterstützten Systemen verfügbar.

Siehe auch:
MergeWild...
CopyVar...
CopySubTree...
operator +=

Beispiel:

#include <stdio.h>
#include "cxib.h"

int main (void)
{
  // Beispielbäume aufbauen
  CxiTreeMem c = "VAR1=1;VAR2='Text';"
                 "VAR3={UNTER=19;VARY=Y;}VAR4={UNTER=92;}";
  CxiTreeMem b = "VAR7=1;VAR2='noch ein Text';"
                 "VAR3={UNTER=17;VARX=X;}VAR4=9;";
  CxiTreeMem a;

  // Dump-Datei ist "testcopy.dmp"
  unlink ("testcopy.dmp");

  // Originalzustand ausgeben
  c.DumpVars ("testcopy.dmp", "<Original>", 1);
  b.DumpVars ("testcopy.dmp", "<Quellbaum>", 1);

  // Test mit verschiedenen Optionen

  a = c;            // CxiTree::operator =
  a.MergeFrom (b);  // Default ist options==0
  a.DumpVars ("testcopy.dmp", "0", 1);

  a = c;
  a.MergeFrom (b, cxiOptMergeReplace);  // oder:  a += b;
  a.DumpVars ("testcopy.dmp", "cxiOptMergeReplace", 1);

  a = c;
  a.MergeFrom (b, cxiOptMergeReplace | cxiOptMergeNoSubTree);
  a.DumpVars ("testcopy.dmp",
              "cxiOptMergeReplace|cxiOptMergeNoSubTree", 1);

  a = c;
  a.MergeFrom (b, cxiOptMergeForce);
  a.DumpVars ("testcopy.dmp", "cxiOptMergeForce", 1);

  return 0;
}

Inhalt der Datei "testcopy.dmp":

***[1] 1995-10-28 19:58:33.560 *** <Original>

<*Window*> <Root> \
VAR1                    Num     1
VAR2                    Str     "Text"
VAR3                    Sub
VAR4                    Sub

<Node> \VAR3
UNTER                   Num     19
VARY                    Str     "Y"

<Node> \VAR4
UNTER                   Num     92


***[2] 1995-10-28 19:58:33.590 *** <Quellbaum>

<*Window*> <Root> \
VAR7                    Num     1
VAR2                    Str     "noch ein Text"
VAR3                    Sub
VAR4                    Num     9

<Node> \VAR3
UNTER                   Num     17
VARX                    Str     "X"


***[3] 1995-10-28 19:58:33.590 *** 0

<*Window*> <Root> \
VAR1                    Num     1
VAR2                    Str     "Text"
VAR3                    Sub
VAR4                    Sub
VAR7                    Num     1

<Node> \VAR3
UNTER                   Num     19
VARY                    Str     "Y"
VARX                    Str     "X"

<Node> \VAR4
UNTER                   Num     92


***[4] 1995-10-28 19:58:33.590 *** cxiOptMergeReplace

<*Window*> <Root> \
VAR1                    Num     1
VAR3                    Sub
VAR4                    Sub
VAR7                    Num     1
VAR2                    Str     "noch ein Text"

<Node> \VAR3
VARY                    Str     "Y"
UNTER                   Num     17
VARX                    Str     "X"

<Node> \VAR4
UNTER                   Num     92


***[5] 1995-10-28 19:58:33.620 *** cxiOptMergeReplace|cxiOptMergeNoSubTree

<*Window*> <Root> \
VAR1                    Num     1
VAR3                    Sub
VAR4                    Sub
VAR7                    Num     1
VAR2                    Str     "noch ein Text"

<Node> \VAR3
UNTER                   Num     19
VARY                    Str     "Y"

<Node> \VAR4
UNTER                   Num     92


***[6] 1995-10-28 19:58:33.620 *** cxiOptMergeForce

<*Window*> <Root> \
VAR1                    Num     1
VAR7                    Num     1
VAR2                    Str     "noch ein Text"
VAR3                    Sub
VAR4                    Num     9

<Node> \VAR3
UNTER                   Num     17
VARX                    Str     "X"

Das genaue Format der Dump-Ausgabe ist versionsabhängig und kann daher von diesem Beispiel abweichen.


[i] CXI-Basis-Programmierreferenz
Version 2.10 72 (1014-001), erstellt am 15. April 2000
Textseite 249 von 855, Thema 8394 (Merge)
[c] Copyright (c) 1996-2000 by TeraConnect GmbH

Sprung zum Seitenanfang Struktur Themen A...Z Titel << >>