Note that there are some explanatory texts on larger screens.

plurals
  1. POmake ruby hashes from unique logic based on different sections in a file
    text
    copied!<p>I have a large file with "sections" broken up by <code>***</code>. I must create a hash for each section and a new file where each section is written in a new format (I may write multiple files for sections). Each section requires unique logic to convert into a hash (split by " ", or "\n", or "=", or '/some patter/').<br> I'm looking for an approach for identifying sections and applying the appropriate logic to convert the section into a hash. I can write the individual logic pieces, but are they separate methods or classes called based on a patterns? </p> <p>With the file being large I'm attempting to read, manipulate, and write line by line. I've seen ways to glob lines between sections but don't particularly care for that type of solution. I'm a little confused on how to grab lines between sections and apply different bits of logic when appropriate, line by line.</p> <p>Any direction is appreciated. Thanks!</p> <p>Here's SOME of the input file:</p> <pre><code> *** Summary *** Job Name = test Date created: Mon Jan 14 15:48:33 2013 *** Analysis Information Steady State is ON Turbulent Incompressible Flow is ON Static Temperature Equation is ON Mixed Convection is ON *** Field Variable Results Summary For Iteration 300 Var Mean at Max at Min Vx Vel +5.71519e+002 1320103 +3.02718e+004 1319857 -2.66582e+004 mm/s Vy Vel +3.40035e+002 158922 +2.79257e+004 1319731 -1.42855e+004 mm/s Vz Vel -7.17959e+002 1318038 +1.62986e+004 1319053 -2.21582e+004 mm/s Press -2.05980e+001 50858 +5.19412e+003 50905 -1.44865e+003 N/m^2 Temp +4.60000e+001 10965 +4.60000e+001 315867 +4.60000e+001 C TurbK +1.19616e+006 1319490 +1.44421e+008 10966 +1.81700e-008 mm^2/s^2 TurbD +1.71412e+009 1319490 +2.88554e+011 233065 +5.37798e-004 mm^2/s^3 Scal1 +0.00000e+000 10965 +0.00000e+000 315867 +0.00000e+000 PTotl -5.91285e+000 50858 +5.19412e+003 50905 -1.44865e+003 N/m^2 EVisc +2.52037e-004 1320370 +1.14488e-002 2229 +0.00000e+000 g/mm-s ECond +1.05355e-002 1352833 +5.88890e-002 2229 +0.00000e+000 W/mm-K Dens +2.34793e-004 58024 +3.43080e-003 315867 +1.20473e-006 g/mm^3 Visc +1.62605e-005 10965 +1.81700e-005 2229 +0.00000e+000 g/mm-s Cond +2.50840e-002 2229 +2.04000e-001 315867 +2.56300e-005 W/mm-K SpecH +1.01202e+000 38432 +1.81000e+000 10249 +1.00500e-003 J/g-K Emiss +8.94911e-001 10965 +1.00000e+000 2229 +0.00000e+000 Transmiss +0.00000e+000 0 +0.00000e+000 0 +0.00000e+000 WRough +0.00000e+000 10965 +0.00000e+000 315867 +0.00000e+000 mm SeeBeck +0.00000e+000 0 +0.00000e+000 0 +0.00000e+000 V/K GenT +1.11977e+003 223286 +1.18027e+005 584515 +3.19558e-013 1/s *** Openings *** *** Outlet 1 *** Surface ID = 2329 Node near Minimum X,Y,Z of opening = 11761 Minimum X,Y,Z of opening = 369.964000, 11.275438, -98.433898 Mass Flow Out = -1.55703 g/s Volume Flow Out = -1.29242e+006 mm^3/s Reynolds Number = 1303.45 Outlet Bulk Pressure = -0 N/m^2 Outlet Bulk Temperature = 46 C Outlet Mach Number = 0.00734951 *** Outlet 2 *** Surface ID = 2332 Node near Minimum X,Y,Z of opening = 11125 Minimum X,Y,Z of opening = 369.964000, 73.727289, -114.615876 Mass Flow Out = -20.4612 g/s Volume Flow Out = -1.6984e+007 mm^3/s Reynolds Number = 11182.5 Outlet Bulk Pressure = -0 N/m^2 Outlet Bulk Temperature = 46 C Outlet Mach Number = 0.0079087 *** Outlet 3 *** Surface ID = 2335 Node near Minimum X,Y,Z of opening = 10924 Minimum X,Y,Z of opening = 369.964000, 164.751344, 40.640056 Mass Flow Out = -32.8714 g/s Volume Flow Out = -2.72852e+007 mm^3/s Reynolds Number = 17965 Outlet Bulk Pressure = -0 N/m^2 Outlet Bulk Temperature = 46 C Outlet Mach Number = 0.00750077 *** Fluid Energy Balance Information: MdotIn x Cp x (TOut - TIn) = 663.69 Watts (Numerical) Energy Out - Energy In = 0.36447 Watts Heat Transfer from Wall To Fluid = 761.35 Watts Heat Transfer Due to Sources In Fluid = 0 Watts *** Solid Energy Balance Information: Heat Transfer from Exterior To Solid = 0 Watts Heat Transfer Due to Sources In Solid = 761 Watts Heat Transfer From Fluid To Solid = -761.31 Watts *** Sum of Fluid Forces on Walls *** ShearX, PressX = 68651 78199 microNewtons ShearY, PressY = 39030 6.9349e+006 microNewtons ShearZ, PressZ = -19749 -4.1017e+006 microNewtons *** Data for internal fans Fan Part Id = 16 Fan Name = fname1 Operating Pressure Rise = 0.46945 Inches of Water Operating FlowRate = 36.0109 CFM Fan Part Id = 94 Fan Name = fname2 Operating Pressure Rise = 0.309645 Inches of Water Operating FlowRate = 2.33407 CFM Fan Part Id = 95 Fan Name = fname3 Operating Pressure Rise = 0.267133 Inches of Water Operating FlowRate = 8.78264 CFM *** Analysis Statistics: Input: 461 seconds Analysis: 12686 seconds Output: 179 seconds Total: 13326 seconds </code></pre> <p>So far here is what I have:</p> <pre><code>sum_file = File.new('sum_file.sum', 'r') sum_file_hashed = File.new('sum_file_hashed', 'w') inSection = false #flag when in or out of a section? while (line = sum_file.gets ) #while reading lines case line when /\*{3}/ #Found Sections by *** inSection = true #in a section l = line.gsub('*', '').strip sum_file_hashed.puts('Found a section: ' + l ) #write section name end ### I'm not sure how to introduce specific logic when in a certain type of section ### end sum_file.close sum_file_hashed.close </code></pre> <p>I'm now attempting something like:</p> <pre><code>while /found section/ if /match pattern a/ call parsera if /match pattern b/ call parserb end parsera while =! /a section/ do stuff return? </code></pre>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload