阳光石油网|石油技术交流|石油人论坛

 找回密码
 欢迎注册
查看: 99|回复: 0

【转载】32.如何将Eclipse和IAM输出的RSM类型文件自动转换为CSV格式

[复制链接]
  • TA的每日心情
    开心
    2024-4-5 22:44
  • 签到天数: 2 天

    [LV.1]初来乍到

    发表于 2021-11-23 12:03:37 | 显示全部楼层 |阅读模式

    马上注册,下载丰富资料,享用更多功能,让你轻松玩转阳光石油论坛。

    您需要 登录 才可以下载或查看,没有账号?欢迎注册

    x
    1. RSM文件介绍
    Eclipse和IAM中的模型结果输出为RSM为后缀的文件。此文件的数据为文本型,内部是以块表的形式保存了所有已定义的结果数据:每个数据块为10列的块表,块表的行内容为模型的数据结果值,行数是基于模拟的天数的变值,达到最大列数(10)后,将其他参数再继续写入下一个块表,重复此过程,直到将将所有参数结果写入完毕。
    此文件结构中的列定义和行定义都不是一个固定值,是基于模型的数据结果而定,所以很难直接将这些结果直接导入其他软件使用。为了解决此问题,可以用编程的方法自动化的将RSM文件转换为csv文件,这样其他软件都可以轻松的导入csv文件来使用Eclipse或IAM的模拟结果。以下示例是用C# .NET编写,当然也可以用其他的编程语言,实现思路可参考此文实现。
    2. 技术实现
    如介绍中所述,RSM文件具有非常规文件结构。 要将此文件转换为csv文件,需要首先解析RSM文件。 因此,首先编写一个解析器,它遍历RSM文件中的所有块表,并将它们存储在表的数组中,再循环遍历解析每个块表中的数据将其写入到csv文件。
    创建的类结构如下:
    •RsmFile:表示实际的RSM文件
    •RsmBlock:每个RSM文件由许多块表组成,块列为1个日期列和9个参数列
    •RsmTable:包含参数值的实际表
    2.1 RSMFile数据结构
    RSMFile结构定义如下:
    •块1
    ØBlockHeader1
    ØTableHeader1
    ØTableValues1
    •块2
    ØBlockHeader2
    ØTableHeader2
    ØTableValues2
    •等等
    为了显示RSM文件结构,使用了Eclipse示例中的SPE9示例。
    这是RSM块表的示例。红色标题显示模型的名称,使用的Eclipse版本,执行的日期戳和电脑名,以虚线结束。
    绿色的表头显示表的列定义。在此示例中,表头的第一行是参数类型,第二行是参数单位,第三行是井名称。
    蓝色表格包含所有值。第一列始终是日期或时间戳(使用关键字DATE或TIME)。该表在新块开始的位置结束,或者在到达最后一个块的位置结束,为空行。
    块的开始由数字1识别。这可用于解析RSM文件中的不同块。
    2.2 RsmFile.Parse()
    为了解析RSM文件,我们需要调用RsmFile.Parse()。 这将创建RsmFile对象的新实例。
    RsmFile rsmFile = RsmFile.Parse(File.ReadAllLines(rsmPath).ToArray());
    .Parse()方法要求包含实际文件的所有行的字符串数组。
    2.3 RsmFile.ToCsv()
    创建RsmFile对象时,我们可以使用ToCsv()方法创建csv文件。 下一个示例显示如何调用ToCsv()方法并将结果写入文件:
    3. 工具使用
    此示例中实现的转换工具编写为命令行,应用举例:
    C:\EclipseRsmToCsv>EclipseRsmToCsv.exe EclipseRsmToCsv 1.0.0.0
    Copyright c   2017
    -i, --input   必填项. RSM文件.
    -o, --output   必填项..csv文件.
    -m, --measurements   必填项. 参数项.
    -s, --start   [可选] 开始日期.
    Format[dd/MM/yyyy].
    -e, --end   [可选] 结束日期.
    Format[dd/MM/yyyy].
    -h, --help   显示帮助信息.
    前三个参数是必需的:
    -i 输入RSM文件的路径
    -o csv文件写入的位置
    -m 输出中需要哪些参数类型(例如WGPR和WGIR)。
    最后两个参数是可选的:可以指定开始日期和结束日期,以便仅将部分模拟结果写入csv。
    注意:如果TIME关键字用作RSM文件中的时间戳,则需要开始日期才能计算日期戳。 如果未选择开始日期,则使用默认的开始日期01/01/1900。 如果使用DATE关键字,则不必指定开始日期。
    例子:
    C:\ EclipseRsmToCsv> EclipseRsmToCsv.exe -i SPE9.RSM -o SPE9.csv -m WGPR
    将WGPR写入SPE9.csv。
    C:\ EclipseRsmToCsv> EclipseRsmToCsv.exe -i SPE9.RSM -o SPE9.csv -m WGPR WGIR
    将WGPR和WGIR写入SPE9.csv。
    C:\ EclipseRsmToCsv> EclipseRsmToCsv.exe -i SPE9.RSM -o SPE9.csv -m WGPR -s 01/01/2015 -e 31/12/2015
    将2015年的WGPR和WGIR写入SPE9.csv。
    4. CSV结果文件
    EclipseRsmToCsv以下列格式输出csv:
    WGPR,MSCF/DAY,,PROD2,1-1-2015,0 WGPR,MSCF/DAY,,PROD2,2-1-2015,2054.024
    WGPR,MSCF/DAY,,PROD2,3-1-2015,2028.551 WGPR,MSCF/DAY,,PROD2,7-1-2015,2004.881
    WGPR,MSCF/DAY,,PROD2,13-1-2015,2004.653
    第一列是参数类型,第二列是单位,第三列是可选倍数,第四列是井名,第五列是日期戳,第六列是参。

    您需要登录后才可以回帖 登录 | 欢迎注册

    本版积分规则

    QQ|Archiver|手机版|小黑屋|阳光石油网 ( 鲁ICP备2021003870号-1 )

    GMT+8, 2025-1-19 04:56 , Processed in 0.065313 second(s), 19 queries .

    Powered by Discuz! X3.4 Licensed

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表