2015-04-20 4 views
-1

У меня есть существующая таблица данных с двумя столбцами, одна - это идентификатор, а один - список идентификаторов, разделенных запятой.Как разбить список с разделителями-запятыми в IronPython (Spotfire)?

Например

ID | List 
--------- 
1 | 1, 4, 5 
3 | 2, 12, 1 

Я хотел бы разделить список столбцов, так что у меня есть таблица вроде этого:

ID | List 
--------- 
1 | 1 
1 | 4 
1 | 5 
3 | 2 
3 | 12 
3 | 1 

Я понял это прямо сейчас:

tablename='Querysummary Data' 
table=Document.Data.Tables[tablename] 

topiccolname='TOPIC_ID' 
topiccol=table.Columns[topiccolname] 
topiccursor=DataValueCursor.Create[str](topiccol) 

docscolname='DOC_IDS' 
doccol=table.Columns[docscolname] 
doccursor=DataValueCursor.Create[str](doccol) 

myPanel = Document.ActivePageReference.FilterPanel 
idxSet = myPanel.FilteringSchemeReference.FilteringSelectionReference.GetSelection(table).AsIndexSet() 


keys=dict() 
topdoc=dict() 
for row in table.GetRows(idxSet,topiccursor,doccursor): 
    keys[topiccursor.CurrentValue]=doccursor.CurrentValue 

for key in keys: 
    str = keys[key].split(",") 

    for i in str: 
     topdoc[key]=i 
     print key + " " +i 

теперь я могу напечатать идентификатор темы с соответствующим идентификатором. Как создать новую таблицу данных в Spotfire, используя этот dict()?

+1

Пожалуйста, покажите нам свои попытки. SO не является бесплатным кодовым письмом. –

+0

Привет, Нш, конечно, я добавил мой код выше сейчас –

ответ

1

Я решил, что сам finally..maybe есть некоторые лучший код, но он работает:

tablename='Querysummary Data' 
table=Document.Data.Tables[tablename] 

topiccolname='TOPIC_ID' 
topiccol=table.Columns[topiccolname] 
topiccursor=DataValueCursor.Create[str](topiccol) 

docscolname='DOC_IDS' 
doccol=table.Columns[docscolname] 
doccursor=DataValueCursor.Create[str](doccol) 

myPanel = Document.ActivePageReference.FilterPanel 
idxSet = myPanel.FilteringSchemeReference.FilteringSelectionReference.GetSelection(table).AsIndexSet() 

# build a string representing the data in tab-delimited text format 
textData = "TOPIC_ID;DOC_IDS\r\n" 

keys=dict() 
topdoc=dict() 
for row in table.GetRows(idxSet,topiccursor,doccursor): 
    keys[topiccursor.CurrentValue]=doccursor.CurrentValue 

for key in keys: 
    str = keys[key].split(",") 

    for i in str: 
     textData += key + ";" + i + "\r\n" 

dataSet = DataSet() 
dataTable = DataTable("DOCIDS") 
dataTable.Columns.Add("TOPIC_ID", System.String) 
dataTable.Columns.Add("DOC_IDS", System.String) 

dataSet.Tables.Add(dataTable) 

# make a stream from the string 
stream = MemoryStream() 
writer = StreamWriter(stream) 
writer.Write(textData) 
writer.Flush() 
stream.Seek(0, SeekOrigin.Begin) 

# set up the text data reader 
readerSettings = TextDataReaderSettings() 
readerSettings.Separator = ";" 
readerSettings.AddColumnNameRow(0) 
readerSettings.SetDataType(0, DataType.String) 
readerSettings.SetDataType(1, DataType.String) 
readerSettings.SetDataType(2, DataType.String) 

# create a data source to read in the stream 
textDataSource = TextFileDataSource(stream, readerSettings) 

# add the data into a Data Table in Spotfire 
if Document.Data.Tables.Contains("Querysummary Mapping"): 
    Document.Data.Tables["Querysummary Mapping"].ReplaceData(textDataSource) 
else: 
    newTable = Document.Data.Tables.Add("Querysummary Mapping", textDataSource) 
    tableSettings = DataTableSaveSettings (newTable, False, False) 
    Document.Data.SaveSettings.DataTableSettings.Add(tableSettings) 
+0

Спасибо, что вернулись и разместили найденное решение. Если вы счастливы, что это решит вашу проблему, вы можете пометить свой собственный ответ как принятый. http://stackoverflow.com/help/self-answer – RyanfaeScotland

Смежные вопросы