Saturday, August 7, 2010

Stupid programming tricks #1

Introduction

This is going to be one of an occasional, short (can it be true), little techniques that I’ve picked up along the way.  This one isn’t even original, but it works so well I just have to write about it.

I had to do an inventory of calc scripts, rule files, and report scripts.

There were lots of them.  Lots.  More than you could ever imagine.  And, I needed to get a list of all of them quickly.

Oh, I could have used the Most awesome excellent Language ever, and entered:
display calculation all ;

But that would only have given me the calc scripts.  What about reports?  What about rules?

I could have used MaxL again with a different display command, display object, but the syntax for that command confuses my simple brain.

A better way

It occurred to me that those items were all available at the OS level as they are all files with .csc, .rul, and rep extensions.

How could I quickly, painlessly, consistently, etc., etc., get this information into a text file so I could hoover it into SQL or Excel to report on?

Why good old DOS, of course.  Yes, I am old enough to remember DOS 1.0, and DOS-compatible PCs (which were not the same as PC compatible), and CPM, and when dinosaurs walked the earth with me and my good buddy down at the quarry, Fredrick Joseph Flintstone.  And I like DOS, heaven help me.  Succinct, powerful-ish, and cryptic.  What’s a hacker not to like?

And guess, what, DOS has this nifty little recursion function called FOR.  If you care to read all about it, type FOR /? at the command prompt on your PC or check out this nice blog series that I wish I had found before I figured this out.

What’s it look like?

So simple it hurts:

for /r %d in (*.msh) do echo %d >> c:\temp\MaxLOutput.txt

Enter that from whatever directory you care to start in and FOR /R will do the rest for every single MaxL script that’s in the descendants of the launching directory.

And here’s the output (I launched it from c:\tempdir):
C:\Tempdir\ODTUG_2009\CatchThatError.msh
C:\Tempdir\ODTUG_2009\connect.msh
C:\Tempdir\ODTUG_2009\disconnect.msh
C:\Tempdir\ODTUG_2009\encryptionpost.msh
C:\Tempdir\ODTUG_2009\HelloMurphy.msh
C:\Tempdir\ODTUG_2009\local.msh
C:\Tempdir\ODTUG_2009\nested.msh
C:\Tempdir\ODTUG_2009\NoError.msh
C:\Tempdir\ODTUG_2009\parameters.msh
C:\Tempdir\ODTUG_2009\parameters_environment.msh
C:\Tempdir\ODTUG_2009\properties.msh
C:\Tempdir\ODTUG_2009\shell.msh
C:\Tempdir\ODTUG_2009\SpoolMe.msh
C:\Tempdir\ODTUG_2009\tobeencrypted.msh
C:\Tempdir\ODTUG_2009\tobeencrypted.mshs
C:\Tempdir\ODTUG_2009\9.2 metaread\Copy of
C:\Tempdir\ODTUG_2009\9.2 metaread\Metaread\deprecated\filename.msh
C:\Tempdir\ODTUG_2009\deprecated\Copy of sample3.msh
C:\Tempdir\ODTUG_2009\deprecated\sample3.msh
C:\Tempdir\ODTUG_2009\deprecated\sample3a.msh
C:\Tempdir\ODTUG_2009\deprecated\sample4.msh
C:\Tempdir\ODTUG_2009\deprecated\sample5.msh
C:\Tempdir\ODTUG_2009\deprecated\sample6.msh
C:\Tempdir\ODTUG_2009\deprecated\sample3.mshs
C:\Tempdir\ODTUG_2009\deprecated\sample3a.mshs
C:\Tempdir\ODTUG_2009\deprecated\sample4.mshs
C:\Tempdir\ODTUG_2009\ODTUG_2009\call_metaread_add_filters.msh
C:\Tempdir\ODTUG_2009\ODTUG_2009\call_metaread_add_filters.mshs
C:\Tempdir\ODTUG_2009\ODTUG_2009\Metaread_Add_Filters.msh
C:\Tempdir\ODTUG_2009\ODTUG_2009\Write_Filters_To_Disc.msh
C:\Tempdir\ODTUG_2009\ODTUG_2009\write_filters_to_disc.mshs

How about calcs?

for /r %d in (*.csc) do echo %d >> c:\temp\CalcOutput.txt

And here’s the output (I launched it from c:\tempdir):
C:\Tempdir\NOTTELLING\NOTTELLING\XPort.csc
C:\Tempdir\NOTTELLING\NOTTELLING\Bad order FinPlan4_GLTest\ActCmbnd.csc
C:\Tempdir\NOTTELLING\NOTTELLING\NOTTELLING Backup\NOTTELLING Backup\GL\GL.ActCmbnd.csc
C:\Tempdir\NOTTELLING\NOTTELLING\NOTTELLING Backup\NOTTELLING Backup\GL\GL.allocav2.csc
C:\Tempdir\NOTTELLING\NOTTELLING\NOTTELLING Backup\NOTTELLING Backup\GL\GL.AllocAvg2.csc
C:\Tempdir\NOTTELLING\NOTTELLING\NOTTELLING Backup\NOTTELLING Backup\GL\GL.FillQBR.csc
C:\Tempdir\NOTTELLING\NOTTELLING\NOTTELLING Backup\NOTTELLING Backup\GL\GL.QBRTEST2.csc
C:\Tempdir\NOTTELLING\NOTTELLING\NOTTELLING Backup\NOTTELLING Backup\GL\GL.X.csc
C:\Tempdir\NOTTELLING\NOTTELLING\NOTTELLING Backup\NOTTELLING Backup\PGM\AdvaLiqn.csc
C:\Tempdir\NOTTELLING\NOTTELLING\NOTTELLING Backup\NOTTELLING Backup\PGM\OPSCopy.csc
C:\Tempdir\NOTTELLING\NOTTELLING\NOTTELLING Backup\NOTTELLING Backup\PGM\PopActE.csc
C:\Tempdir\NOTTELLING\NOTTELLING\NOTTELLING Backup\NOTTELLING Backup\PGM\ProgRecp.csc
C:\Tempdir\NOTTELLING\NOTTELLING\NOTTELLING Backup\NOTTELLING Backup\PGM\RecvBal.csc
C:\Tempdir\NOTTELLING\NOTTELLING\FinPlan4\ActCalc.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\Adj_calcs\$calc.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\Adj_calcs\$test.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\Adj_calcs\71937158.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\Adj_calcs\AdminOH.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\Adj_calcs\AggCMth.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\Adj_calcs\BaseAct.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\Adj_calcs\BB2YTD.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\Adj_calcs\BR2.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\Adj_calcs\CComp.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\Adj_calcs\ClrAdj.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\Adj_calcs\Comp.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\Adj_calcs\Fringe.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\Adj_calcs\Pipeline.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\Adj_calcs\RevCycle.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\Adj_calcs\Revenue.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\Adj_calcs\Seed7699.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\Adj_calcs\SeedCalc.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\Adj_calcs\Taxes.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\Adj_calcs\Transfer.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\Adj_calcs\WSGrant.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\Adj_calcs\YTD2BB.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\Adj_calcs\YTDAct.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\TUSMFRBS_PandL\$calc.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\TUSMFRBS_PandL\$test.csc
C:\Tempdir\REDACTED\Phase I\Adjustment\TUSMFRBS_PandL\$test2.csc

Conculsion

And that’s it – this isn’t Oracle EPM based – it can be for any kind of file.

Not exactly hacking Essbase, but it’s a little out of the ordinary and a *huge* timesaver if you’re trying to get lists fast.

No comments:

Post a Comment

Popular Posts