Как установить текстовые данные с переносом строки в datatable в spotfire, используя ironpython - PullRequest
0 голосов
/ 08 марта 2019

Я получаю данные из http-запроса с использованием Ironpython для подачи данных в Spotfire, но у меня проблемы с данными из-за разрывов строк. Данные, которые я получаю по HTTP-запросу, поступают в виде tsv, поэтому переносы строк представляются в виде \ r \ n. Эти данные имеют поле описания, которое также имеет разрывы строк. Таким образом, при разборе данных они разбиваются на новые строки, которых не существует. В настоящее время я получаю один результат, но после его анализа он превращается в несколько строк в таблице данных.

Мне нужно показать текст описания с разрывами строк в spotfire.

Служба, с которой я получаю данные, была создана мной. Я отправлял JSON-ответ с данными, но мне пришлось проанализировать его в tsv в ironpython, поэтому я перенес эту работу на сервер.

Если это невозможно, есть ли способ для точного запуска чтения данных из запроса и передачи его в datatable без преобразования в 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...