Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在固定结构化XML中替换值的最快方法_Xml_Fortran - Fatal编程技术网

在固定结构化XML中替换值的最快方法

在固定结构化XML中替换值的最快方法,xml,fortran,Xml,Fortran,我需要运行数百次(或更多)的模拟迭代,从.xml文件读取其参数。此文件有约83k行 此模拟中的参数示例为: <ScalarVariable name = "nr_resources_init" valueReference = "2721" description = "Initial available non-recoverable resources" variability = "parameter" isDiscrete = "true" causalit

我需要运行数百次(或更多)的模拟迭代,从.xml文件读取其参数。此文件有约83k行

此模拟中的参数示例为:

  <ScalarVariable
  name = "nr_resources_init"
  valueReference = "2721"
  description = "Initial available non-recoverable resources"
  variability = "parameter" isDiscrete = "true"
  causality = "internal" isValueChangeable = "true"
  alias = "noAlias"
  classIndex = "1415" classType = "rPar"
  isProtected = "false" hideResult = "false"
  fileName = "[path to model file]" startLine = "4602" startColumn = "9" endLine = "4602" endColumn = "119" fileWritable = "true">
  <Real start="1000000000000.0" fixed="true" useNominal="false" unit="ton" />
  </ScalarVariable>

因为以下原因…:

  • 模拟使用一个可执行文件运行,该可执行文件自动读取.xml的初始状态(参数)
  • 在Fortran中,我需要搜索并替换参数(“nr_resources_init”)的值(“本例中为“Real”子节点中的10000000000”),然后用系统调用调用可执行文件
  • xml在模拟之前自动生成(仅一次),并且它将始终具有相同的结构。因此,我认为使用正则表达式进行搜索和替换不会成为问题
。。。我认为使用“大量使用XML的库”是一种过分的做法,而且可能不是最快的选择。因此,我尝试使用sed和perl,但找不到正确的正则表达式


用Fortran编程或使用系统调用将给定参数的值替换为给定新值的最佳/最快方法是什么?

是否使用可用的Fortran库之一来处理XML?如果是这样的话,请具体说明,并清楚说明您尝试了什么以及您失败的地方。如果没有,您可能希望选择一个比裸Fortran具有更好的内在XML处理功能的编程系统。但不是缺少处理XML的表达能力的正则表达式。“因此,我尝试使用sed和perl,但找不到正确的正则表达式。”你有没有阅读过?或者@HighPerformanceMark,在研究Fortran可用的XML库之前,我决定在这里询问一下,这是否是正确的选择,还是会有很多开销。看来您根本不打算将该文件视为XML。如果您对这种方法感到满意,我就不必费心用库来读取和转换XML了。至少使用一个Fortran XML库会增加您必须学习如何使用它的开销。在我看来,你真的应该修正你基于正则表达式的方法。如果我是你的话,我会删除这个问题,然后问这个问题。只要把83k行读入一个数组,比如“CHARACTER(LEN=256),DIMENSION(83000):I XML_行”。然后根穿过每一行,改变10000ˆ?然后写出新的文件。总共大约30行。