Import ASCII

 

Version Info

Minimum Origin Version Required: Origin 8 SR0

Description

To import ASCII data, the method Datasheet::IimportASCII can be used. It allows to customize importation.

How to setup header lines to column lables after import

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");
}

To show how to do partial import

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");  
}

How to import a data file by using semicolon as delimiter

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);
        }     
}

How to Remove Quotation Marks from csv Files

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);
    }   
}