Sorting blocks of data

Occasional Visitor

I'm trying to sort lines of code for my CNC Bridge saw.  I'd like to be able to select which range of Cut # I can have ran in a reverse order.  The lines of code in each Cut have to remain in the original format, so the saw cuts from the top down.  Here's some lines of code, and I'd like to reverse the order of cuts 3, 4, and 5.  So it would go Cut 1, Cut 2, Cut 5, Cut 4, Cut 3.  


 G00 Y1066.000 X0.000 Z482.000   
 G00 Y17.464 X0.000 Z482.150 C90-0.000  
 G00 Y17.464 X0.000 Z452.000   
 G01 Y17.464 X0.000 Z447.000 F1800  
 G01 Y17.464 X1000.000 Z447.000 F6500  
 G01 Y17.464 X1000.000 Z442.000 F1800  
 G01 Y17.464 X0.000 Z442.000 F6500  
 G01 Y17.464 X0.000 Z437.000 F1800  
 G01 Y17.464 X1000.000 Z437.000 F6500  
 G01 Y17.464 X1000.000 Z432.000 F1800  
 G01 Y17.464 X0.000 Z432.000 F6500  
 G01 Y17.464 X0.000 Z427.000 F1800  
 G01 Y17.464 X1000.000 Z427.000 F6500  
 G01 Y17.464 X1000.000 Z422.000 F1800  
 G01 Y17.464 X0.000 Z422.000 F6500  
 G01 Y17.464 X0.000 Z417.000 F1800  
 G01 Y17.464 X1000.000 Z417.000 F6500  
 G01 Y17.464 X1000.000 Z412.000 F1800  
 G01 Y17.464 X0.000 Z412.000 F6500  
 G01 Y17.464 X0.000 Z407.000 F1800  
 G01 Y17.464 X1000.000 Z407.000 F6500  
 G01 Y17.464 X1000.000 Z402.000 F1800  
 G01 Y17.464 X0.000 Z402.000 F6500  
 G01 Y17.464 X0.000 Z397.000 F1800  
 G01 Y17.464 X1000.000 Z397.000 F6500  
 G01 Y17.464 X1000.000 Z392.000 F1800  
 G01 Y17.464 X0.000 Z392.000 F6500  
 G01 Y17.464 X0.000 Z387.000 F1800  
 G01 Y17.464 X1000.000 Z387.000 F6500  
 G01 Y17.464 X1000.000 Z384.225 F1800  
 G01 Y17.464 X0.000 Z384.225 F6500  
 G01 Y17.464 X0.000 Z482.150   
 G00 Y28.615 X0.000 Z482.150 C90-0.000  
 G00 Y28.615 X0.000 Z452.000   
 G01 Y28.615 X0.000 Z447.000 F1800  
 G01 Y28.615 X1000.000 Z447.000 F6500  
 G01 Y28.615 X1000.000 Z442.000 F1800  
 G01 Y28.615 X0.000 Z442.000 F6500  
 G01 Y28.615 X0.000 Z437.000 F1800  
 G01 Y28.615 X1000.000 Z437.000 F6500  
 G01 Y28.615 X1000.000 Z432.000 F1800  
 G01 Y28.615 X0.000 Z432.000 F6500  
 G01 Y28.615 X0.000 Z427.000 F1800  
 G01 Y28.615 X1000.000 Z427.000 F6500  
 G01 Y28.615 X1000.000 Z422.000 F1800  
 G01 Y28.615 X0.000 Z422.000 F6500  
 G01 Y28.615 X0.000 Z417.000 F1800  
 G01 Y28.615 X1000.000 Z417.000 F6500  
 G01 Y28.615 X1000.000 Z412.000 F1800  
 G01 Y28.615 X0.000 Z412.000 F6500  
 G01 Y28.615 X0.000 Z407.000 F1800  
 G01 Y28.615 X1000.000 Z407.000 F6500  
 G01 Y28.615 X1000.000 Z402.000 F1800  
 G01 Y28.615 X0.000 Z402.000 F6500  
 G01 Y28.615 X0.000 Z398.468 F1800  
 G01 Y28.615 X1000.000 Z398.468 F6500  
 G01 Y28.615 X1000.000 Z482.150   
 G00 Y39.766 X1000.000 Z482.150 C90-0.000  
 G00 Y39.766 X1000.000 Z452.000   
 G01 Y39.766 X1000.000 Z447.000 F1800  
 G01 Y39.766 X0.000 Z447.000 F6500  
 G01 Y39.766 X0.000 Z442.000 F1800  
 G01 Y39.766 X1000.000 Z442.000 F6500  
 G01 Y39.766 X1000.000 Z437.000 F1800  
 G01 Y39.766 X0.000 Z437.000 F6500  
 G01 Y39.766 X0.000 Z432.000 F1800  
 G01 Y39.766 X1000.000 Z432.000 F6500  
 G01 Y39.766 X1000.000 Z427.000 F1800  
 G01 Y39.766 X0.000 Z427.000 F6500  
 G01 Y39.766 X0.000 Z422.000 F1800  
 G01 Y39.766 X1000.000 Z422.000 F6500  
 G01 Y39.766 X1000.000 Z417.000 F1800  
 G01 Y39.766 X0.000 Z417.000 F6500  
 G01 Y39.766 X0.000 Z412.000 F1800  
 G01 Y39.766 X1000.000 Z412.000 F6500  
 G01 Y39.766 X1000.000 Z407.632 F1800  
 G01 Y39.766 X0.000 Z407.632 F6500  
 G01 Y39.766 X0.000 Z482.150   
 G00 Y50.917 X0.000 Z482.150 C90-0.000  
 G00 Y50.917 X0.000 Z452.000   
 G01 Y50.917 X0.000 Z447.000 F1800  
 G01 Y50.917 X1000.000 Z447.000 F6500  
 G01 Y50.917 X1000.000 Z442.000 F1800  
 G01 Y50.917 X0.000 Z442.000 F6500  
 G01 Y50.917 X0.000 Z437.000 F1800  
 G01 Y50.917 X1000.000 Z437.000 F6500  
 G01 Y50.917 X1000.000 Z432.000 F1800  
 G01 Y50.917 X0.000 Z432.000 F6500  
 G01 Y50.917 X0.000 Z427.000 F1800  
 G01 Y50.917 X1000.000 Z427.000 F6500  
 G01 Y50.917 X1000.000 Z422.000 F1800  
 G01 Y50.917 X0.000 Z422.000 F6500  
 G01 Y50.917 X0.000 Z417.000 F1800  
 G01 Y50.917 X1000.000 Z417.000 F6500  
 G01 Y50.917 X1000.000 Z413.858 F1800  
 G01 Y50.917 X0.000 Z413.858 F6500  
 G01 Y50.917 X0.000 Z482.150   
 G00 Y62.068 X0.000 Z482.150 C90-0.000  
 G00 Y62.068 X0.000 Z452.000   
 G01 Y62.068 X0.000 Z447.000 F1800  
 G01 Y62.068 X1000.000 Z447.000 F6500  
 G01 Y62.068 X1000.000 Z442.000 F1800  
 G01 Y62.068 X0.000 Z442.000 F6500  
 G01 Y62.068 X0.000 Z437.000 F1800  
 G01 Y62.068 X1000.000 Z437.000 F6500  
 G01 Y62.068 X1000.000 Z432.000 F1800  
 G01 Y62.068 X0.000 Z432.000 F6500  
 G01 Y62.068 X0.000 Z427.000 F1800  
 G01 Y62.068 X1000.000 Z427.000 F6500  
 G01 Y62.068 X1000.000 Z422.000 F1800  
 G01 Y62.068 X0.000 Z422.000 F6500  
 G01 Y62.068 X0.000 Z417.881 F1800  
 G01 Y62.068 X1000.000 Z417.881 F6500  
 G01 Y62.068 X1000.000 Z482.150   
1 Reply


If you have Excel 365, this may work for you:


1. Create an array that identifies each row as Cut 1, Cut 2, etc.

    LAMBDA(a, v, IF(AND(OR(ISERROR(SEARCH("cut", v)), v = ""), ISNUMBER(SEARCH("cut", a))), a, v))

2. 'ReSort' Lambda to be called within REDUCE

=LAMBDA(a,v,LET(filtered, FILTER(Source, Ordering = v), VSTACK(a, filtered)))

3. An Array constant of Cuts in the desired order:

={"(CUT1)"; "(CUT2)"; "(CUT5)"; "(CUT4)"; "(CUT3)"}


Formula in the sheet: