特色技术

专业从事预应力结构体系的设计、施工一体化解决方案

资讯分类

用异常机制快速查找数据文件中的错误

  • 分类:程序技术
  • 作者:
  • 来源:
  • 发布时间:2016-05-25 01:55
  • 访问量:

【概要描述】在后张法有粘结预应力板后处理程序应用过程中,需要填写StripName.txt、as.txt、loadcase.txt、yyl.txt等文件,其中as.txt、loadcase.txt、yyl.txt文件结构相对简单短小,不容易出错。StripName.txt则比较复杂,一般4万平米的地下车库需要填写1000多条stripname记录,在填写过程中,难免会有数据的错漏遗失。程序每次读写数据文件,若

用异常机制快速查找数据文件中的错误

【概要描述】在后张法有粘结预应力板后处理程序应用过程中,需要填写StripName.txt、as.txt、loadcase.txt、yyl.txt等文件,其中as.txt、loadcase.txt、yyl.txt文件结构相对简单短小,不容易出错。StripName.txt则比较复杂,一般4万平米的地下车库需要填写1000多条stripname记录,在填写过程中,难免会有数据的错漏遗失。程序每次读写数据文件,若

  • 分类:程序技术
  • 作者:
  • 来源:
  • 发布时间:2016-05-25 01:55
  • 访问量:
详情

  在后张法有粘结预应力板后处理程序应用过程中,需要填写StripName.txt、as.txt、loadcase.txt、yyl.txt等文件,其中as.txt、loadcase.txt、yyl.txt文件结构相对简单短小,不容易出错。StripName.txt则比较复杂,一般4万平米的地下车库需要填写1000多条stripname记录,在填写过程中,难免会有数据的错漏遗失。程序每次读写数据文件,若处理不当,就容易出错,轻者弹错退出,重者程序崩溃。设计人员在检查核对数据文件时,这个过程较痛苦,想从上千条数据记录中巡查出错误信息,犹如大海捞针,几乎是遥不可及的任务,时间与精力不得不花费很多。

  为了提高效率,可以利用C++的异常机制来查错,并反馈错误信息。异常是C++编程过程中非常重要的机制,简而言之就是处理程序中的错误。异常机制的基本思想是:让一个函数在发现了自己无法处理的错误时抛出(throw)一个异常,然后它的(直接或者间接)调用者能够处理这个问题。

  常规错误处理技术当检查到一个无法处理的问题时,有四种解决方法:(1)终止程序(terminate); (2)返回一个表示错误序号的值;(3)返回一个合法的值,使得程序处于非法状态(4)调用一个预先错误处理的程序。这四种方法几乎都不太合理,也容易出现一些新的问题,由于篇幅的原因,这里不再展开。

  《C++ primer》中说:异常机制可以将问题检测和问题处理相分离,也就是把错误信息和错误处理几乎完全分开,由C++标准库函数抛出异常,调用者可以捕获这个异常,调用者就可以知道程序函数库调用出现错误了,并去处理,而是否终止程序就把握在调用者手里了。

  在数据文件处理过程中,会出现大量异常,譬如文件路径不存在、文件名错误、文件内容错误或者缺失、文件读写状态不一致、文件已打开未关闭等等,我们遇到的问题是最麻烦的文件内容遗失缺漏的问题。

  不是一般性,读写数据文件时,几乎都利用了C++标准程序库的vector动态数组,设定的文件格式与此高度相关,读写数据文件时必须一一对应,若错误一个数字、一个数据类型都会导致莫名的错误发生,且很难检查。我们设定的目标是检查出该错误出自哪一行,哪一列,在哪个板带位置发生,并且将该信息记录到一个数据文件中去,便于集中处理。

  vector有一个at()函数,可以检查下标是否越界,如果越界就抛出一个out_of_range异常。因此利用这个函数可以简单地编写语句如下:

  try

  {

  d=atof(v_douhao.at(j+3).c_str());

  }

  catch(const std::exception&error)

  {

  fs1<<error.what()<<":板带名称:"<<v_douhao[0]<<",第"<<i<<"行,"<<",第"<<j<<"列\n";

  }

  其中fs1表示数据文件流,try用来捕捉异常的发生,v_douhao(j+3)在错失遗漏的情况下,将会越界。catch中的std:exception为标准程序库中的异常类型,用error表示,输出的error.what()函数可以显示错误类型是什么,后面依次输出的则是板带名称、第几行、第几列,这样就可以一目了然地查找错误。

  程序运行效果如下图所示:

  找到错误源CSA6,第二列遗失高度。Autocad显示CSA6跨数异常。

  修改数据文件以后的运行效果如图所示。

  总结:应用C++异常机制,可以方便、快捷地找到错误源,既提高了效率,又使得程序的健壮性得到有效提升。

扫二维码用手机看