2015-06-01 3 views

ответ

5

Вы захотите вытащить несколько различных функций, чтобы снять это с помощью скриптов. У меня есть мой сценарий ниже, но в целом то, что вы хотите сделать, это настроить свой вход в качестве источника данных, а затем добавить строки из этого источника данных в ваш существующий. Я одолжил хорошую сумму от this учебника пятнистого пятна от TIBCO и изменил его по мере необходимости, чтобы получить нас, где вы хотите быть. В результате может быть несколько избыточных вложений, которые вы можете удалить.

Я использую datTab в качестве входного параметра для скрипта в качестве таблицы данных, к которой мы хотим добавить наши строки.

from Spotfire.Dxp.Data import AddRowsSettings 
import System 
from System import DateTime 
from System.IO import StringReader, StreamReader, StreamWriter, MemoryStream, SeekOrigin 
from Spotfire.Dxp.Data import DataType, DataTableSaveSettings 
from Spotfire.Dxp.Data.Import import TextFileDataSource, TextDataReaderSettings 

#First we need to create your data with some columns. 
#Here I have a comma separated miniature table built up with 
#a commented option for your variable itself. \r\n used for newline 
textData = "name,values,category\r\ncountry,100,color\r\n" 
#textData = "col1,col2,col3\r\n" + string_in + "\r\n" 

#Memory Stream stuff. Simply just writing our variable 
#into a place we can access to make a data source 
stream = MemoryStream() 
writer = StreamWriter(stream) 
writer.Write(textData) 
writer.Flush() 
stream.Seek(0, SeekOrigin.Begin) 

#you need settings to tell the system what stuff you're importing. 
#here we define it is comma separated and what data types our columns are. 
readerSettings = TextDataReaderSettings() 
readerSettings.Separator = "," 
readerSettings.AddColumnNameRow(0) 
readerSettings.SetDataType(0, DataType.String) 
readerSettings.SetDataType(1, DataType.Integer) 
readerSettings.SetDataType(2, DataType.String) 
textDataSource = TextFileDataSource(stream,readerSettings) 

#We create some settings here automatically having the system match 
#column names for us between the data table and our data source. 
settings = AddRowsSettings(datTab,textDataSource) 
#And finally we add the rows from our datasource with our settings. 
datTab.AddRows(textDataSource,settings) 

Вы, конечно, можете сделать это более сложным с более входным переменным циклом через вещи, чтобы добавить несколько строк, и т.д. Вы можете также следовать этому же процессу с URL в файл вместо потока памяти материал. Зависит от ваших типов ввода.

Дайте мне знать, если возникнут какие-либо вопросы. Я попытался прокомментировать важные детали, но при необходимости можно было бы дополнительно разъяснить конкретные функции.

Edit: Смотрите мой скриншот ниже после того как я добавил рекорд пару разное время screenshot

+0

Спасибо @ clesiemo3. Это было очень полезно. – dhvlnyk

+0

У меня есть datatable ** ALLDataTable **, в котором несколько строк ** помечены **. Я пытаюсь скопировать выбранные строки в другой тип данных под названием ** Subset **. Логикой, которую я использую, является копирование отмеченных строк в файл ** temp.txt **, а затем импортирование в «Subset» datatable. Ошибка выполнения во время выполнения, но когда я просматриваю вновь созданный файл подмножества, существует сообщение msg «Выбранная таблица данных не содержит столбцов». Можете ли вы любезно помочь мне разобраться в этом. Код здесь - http://ideone.com/fork/PTUAo7 – dhvlnyk

+1

@ diablo8226. Вам может быть лучше задавать новый вопрос для этого, а не комментарий к этому. Это, с первого взгляда, может быть не сохранено в файле, поскольку вы просто пишете его, но не закрываете его. Я знаю, что в моем примере выше я использую MemoryStream(), а не временный файл в вашем, но я думаю, что они будут концептуально одинаковыми. Я бы попробовал эквивалент txt файла flush + seek to 0, если он есть. Я не знаю, с головы до ног. Любая причина для файла tmp по потоку памяти? – clesiemo3

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