经历Origin

类别:编程语言 点击:0 评论:0 推荐:

我最近帮别人做了一个小软件,主要是用Origin C来实现Origin的成批处理数据的功能,我原先没用过Origin这个工具,一用才发觉它挺好用的,特别是手头有一些实验数据想用它分析、统计用来写论文什么的特方便。这里重点介绍一下我用的技术。

先做一个简单介绍:

Origin是美国Microcal公司出的数据分析和绘图软件,现在的最高版本为7.0 http://www.originlab.com/。

特点:使用简单,采用直观的、图形化的、面向对象的窗口菜单和工具栏操作,全面支持鼠标右键、支持拖方式绘图等。

两大类功能:数据分析和绘图。数据分析包括数据的排序、调整、计算、统计、频谱变换、曲线拟合等各种完善的数学分析功能。准备好数据后,进行数据分析时,只需选择所要分析的数据,然后再选择响应的菜单命令就可.Origin的绘图是基于模板的,Origin本身提供了几十种二维和三维绘图模板而且允许用户自己定制模板.绘图时,只要选择所需要的模版就行。用户可以自定义数学函数、图形样式和绘图模板;可以和各种数据库软件、办公软件、图像处理软件等方便的连接;可以用C等高级语言编写数据分析程序,还可以用内置的Lab Talk语言编程等。

       对于其它基础方面,请到网上去搜索。我要做的是将某一目录(含子目录和文件)下的数据文件成批生成Origin工程文件,并根据数据绘图。

因为:

1.         使用Origin C和LabTalk混合编程实现成目录下文件自动枚举和数据成批处理。Origin C擅长于逻辑处理,LabTalk擅长于Origin7的内置操作。

2.         用户只要输入要处理数据的目录,程序成批处理生成按照要求命名的.OPJ文件置于相应目录下。

void ImportAndPlot(string strFile)//处理数据,传入文件全路径名,绘图处理

{

       string cmd = strFile;

       int pos = strFile.ReverseFind('\\');

       string wks;

       string path = strFile.Mid(0,pos+1);

       cmd.Insert(0,"open -w ");

       LT_execute(cmd);//执行LabTalk操作,后同。

       double nCols;

       LT_get_var("wks.nCols",&nCols);

       char       szTemp[100];

       LT_get_str("%H", szTemp, 100);

       wks = szTemp;

       LT_execute("win -t plot line");

       for(int i = 2; i <= nCols; i++)

       {

              cmd.Format("%%B=%s!wks.col$(%d).name$",wks,i);

              LT_execute(cmd);

              cmd.Format("layer -i %s_%%B",wks);

              LT_execute(cmd);

              LT_execute("layer -a");

              cmd.Format("%%B=%s!wks.col$(%d).label$",wks,i);

              LT_execute(cmd);

              char       szTemp[100];

              LT_get_str("%B", szTemp, 100);

              string str(szTemp);

              pos = str.ReverseFind('(');

              str.Delete(pos,str.GetLength()-pos);

              cmd.Format("save %s%s.OPJ",path,str);

              LT_execute(cmd);

       }

       LT_execute("doc -n");

}

void dir(string strFile)//遍历指定目录下所有文件并调用数据处理函数ImportAndPlot

{

       WIN32_FIND_DATAA       find;

       HANDLE       hFile;

       string strFolder;

       if((hFile=FindFirstFile(strFile,&find)) != INVALID_HANDLE_VALUE)

       {

              while(FindNextFile(hFile,&find))

              {

                     strFolder = strFile;

                     strFolder.Delete(strFolder.GetLength()-3,3);      

                     strFolder.Insert(strFolder.GetLength(),find.cFileName);

                     if(strFolder.Right(4).CompareNoCase(".txt") == 0)

                     {

                            ImportAndPlot(strFolder);//处理txt文件

                     }

                     else if(strFolder.Find('.') == -1)//(子)文件夹,继续遍历

                     {

                            strFolder.Insert(strFolder.GetLength(),"\\*.*");

                            dir(strFolder);

                     }

              }

              FindClose(hFile);

       }

       else

              printf("%s: file(s) not found\n",strFile);

}

 

void test()

{

       string strFile = InputBox("请输入(或拷贝)要处理的数据目录全路径:");

       strFile += "\\*.*";

       dir(strFile);

}

使用说明:

1.         将上述文件保存为h.c

2.         再将h.c拷到Origin程序的OriginLab\OriginPro70\OriginC下。

3.         将Custom.OGS覆盖Origin程序的OriginLab\OriginPro70目录下的Custom.OGS。

4.         启动Origin7软件,点击工具栏上的“Custom Routine”按钮。

5.         在弹出的输入框中输入要处理数据的目录,然后点击OK,等待计算机成批处理。

当然还可以用其它方式调用该程序,读者自己去研究,这里不介绍了。

本文地址:http://com.8s8s.com/it/it29094.htm