<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />Hallo,
Ich versuche, eine Datentabelle mit Spalten aus einer anderen Tabelle zu aktualisieren und dabei durch eine Zeichenfolge definierte übereinstimmende Spaltenkriterien zu verwenden.
Im folgenden Beispiel ist dt1 meine Haupttabelle und dt2 eine Art Konfigurationsdatei, die die hinzuzufügende Spalte (z. B. „ROUTE“) enthält, während alle anderen Spalten für den Abgleich mit dt1 verwendet werden. Da dt2 benutzerdefiniert ist, kann ich diese anderen Spaltennamen nicht im Voraus kennen, daher muss ich eine formatierte Zeichenfolge verwenden:
// String für den Spaltenabgleich definieren
textinp = "";
matchCols = dt2 << Spaltennamen abrufen (Zeichenfolge);
// „ROUTE“ aus der Liste der dt2-Spaltennamen entfernen
für (i = nitems (matchCols), i > 0, i--,
Wenn ( enthält (matchCols , "ROUTE" ), entfernen von (matchCols, i));
);
// String für den Spaltenabgleich erstellen
für (i=1, i<= nitems (matchCols), i++,
textinp = Konkat (textinp, :: ,matchCols , " = :" ,matchCols , "," );
);
textinp = links (textinp, Länge (textinp)-2);
drucken (textinp);
// dt1 aktualisieren
dt1 << Aktualisieren (
Mit( dt2 ),
Match-Spalten(
analysieren (textinp)
)
);
Das Parsen von textinp für den Update-Befehl führt zu diesem Fehler (die Zeichenfolge wird korrekt erstellt, wie in der ersten Zeile zu sehen):
„:X = :X, :Y = :Y“
Unerwartet ",". Möglicherweise fehlt ein „;“ oder ",".
Zeile 1 Spalte 8: :X = :X►, :Y = :Y
Soweit ich weiß, sollte es kein Problem sein, mehrere Spalten durch Kommas innerhalb von match columns() zu trennen, und tatsächlich, wenn ich versuche, es wörtlich zu definieren, d. h.:
// dt1 aktualisieren
dt1 << Aktualisieren (
Mit( dt2 ),
Match-Spalten(
:X = :X, :Y = :Y
)
);
Es funktioniert einwandfrei. Irgendeine Idee, warum die Zeichenfolge nicht verarbeitet/geparst werden kann? Ihre Hilfe wird gerne in Anspruch genommen!
Danke euch beiden! Ich habe nur die 2. Antwort ausprobiert, die funktioniert hat!
Match-Spalten() akzeptiert offenbar zwei Listen mit Spaltennamen (nicht als Zeichenfolgen) als passendes Argument.
Versuche dies:
// Beispieltabellen
dt2 = Offen ( „$SAMPLE_DATA/Big Class.jmp“ ) ;
dt1 = dt2 << Teilmenge ( ausgewählten Spalten ( 0 ) , Abtastrate ( 0,5 )) ;
dt1 << Spalten löschen ( Name ) ;
// Definiere eine Liste für den Spaltenabgleich
matchCols = dt2 << Spaltennamen abrufen () ;
Entfernen von ( matchCols , Enthält ( matchCols , Ausdruck ( Name ))) ;
// dt1 aktualisieren
dt1 << Aktualisieren ( Mit ( dt2 ) , Spalten anpassen ( matchCols = matchCols )) ;
Das sollte funktionieren:
update_expr = evalinsert (
"dt1 << Update(
Mit( dt2 ),
Spalten abgleichen(^textinp^)
)" ) ;
evalu ( analysieren ( update_expr )) ;