Showing posts with label Ruby for CSV file Import using ODIC in WS Pro. Show all posts
Showing posts with label Ruby for CSV file Import using ODIC in WS Pro. Show all posts

Saturday, October 21, 2023

Ruby for CSV file Import using ODIC in WS Pro

 # Reference to the GitHub script: https://github.com/modelcreate/infoworks-ruby-scripts/blob/master/scripts/open_data_import_centre/import_model.rb


# Import the necessary library for file utilities

require 'FileUtils'


# Get the current open network in InfoWorks

open_net = WSApplication.current_network


# Prompt the user to select a folder for importing files

shp_dir = WSApplication.folder_dialog 'Select a folder to import files', true 


# The configuration (CFG) files are kept in the same directory as this Ruby script

cfg_dir = File.dirname(WSApplication.script_file) 


# Define paths for the error file and the script file

err_file = shp_dir + '\errors.txt'

script_file = cfg_dir + '\odic_script.bas'


# Define the layers and their respective configuration and shape file paths

layers = {

    "hydrant" => { "cfg" => cfg_dir + '\hydrant.cfg', "shp" => shp_dir + '\hydrants.shp'},

    "valve" => { "cfg" => cfg_dir + '\valve.cfg', "shp" => shp_dir + '\valves.shp'},

    "polygons" => { "cfg" => cfg_dir + '\polygons.cfg',  "shp" => shp_dir + '\dma.shp' },

    "pipe" => { "cfg" => cfg_dir + '\pipe.cfg', "shp" => shp_dir + '\mains.shp' }

}


# Iterate through each layer and import the data

layers.each do |layer, config|

    puts "Importing IW layer: #{layer}"


    # Skip the import if the shape file doesn't exist

    if File.exist?(config["shp"]) == false

        puts "Shape file not found for #{layer} layer - #{config["shp"]}"

        next

    end


    # Define additional options for the import

    options = {

        "Error File" => err_file,    # Location to save error logs

        "Set Value Flag" => 'IG',   # Import Flag

        "Script File"=> script_file # Import Script (ICM .rb / WS .bas)

    }


    # Execute the import function

    open_net.odic_import_ex(

        'shp',            # Source Type: Shapefile

        config["cfg"],    # Field mapping configuration

        options,          # Additional options in Ruby Hash format

        layer,            # InfoWorks Layer to import to

        config["shp"]     # Location of the shape file

    )


    # Append the error log with the completion status of each layer

    File.write(err_file, "\n End of #{layer} import \n", File.size(err_file))

end


# Read and output the content of the error log to the console

File.readlines(err_file).each do |line|

    puts line

end


# Print a completion message

puts "Finished Import"


AI Rivers of Wisdom about ICM SWMM

Here's the text "Rivers of Wisdom" formatted with one sentence per line: [Verse 1] 🌊 Beneath the ancient oak, where shadows p...