class EnergyPlus::EpEsoFile

Public Class Methods

new(path) click to toggle source
# File lib/energyplus/EsoFile.rb, line 75
def initialize(path)
  File.open(path) do |f|
    @variables = nil
    # first six lines are discarded
    6.times {f.gets}
    @text = f.read
  end
end

Public Instance Methods

data() click to toggle source
# File lib/energyplus/EsoFile.rb, line 88
def data
  return @text.match(/(End\sof\sData\sDictionary)(.*?)(End\sof\sData)/m)[2]
end
dictionary() click to toggle source
# File lib/energyplus/EsoFile.rb, line 84
def dictionary
  return @text.match(/(.*?)(End\sof\sData\sDictionary)/m)[1]
end
dictionary_entries() click to toggle source
# File lib/energyplus/EsoFile.rb, line 92
def dictionary_entries
  dictionary_entries = []
  dictionary.split("\n").each do |entry|
    interval = entry.match(/(!)(\w+)(\s*)/)[2].strip
    fields = entry.match(/(.*?)(!)/)[1].split(',')
    id = fields[0]
    key,var_name = fields[2,3] if fields[1] =~ /2/
    key,var_name = nil, fields[2] if fields[1] =~ /1/
    units = var_name.match(/(.*?)(\[)(.*?)(\])/)[3]
    var_name = $1.strip
    dictionary_entries << DictionaryEntry.new(id,key,var_name,units,interval)
  end
  return dictionary_entries
end
variables() click to toggle source
# File lib/energyplus/EsoFile.rb, line 107
def variables
  unless @variables
    @variables = []
    text = data
    dictionary_entries.each do |dictionary_entry|
      if dictionary_entry.interval =~ /Hourly/
        timestamps = text.scan(/^2,.*?,\s0\.00,60\.00,.*/).map { |entry| entry.split(',') }
      elsif dictionary_entry.interval =~ /TimeStep/
        timestamps = text.scan(/^2,.*/).reject { |entry| entry =~ /^2,.*?,\s0\.00,60\.00,.*/}.map { |entry| entry.split(',') }
      elsif dictionary_entry.interval =~ /Daily/
        timestamps = text.scan(/^3,/).map { |entry| entry.split(',') }
      elsif dictionary_entry.interval =~ /Monthly/
        timestamps = text.scan(/^4,/).map { |entry| entry.split(',') }
      end
      var_data = text.scan(Regexp.new("^#{dictionary_entry.id},.*")).map { |entry| entry.split(',') }
      @variables << Variable.new(dictionary_entry,var_data,timestamps)
    end
  end
  return @variables
end