<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo,
Ich versuche, eine Datentabelle mit Spalten aus einer anderen Tabelle zu aktualisieren, indem ich übereinstimmende Spaltenkriterien verwende, die durch eine Zeichenfolge definiert sind.
Im Beispiel unten ist dt1 meine Haupttabelle, und dt2 ist eine Art Konfigurationsdatei, die die hinzuzufügende Spalte enthält (dh "ROUTE"), während alle anderen Spalten zum Abgleich mit dt1 verwendet werden. Da dt2 benutzerdefiniert ist, kann ich diese anderen Spaltennamen nicht im Voraus kennen, daher muss eine formatierte Zeichenfolge verwendet werden:
// Zeichenfolge für den Spaltenabgleich definieren
textinp = "";
matchCols = dt2 << Spaltennamen erhalten (Zeichenfolge);
// „ROUTE“ aus der Liste der dt2-Spaltennamen entfernen
für (ich = Gegenstände (matchCols), i > 0, i--,
wenn ( enthält (matchCols , "ROUTE" ), entfernen von (matchCols, i));
);
// Zeichenfolge für den Spaltenabgleich erstellen
zum (i=1, i<= Gegenstände (matchCols), i++,
textinp = konkat (SMS, ":" ,matchCols , " = :" ,matchCols , ", " );
);
textinp = links (SMS, Länge (textinp)-2);
drucken (textinp);
// aktualisiere dt1
dt1 << Aktualisieren (
Mit (dt2),
Spalten abgleichen(
analysieren (Texteingabe)
)
);
Das Parsen von textinp mit dem Update-Befehl erzeugt diesen Fehler (die Zeichenfolge wird korrekt erzeugt, wie in der ersten Zeile zu sehen):
":X = :X, :Y = :Y"
Unerwartetes ",". Vielleicht fehlt ein ";" oder ",".
Zeile 1 Spalte 8: :X = :X►, :Y = :Y
Soweit ich weiß, sollte es kein Problem geben, mehrere Spalten mit Kommas in match column() zu trennen, und tatsächlich, wenn ich versuche, es wörtlich zu definieren, dh:
// aktualisiere dt1
dt1 << Aktualisieren (
Mit (dt2),
Spalten abgleichen(
:X = :X, :Y = :Y
)
);
Es funktioniert einwandfrei. Irgendeine Idee, warum es die Zeichenfolge nicht verarbeiten/parsen kann? Ihre Hilfe wird gerne in Anspruch genommen!
Danke euch beiden! Habe nur die 2. Antwort ausprobiert, die funktioniert hat!
Spalten abgleichen() akzeptiert anscheinend zwei Listen von Spaltennamen (nicht als Zeichenfolgen) als passendes Argument.
Versuche dies:
// Beispieltabellen
dt2 = Offen ( "$SAMPLE_DATA/Große Klasse.jmp" ) ;
dt1 = dt2 << Teilmenge ( ausgewählte Spalten ( 0 ) , Abtastrate ( 0,5 )) ;
dt1 << Spalten löschen ( Name ) ;
// Liste für den Spaltenabgleich definieren
matchCols = dt2 << Spaltennamen erhalten () ;
Entfernen von ( matchCols , Enthält ( matchCols , Ausdruck ( Name ))) ;
// aktualisiere dt1
dt1 << Aktualisieren ( Mit ( dt2 ) , Spalten abgleichen ( matchCols = matchCols )) ;
Das sollte funktionieren:
update_expr = evalinsert (
"dt1 << Aktualisieren(
Mit (dt2),
Spalten abgleichen(^textinp^)
)" ) ;
auswerten ( analysieren ( update_expr )) ;