我最近帮别人做了一个小软件,主要是用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,等待计算机成批处理。
当然还可以用其它方式调用该程序,读者自己去研究,这里不介绍了。