Otro gran predicamento. Estoy tratando de usar una instancia de ICalculator
a la actualización de un campo basado en otro campo. Libros de texto de cosas. Por desgracia, el ejemplo en el SDK para C# es un poco falta.
Aquí es lo que me ha desconcertado a cabo tan lejos de la C# GeoDatabaseUI 10.x y VB.NET ICalculator 9.3 ejemplos/documentación (NOTA: estoy haciendo esto en C#, en caso de que no estaba claro).
- Si desea utilizar una cadena en la Expresión de la propiedad, ¿ no use triple comillas (debe ser el legado de la información), pero escapó de comillas para el normal cadena dentro de la cadena de notación.
- Puede utilizar VB.NET código en el pre-expresión cuando se trabaja en VB.NET (esto me confunde).
Con estas premisas en mente, he estado tratando de usar python o C# en el pre-expresión de la propiedad, pero yo no estoy teniendo suerte.
snip....
Alguien ha probado esto todavía? Si es así, ¿cuál es la forma correcta de usar una función de python y/o un método de C# cuando se trabaja con el ICalculcator
?
ACTUALIZACIÓN: Bueno, intentando el método kenbuja sugiere a continuación, he cambiado a un IGeoProcessor
método con el siguiente código:
public void GPCalculate(ITable table)
{
IGeoProcessor gp = new GeoProcessorClass();
IVariantArray varray = new VarArrayClass();
string input = workspacepath+"\\"+targetfile;
string codeblock = "states = {'2':'AK', '1':'AL', '5':'AR', '60':'AS', '4':'AZ', '6':'CA', '8':'CO', '9':'CT', '11':'DC', '10':'DE', '12':'FL',"+
"'13':'GA', '66':'GU', '15':'HI', '19':'IA', '16':'ID', '17':'IL', '18':'IN', '20':'KS', '21':'KY', '22':'LA', '25':'MA', '24':'MD', '23':'ME',"+
"'26':'MI', '27':'MN', '29':'MO', '28':'MS', '30':'MT', '37':'NC', '38':'ND', '31':'NE', '33':'NH', '34':'NJ', '35':'NM', '32':'NV', '36':'NY',"+
"'39':'OH', '40':'OK', '41':'OR', '42':'PA', '72':'PR', '44':'RI', '45':'SC', '46':'SD', '47':'TN', '48':'TX', '49':'UT', '51':'VA', '78':'VI',"+
"'50':'VT', '53':'WA', '55':'WI', '54':'WV', '56':'WY'}\n" +
"def getstate(id):\n" +
" id = str(id)\n"+
" if (len(id) == 14):\n" +
" id = id[0]\n" +
" if (len(id) == 15):\n" +
" tid = id[0:2]\n" +
" return states[id]";
// First Parameter in_table
varray.Add(input);
// Second Parameter calculate field
varray.Add("PSTATE");
// Third Parameter expression
varray.Add("getstate(!ID!)");
// Fourth Parameter expression_type (optional)
varray.Add("PYTHON_9.3");
// Fifth Parameter Codeblock (optional)
varray.Add(codeblock);
IGeoProcessorResult result = new GeoProcessorResultClass();
settesttext("Starting Calculation");
result = gp.Execute("CalculateField_management", varray, null);
}
El código anterior funciona perfectamente ahora (gracias a una edición @blah238).