Ignition v7.9: Exporting dataset to CSV file, large numbers being made into sig fig

I have a data set where product numbers are quite large, when being exported they're being made into sig fig (E+...).

I can resolve this by converting the columns affected to a text data type prior to exporting but I cannot find a way ignition v7.9 supports.

Here is what I have currently:

# Create a variable that references the data set
component = event.source.parent.getComponent('table')
data = component.data
# Use system.dataset.toCSV to turn the formatted dataset into a CSV string.
csv = system.dataset.toCSV(data)
# Use system.file.saveFile to have the user find a directory to write to.
filePath = system.file.saveFile(fileName, "csv", "Comma Separated Values")
# Check the value of filePath to make sure the user picked a path before
# attempting to write.
if filePath: system.file.writeFile(filePath, csv)

Number in CSV file

note that the format cannot be fixed in excel, cannot convert to a string, the string remains as E+...

3

2 Answers

I don't have any experience on Ignition, since it is Python scripting embedded in Ignition and I cannot find out how to re-test my thought, but I can give you some advices.

  • CSV is not Excel: To review the CSV, you should open it as plain text, such as notepad to get the pure format, I believe that CSV file from toCSV function remain the number as well, whereas excel would make a bit different due to large number

If you want to overview it via Excel, it could achieve by several ways:

  • Try toExcel 8.0 onward or exportExcel 7.9 backward:
  • Append special character for that number, typically is ': '123456789123456789
  • Find alternative ways of CSV export with custom format supported, it would be a double quote surrounded "123456", "my string here"

My recommendation is your code is fine, no need to change, just to view it as notepad, notepad++

I know ignition quite well, and unfortunately, you will have to do the string conversion yourself, but even so, it can be done concisely:

data = system.dataset.toDataSet(system.dataset.getColumnHeaders(component.data), [[str(component.data.getValueAt(row, column)) for column in range(component.data.getColumnCount())] for row in range(component.data.getRowCount())])

Since ignition uses an older version of jython, it is possible that you will want to use unicode( instead of str( if you are in a country that uses special characters and there is a chance that those characters could be in your dataset.

Your Answer

Sign up or log in

Sign up using Google Sign up using Facebook Sign up using Email and Password

Post as a guest

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge that you have read and understand our privacy policy and code of conduct.

You Might Also Like