2012-12-05 2 views
4

IronPython을 사용하여 데이터의 일부 처리를 수행하는 .NET 프로젝트가 있습니다. 현재 C# 코드는 동적 계산이 필요한 각 행과 열에 대해 IronPython 스크립트를 반복하고 생성합니다. 그러나 DataTable 개체와이를 실행하는 스크립트를 전달하여 프로세스를보다 효율적으로 만들고 싶습니다. 불행히도 'DataTable' object is unsubscriptable 오류이 발생하며 처리가 이루어지지 않습니다.IronPython에 DataTable 전달

C#을 생성하고 IronPython의 스크립트를 실행 니펫을 :

DataTable dt = new DataTable(); 
dt.Columns.Add("count", typeof(int)); 
dt.Columns.Add("calc", typeof(int)); 
dt.Rows.Add(1, null); 

ScriptEngine engine = Python.CreateEngine(options); 
ScriptScope scope = engine.CreateScope(); 
scope.SetVariable("dt", dt); 
ScriptSource source = engine.CreateScriptSourceFromString(code, SourceCodeKind.AutoDetect); 
object result = source.Execute(scope); 
DataTable table = scope.GetVariable<System.Data.DataTable>("dt"); 

파이썬 스크립트는 테이블에 대해 실행되는 : 나는 'DataTable' object is unsubscriptable 오류를 수정, 또는이다 어떻게

import clr 
clr.AddReference('System.Data') 
from System import Data 
from System.Data import DataTable 
for row in dt.Rows: 
    dt["calc"] = dt["count"] + 1 

DataTable을 IronPython에 전달하는 더 좋은 방법은 있습니까?

답변

8

DataTable 개체는 실제로 구독 취소 가능합니다. 즉, 색인 생성 속성 (예 : dt[index])을 통해 액세스 할 수 없습니다.

당신은 아마 의미하는이 :

내가 rowdt 변수를 대체
for row in dt.Rows: 
    row["calc"] = row["count"] + 1 

.

+0

와우 .... ㅎ, 나는 – saluce

+0

전혀 어리석은 생각하지 마십시오) = 지금 바보 같은 생각하지 않습니다. 파이썬이 컴파일되지 않았기 때문에 이런 종류의 실수를하는 것은 매우 쉽습니다 ... – digEmAll