如何使用IronPython在Spotfire中将带有换行符的文本数据设置为数据表

时间:2019-03-08 14:30:31

标签: text ironpython spotfire

我正在使用ironpython从http请求中获取数据,以在Spotfire中提供数据表,但是在换行数据时遇到了麻烦。我从HTTP请求获取的数据为tsv,因此换行符表示为\ r \ n。该数据的描述字段也包含换行符。因此,在解析数据时,它会分成不存在的换行符。我目前正在检索一个结果,但是在解析之后,它在数据表中变成了几行。

我需要在Spotfire中显示带有换行符的说明文字。

我从中获取数据的服务是我自己做的。我正在发送包含数据的JSON响应,但是我不得不将其解析为ironpython中的tsv,因此我将此作业转移到了服务器上。

如果无法执行此操作,是否有办法从请求中读取数据并将其传递,请执行数据表操作而不转换为tsv?

有一个用于分隔符readerSettings.Separator = "\t"的参数,但找不到换行符。 TextDataReaderSettings()是否有设置换行符的参数?

import clr
clr.AddReference('System.Data')
clr.AddReference('System.Web.Extensions')
import System
from System import DateTime
from System.Data import DataSet, DataTable
from System.IO import StreamReader, StreamWriter, MemoryStream, SeekOrigin
from System.Net import HttpWebRequest
from System.Web.Script.Serialization import JavaScriptSerializer
from Spotfire.Dxp.Data import DataType, DataTableSaveSettings
from Spotfire.Dxp.Data.Import import TextFileDataSource, TextDataReaderSettings

def getDataTable(tableName):
    try:
        return Document.Data.Tables[tableName]
    except:        
        return None

uri = "http://localhost/comentarioindicadores"
webRequest = HttpWebRequest.Create(uri)
response = webRequest.GetResponse()
streamReader = StreamReader(response.GetResponseStream())
data = streamReader.ReadToEnd()

# build a string representing the data in tab-delimited text format
textData = "id\tindicador\tmês\tano\tcomentário\tmotivo\tação\tcriado em\tatualizado em\r\n"
textData += data

# 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 = "\t"
readerSettings.AllowNewlinesInQuotedFields = True
readerSettings.AddColumnNameRow(0)

readerSettings.SetDataType(1, DataType.String)
readerSettings.SetDataType(2, DataType.Integer)
readerSettings.SetDataType(3, DataType.Integer)
readerSettings.SetDataType(4, DataType.String)
readerSettings.SetDataType(5, DataType.String)
readerSettings.SetDataType(6, DataType.String)
readerSettings.SetDataType(7, DataType.DateTime)
readerSettings.SetDataType(8, DataType.DateTime)

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

# add the data into a Data Table in Spotfire
dt = getDataTable("comentarios")
if dt != None:
    dt.ReplaceData(textDataSource)
else:
    Document.Data.Tables.Add("comentarios", textDataSource)

0 个答案:

没有答案