I need to make a script tool that will consolidate attributes from many rows into to one across a number of columns. The tool will need to be able to let the user select the field "key" field as well as the fields that will be consolidated. I made a quick mockup table as my input table (it has been processed with spatial sort so that parts of the key features that are spatially adjacent to each other are also in adjacent rows in the table).
Mockup table. It has land ownership and PLSS (Public Land Survey System) MTRS (meridian township range section) information.
| Key_Feature | Owner | MTR | SECTION | MTRS | MER |
| Facility 1 | Private | U009N008E | 33 | U009N008E33 | U |
| Facility 1 | Federal | U009N008E | 33 | U009N008E33 | U |
| Facility 1 | Private | U009N008E | 34 | U009N008E34 | U |
| Facility 1 | Federal | U009N008E | 34 | U009N008E34 | U |
| Facility 1 | Private | U008N008E | 4 | U008N008E04 | U |
| Facility 2 | Private | U008N008E | 3 | U008N008E03 | U |
The output should look like this.
| Key_Feature | MTRS | Owner |
| Facility 1 | U, T09N, R08E: 33, 34 U, T08N, R08E: 4 | Federal, Private |
| Facility 2 | U, T08N, R08E: 3 | Private |
The question: I would like input on the best method to get the result. And if there are any out of the box Arc tools that I could leverage...
My first pass at this was to use arcpy.da.SearchCursor and iterate over the input table and check to see if the current row's key feature is the same as the previous row's key feature. If so, then add it to a string variable. When the key features do not match write the string variable and other fields to the output file. The MTRS roll up is a little more complex because sections needs to rolled up for each unique MTR associated with the key feature. It feels a little wired because you are always looking back in rows as you iterate over the table. So, I used a number of temp_last variables for key features, MTRS, etc. I was thinking that it would be better to read the whole table into a list of lists and then use that to generate the output. That way I could use indexing to look at the next and last rows without having to use the temp_last variables.
The below code I made for a similar one off.
<SPAN class="keyword token">import</SPAN> arcpy
<SPAN class="keyword token">import</SPAN> os
arcpy<SPAN class="punctuation token">.</SPAN>env<SPAN class="punctuation token">.</SPAN>overwriteOutput <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">True</SPAN>
in_path <SPAN class="operator token">=</SPAN> r<SPAN class="string token">"xyz"</SPAN>
out_path <SPAN class="operator token">=</SPAN><SPAN class="string token">"xyz"</SPAN>
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">tsv_write</SPAN><SPAN class="punctuation token">(</SPAN>tsv_row<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">for</SPAN> item <SPAN class="keyword token">in</SPAN> tsv_row<SPAN class="punctuation token">:</SPAN>
tsv<SPAN class="punctuation token">.</SPAN>write<SPAN class="punctuation token">(</SPAN>item <SPAN class="operator token">+</SPAN> <SPAN class="string token">"\t"</SPAN><SPAN class="punctuation token">)</SPAN>
tsv<SPAN class="punctuation token">.</SPAN>write<SPAN class="punctuation token">(</SPAN><SPAN class="string token">"\n"</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">rollup</SPAN><SPAN class="punctuation token">(</SPAN>rollup_list<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
rollup_list <SPAN class="operator token">=</SPAN> set<SPAN class="punctuation token">(</SPAN>rollup_list<SPAN class="punctuation token">)</SPAN>
rollup_list <SPAN class="operator token">=</SPAN> list<SPAN class="punctuation token">(</SPAN>rollup_list<SPAN class="punctuation token">)</SPAN>
rollup_list<SPAN class="punctuation token">.</SPAN>sort<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
rollup_str <SPAN class="operator token">=</SPAN> <SPAN class="string token">""</SPAN>
<SPAN class="keyword token">for</SPAN> sec <SPAN class="keyword token">in</SPAN> rollup_list<SPAN class="punctuation token">:</SPAN>
rollup_str <SPAN class="operator token">=</SPAN> rollup_str <SPAN class="operator token">+</SPAN> str<SPAN class="punctuation token">(</SPAN>sec<SPAN class="punctuation token">)</SPAN> <SPAN class="operator token">+</SPAN> <SPAN class="string token">", "</SPAN>
rollup_str <SPAN class="operator token">=</SPAN> rollup_str<SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">:</SPAN><SPAN class="operator token">-</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="keyword token">return</SPAN> rollup_str
<SPAN class="keyword token">def</SPAN> <SPAN class="token function">from_to_fix</SPAN><SPAN class="punctuation token">(</SPAN>x<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">:</SPAN>
x <SPAN class="operator token">=</SPAN> round<SPAN class="punctuation token">(</SPAN>x<SPAN class="punctuation token">,</SPAN> <SPAN class="number token">1</SPAN><SPAN class="punctuation token">)</SPAN>
x <SPAN class="operator token">=</SPAN> str<SPAN class="punctuation token">(</SPAN>x<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">return</SPAN> x
search_cursor <SPAN class="operator token">=</SPAN> arcpy<SPAN class="punctuation token">.</SPAN>da<SPAN class="punctuation token">.</SPAN>SearchCursor<SPAN class="punctuation token">(</SPAN>in_path<SPAN class="punctuation token">,</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="string token">"Main_LandOwnership_MTRS_Mbook_Meridian"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"Main_LandOwnership_MTRS_Mbook_Town_Range"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"Main_LandOwnership_MTRS_Mbook_SECTION"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"Main_LandOwnership_MTRS_Mbook_F_MP"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"Main_LandOwnership_MTRS_Mbook_T_MP"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"Main_LandOwnership_MTRS_Mbook_Index_Order"</SPAN><SPAN class="punctuation token">,</SPAN>
<SPAN class="string token">"Main_LandOwnership_MTRS_Mbook_ROW_Designation"</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
tsv <SPAN class="operator token">=</SPAN> open<SPAN class="punctuation token">(</SPAN>out_path<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"w"</SPAN><SPAN class="punctuation token">)</SPAN>
meridian_last <SPAN class="operator token">=</SPAN> None
township_last <SPAN class="operator token">=</SPAN> None
f_mile_last <SPAN class="operator token">=</SPAN> None
t_mile_last <SPAN class="operator token">=</SPAN> None
owner_last <SPAN class="operator token">=</SPAN> None
township_list <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN>
township_section_list <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN>
first_row_flag <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">True</SPAN>
township_append_flag <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">True</SPAN>
section_list <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN>
index_order_list <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="keyword token">for</SPAN> row <SPAN class="keyword token">in</SPAN> search_cursor<SPAN class="punctuation token">:</SPAN>
meridian <SPAN class="operator token">=</SPAN> row<SPAN class="punctuation token">[</SPAN><SPAN class="number token">0</SPAN><SPAN class="punctuation token">]</SPAN>
township <SPAN class="operator token">=</SPAN> row<SPAN class="punctuation token">[</SPAN><SPAN class="number token">1</SPAN><SPAN class="punctuation token">]</SPAN>
section <SPAN class="operator token">=</SPAN> row<SPAN class="punctuation token">[</SPAN><SPAN class="number token">2</SPAN><SPAN class="punctuation token">]</SPAN>
f_mile <SPAN class="operator token">=</SPAN> row<SPAN class="punctuation token">[</SPAN><SPAN class="number token">3</SPAN><SPAN class="punctuation token">]</SPAN>
t_mile <SPAN class="operator token">=</SPAN> row<SPAN class="punctuation token">[</SPAN><SPAN class="number token">4</SPAN><SPAN class="punctuation token">]</SPAN>
index_order <SPAN class="operator token">=</SPAN> row<SPAN class="punctuation token">[</SPAN><SPAN class="number token">5</SPAN><SPAN class="punctuation token">]</SPAN>
owner <SPAN class="operator token">=</SPAN> row<SPAN class="punctuation token">[</SPAN><SPAN class="number token">6</SPAN><SPAN class="punctuation token">]</SPAN>
<SPAN class="keyword token">if</SPAN> first_row_flag<SPAN class="punctuation token">:</SPAN>
township_last <SPAN class="operator token">=</SPAN> township
f_mile_last <SPAN class="operator token">=</SPAN> f_mile
t_mile_last <SPAN class="operator token">=</SPAN> t_mile
owner_last <SPAN class="operator token">=</SPAN> owner
first_row_flag <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">False</SPAN>
<SPAN class="keyword token">if</SPAN> township <SPAN class="operator token">==</SPAN> township_last<SPAN class="punctuation token">:</SPAN>
township_append_flag <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">True</SPAN>
section_list<SPAN class="punctuation token">.</SPAN>append<SPAN class="punctuation token">(</SPAN>int<SPAN class="punctuation token">(</SPAN>section<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
township_append_flag <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">False</SPAN>
section_rollup <SPAN class="operator token">=</SPAN> rollup<SPAN class="punctuation token">(</SPAN>section_list<SPAN class="punctuation token">)</SPAN>
township_section_list<SPAN class="punctuation token">.</SPAN>append<SPAN class="punctuation token">(</SPAN>township_last <SPAN class="operator token">+</SPAN> <SPAN class="string token">": "</SPAN> <SPAN class="operator token">+</SPAN> section_rollup<SPAN class="punctuation token">)</SPAN>
section_list <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN>
section_list<SPAN class="punctuation token">.</SPAN>append<SPAN class="punctuation token">(</SPAN>int<SPAN class="punctuation token">(</SPAN>section<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">if</SPAN> f_mile <SPAN class="operator token">==</SPAN> f_mile_last<SPAN class="punctuation token">:</SPAN>
index_order_list<SPAN class="punctuation token">.</SPAN>append<SPAN class="punctuation token">(</SPAN>int<SPAN class="punctuation token">(</SPAN>index_order<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
index_order_rollup <SPAN class="operator token">=</SPAN> rollup<SPAN class="punctuation token">(</SPAN>index_order_list<SPAN class="punctuation token">)</SPAN>
write_flag <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">True</SPAN>
<SPAN class="keyword token">for</SPAN> trs <SPAN class="keyword token">in</SPAN> township_section_list<SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">if</SPAN> write_flag<SPAN class="punctuation token">:</SPAN>
write_flag <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">False</SPAN>
<SPAN class="keyword token">print</SPAN> <SPAN class="punctuation token">[</SPAN>from_to_fix<SPAN class="punctuation token">(</SPAN>f_mile_last<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> from_to_fix<SPAN class="punctuation token">(</SPAN>t_mile_last<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> trs<SPAN class="punctuation token">,</SPAN> owner_last<SPAN class="punctuation token">,</SPAN> index_order_rollup<SPAN class="punctuation token">]</SPAN>
tsv_write<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN>from_to_fix<SPAN class="punctuation token">(</SPAN>f_mile_last<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> from_to_fix<SPAN class="punctuation token">(</SPAN>t_mile_last<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> trs<SPAN class="punctuation token">,</SPAN> owner_last<SPAN class="punctuation token">,</SPAN> index_order_rollup<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">print</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN> trs<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">]</SPAN>
tsv_write<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN> trs<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
township_section_list <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN>
index_order_list <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN>
index_order_list<SPAN class="punctuation token">.</SPAN>append<SPAN class="punctuation token">(</SPAN>index_order<SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">if</SPAN> meridian <SPAN class="operator token">!=</SPAN> meridian_last<SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">print</SPAN> meridian
tsv_write<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN>meridian<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">print</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="string token">"From MP"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"To MP"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"MTRS"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"Ownership"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"Map Book Sheet"</SPAN><SPAN class="punctuation token">]</SPAN>
tsv_write<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="string token">"From MP"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"To MP"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"MTRS"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"Ownership"</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">"Map Book Sheet"</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
meridian_last <SPAN class="operator token">=</SPAN> meridian
township_last <SPAN class="operator token">=</SPAN> township
f_mile_last <SPAN class="operator token">=</SPAN> f_mile
t_mile_last <SPAN class="operator token">=</SPAN> t_mile
owner_last <SPAN class="operator token">=</SPAN> owner
<SPAN class="keyword token">if</SPAN> <SPAN class="operator token">not</SPAN> township_append_flag<SPAN class="punctuation token">:</SPAN>
township_section_list<SPAN class="punctuation token">.</SPAN>append<SPAN class="punctuation token">(</SPAN>township_last <SPAN class="operator token">+</SPAN> <SPAN class="string token">": "</SPAN> <SPAN class="operator token">+</SPAN> str<SPAN class="punctuation token">(</SPAN>int<SPAN class="punctuation token">(</SPAN>section<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">)</SPAN>
index_order_rollup <SPAN class="operator token">=</SPAN> rollup<SPAN class="punctuation token">(</SPAN>index_order_list<SPAN class="punctuation token">)</SPAN>
write_flag <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">True</SPAN>
<SPAN class="keyword token">for</SPAN> trs <SPAN class="keyword token">in</SPAN> township_section_list<SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">if</SPAN> write_flag<SPAN class="punctuation token">:</SPAN>
write_flag <SPAN class="operator token">=</SPAN> <SPAN class="token boolean">False</SPAN>
<SPAN class="keyword token">print</SPAN> <SPAN class="punctuation token">[</SPAN>from_to_fix<SPAN class="punctuation token">(</SPAN>f_mile_last<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> from_to_fix<SPAN class="punctuation token">(</SPAN>t_mile_last<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> trs<SPAN class="punctuation token">,</SPAN> owner_last<SPAN class="punctuation token">,</SPAN> index_order_rollup<SPAN class="punctuation token">]</SPAN>
tsv_write<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN>from_to_fix<SPAN class="punctuation token">(</SPAN>f_mile_last<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> from_to_fix<SPAN class="punctuation token">(</SPAN>t_mile_last<SPAN class="punctuation token">)</SPAN><SPAN class="punctuation token">,</SPAN> trs<SPAN class="punctuation token">,</SPAN> owner<SPAN class="punctuation token">,</SPAN> index_order_rollup<SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="keyword token">else</SPAN><SPAN class="punctuation token">:</SPAN>
<SPAN class="keyword token">print</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN> trs<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">]</SPAN>
tsv_write<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">[</SPAN><SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN> trs<SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">,</SPAN> <SPAN class="string token">""</SPAN><SPAN class="punctuation token">]</SPAN><SPAN class="punctuation token">)</SPAN>
township_section_list <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN>
index_order_list <SPAN class="operator token">=</SPAN> <SPAN class="punctuation token">[</SPAN><SPAN class="punctuation token">]</SPAN>
index_order_list<SPAN class="punctuation token">.</SPAN>append<SPAN class="punctuation token">(</SPAN>index_order<SPAN class="punctuation token">)</SPAN>
tsv<SPAN class="punctuation token">.</SPAN>close<SPAN class="punctuation token">(</SPAN><SPAN class="punctuation token">)</SPAN>
<SPAN class="line-numbers-rows"><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN><SPAN></SPAN></SPAN>
Thanks for any input!
Forest