「セクション」が。で分割された大きなファイルがあります***
。各セクションのハッシュと、各セクションが新しい形式で書き込まれる新しいファイルを作成する必要があります(セクションに複数のファイルを書き込む場合があります)。各セクションには、ハッシュに変換するための固有のロジックが必要です( ""、 "\ n"、 "="、または'/ some patter /'で分割)。
セクションを識別し、適切なロジックを適用してセクションをハッシュに変換するためのアプローチを探しています。個々のロジックピースを書くことはできますが、それらはパターンに基づいて呼び出される個別のメソッドまたはクラスですか?
ファイルが大きいので、1行ずつ読み取り、操作、書き込みを試みています。セクション間で線をグロブする方法を見てきましたが、そのタイプのソリューションは特に気にしません。セクション間の行を取得し、必要に応じて行ごとに異なるロジックを適用する方法について、少し混乱しています。
どんな方向でも大歓迎です。ありがとう!
入力ファイルの一部を次に示します。
*** 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
これまでのところ、私が持っているものは次のとおりです。
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
私は今、次のようなことを試みています:
while /found section/
if /match pattern a/
call parsera
if /match pattern b/
call parserb
end
parsera
while =! /a section/
do stuff
return?