Minimum Origin Version Required: Origin 8 SR0
To import ASCII data, the method Datasheet::IimportASCII can be used. It allows to customize importation.
This example is to show how to import ascii data and how to setup sub header lines to column lables including uer defined parameter labels.
void ImportASCII_Ex1() { ASCIMP ai; string strFile = GetOpenBox("*.dat"); // or "*.txt" if(strFile.IsEmpty()) return;// user cancel if(AscImpReadFileStruct(strFile, &ai)==0) { ai.iAutoSubHeaderLines = 0; //set auto detected to false since will set sub header to col label by below codes ai.iSubHeaderLines = 4; // 1. LongName 2. Units 3. Expanded Discription(User defined) 4. Type Indication(User defined) // Notice when iAutoSubHeaderLines is 0, the index of ai.nLongName, ai.nUnits and ai.nFirstUserParams are begin from Main Header ai.nLongNames = ai.iHeaderLines; ai.nUnits = ai.iHeaderLines + 1; ai.nFirstUserParams = ai.iHeaderLines + 2; ai.nNumUserParams = 2; ai.iMaxLabels = 0; // Not set any header line to Comments label Worksheet wks; wks.Create(); if(0 == wks.ImportASCII(strFile, ai)) { // Set user parameter labels to specified names Grid grid; grid.Attach(wks); vector<string> vsUserLabels = {"Expanded Discription", "Type Indication"}; grid.SetUserDefinedLabelNames(vsUserLabels); wks.AutoSize(); // to resize worksheet. This method is very useful when data/text is longer than the width of cell } } else out_str("failed to read ascii file"); }
void ImportASCII_Ex2() { Worksheet wks = Project.ActiveLayer(); if(!wks) { out_str("no acitve workbook window to import data"); return; } ASCIMP ai; string strFile = GetAppPath(1) + "Samples\\Curve Fitting\\Step01.dat"; if(!strFile.IsFile()) { strFile = GetOpenBox("*.dat"); // or "*.txt" if(strFile.IsEmpty()) return;// user cancel } if(AscImpReadFileStruct(strFile, &ai)==0) { ai.iMode = ASCIMP_MODE_APPEND_COLS; // append imported data to this worksheet ai.iRenameCols = 0; // 0 to keep default column name ai.iPartial = 1; // 1 to specify partial import ai.iPartialC1 = 1; // import from 2nd column (0 offset) ai.iPartialC2 = 4; // set the last column, so here just import 4 columns ai.iPartialR1 = 0; // set the import row from ai.iPartialR2 = 9; // set the import row to int nRet = wks.ImportASCII(strFile, ai); out_int("nRet = ", nRet); if(0 == nRet) wks.AutoSize(); // to resize worksheet. This method is very useful when data/text is longer than the width of cell } else out_str("failed to read ascii file"); }
Firstly, run the following LabTalk script to load and compile the fu_utils.c file.
run.LoadOC(Originlab\fu_utils.c);
Then compile the Origin C code below.
#include <..\originlab\fu_utils.h> void ImportASCII_Ex3() { string fileName = GetOpenBox("*.txt"); // txt file browser if( !fileName.IsFile()) return; // create a new worksheet Worksheet wks; wks.Create(); // ascii import ASCIMP ai; initASCIMP(ai); // initialize ai.iAutoSubHeaderLines = 1; // auto detect subheader line ai.iDelimited = 1; // use delimiter ai.iDelimiter = ASCIMP_DELIM_DEMICOLON; // semicolon as delimiter int nret = AscImpReadFileStruct(fileName, &ai, AIRF_USE_ASCIMP); if(0 == nret ) { // import wks.ImportASCII(fileName, ai); } }
This sample shows how to import a csv file and trim all the quotes around text entries. Please note that fu_utils.c is needed to use ascii import functions. You can run the following LabTalk script to load and compile it.
run.LoadOC(Originlab\fu_utils.c);
Then compile the Origin C code below.
#include <..\originlab\fu_utils.h> void ImportASCII_Ex4() { string fileName = GetOpenBox("*.csv"); // csv file browser if( !fileName.IsFile()) return; // create a new worksheet Worksheet wks; wks.Create(); // ascii import ASCIMP ai; initASCIMP(ai); // initialize ai.iAutoSubHeaderLines = 1; // auto detect subheader line ai.iDelimited = 1; // use delimiter ai.iDelimiter = ASCIMP_DELIM_COMMA; // comma as delimiter ai.iNonnumeric = 1; // NONNUMERIC_READ_AS_MISSING // special quote symbol and remove it when import ai.cQuote = '\"'; ai.flags |= AI_FLAG_REMOVE_QUOTES; int nret = AscImpReadFileStruct(fileName, &ai, AIRF_USE_ASCIMP); if(0 == nret ) { // import wks.ImportASCII(fileName, ai); } }