# SimplePrint.cs

This is a C# example on how to use gdcm::SWIGDataSet

    /*=========================================================================

      Program: GDCM (Grassroots DICOM). A DICOM library
      Module:  $URL$

      Copyright (c) 2006-2009 Mathieu Malaterre
      All rights reserved.
      See Copyright.txt or http://gdcm.sourceforge.net/Copyright.html for details.

         This software is distributed WITHOUT ANY WARRANTY; without even
         the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
         PURPOSE.  See the above copyright notice for more information.

    =========================================================================*/
    /*
      Convertor convertor = new Convertor();
      int a = convertor.Convert<int>( some_int_blob );
      double b = convertor.Convert<double>( some_double_blob );
    */

    /*
     * Usage:
     * $ export LD_LIBRARY_PATH=$HOME/Projects/gdcm/debug-gcc/bin
     * $ mono bin/SimplePrint.exe gdcmData/012345.002.050.dcm
     */
    using System;
    using gdcm;

    public class SimplePrint
    {
      public static void RecurseDataSet(File f, DataSet ds, string indent)
        {
        CSharpDataSet cds = new CSharpDataSet(ds);
        while(!cds.IsAtEnd())
          {
          DataElement de = cds.GetCurrent();
          // Compute VR from the toplevel file, and the currently processed dataset:
          VR vr = DataSetHelper.ComputeVR(f, ds, de.GetTag() );

          if( vr.Compatible( new VR(VR.VRType.SQ) ) )
            {
            uint uvl = (uint)de.GetVL(); // Test cast is ok
            System.Console.WriteLine( indent + de.GetTag().toString() + ":" + uvl ); // why not ?
            //SequenceOfItems sq = de.GetSequenceOfItems();
            // GetValueAsSQ handle more cases than GetSequenceOfItems
            SmartPtrSQ sq = de.GetValueAsSQ();
            uint n = sq.GetNumberOfItems();
            for( uint i = 1; i <= n; i++) // item starts at 1, not 0
              {
              Item item = sq.GetItem( i );
              DataSet nested = item.GetNestedDataSet();
              RecurseDataSet( f, nested, indent + "  " );
              }
            }
          else
            {
            System.Console.WriteLine( indent + de.toString() );
            }
          cds.Next();
          }
        }

      public static int Main(string[] args)
        {
        string filename = args[0];
        Reader reader = new Reader();
        reader.SetFileName( filename );
        bool ret = reader.Read();
        if( !ret )
          {
          return 1;
          }
        File f = reader.GetFile();
        DataSet ds = f.GetDataSet();

        RecurseDataSet( f, ds, "" );

        return 0;
        }
    }