Advertisement
a3f

Pascal String chain to seperate null-terminated ones

a3f
Jun 7th, 2012
448
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 4.79 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4.  
  5. namespace _469
  6. {
  7.     class Program
  8.     {
  9.         static void Main(string[] args)
  10.         {
  11.             string book4 = "51595646114145190584521765219727830464879636612527578967212778894388727857" +
  12.             "261185764217614588952196180031651288899751121615127215196805970";//kharos
  13.             string book5 = "572785726118576436467243534527560192856114519199118003646889521991"
  14.             + "18006512889523646721191180035765135347830508434856114"; //IoK
  15.  
  16.             Console.ForegroundColor = ConsoleColor.Green;
  17.  
  18.             Console.WriteLine(book4.Length + "\n");
  19.             var book = new PascalString(book4);
  20.  
  21.             book.setSetting(Settings.prefix, 1); //places of the starting section denoting length of seq.
  22.             book.setSetting(Settings.chain, true); //always true for books
  23.             book.setSetting(Settings.ltr, true); // left to right or right to left?
  24.             book.setSetting(Settings.placeholder, (byte)'x'); // if string terminates too early fille with x's
  25.  
  26.             foreach (string s in book.Parse())
  27.             {
  28.                 Console.WriteLine(s + ' ');
  29.             }
  30.  
  31.             Console.ReadKey();
  32.         }
  33.        static void print(string str, bool newline = false)
  34.         {
  35.             Console.Write(str);
  36.             if (newline) Console.Write('\n');
  37.         }
  38.     }
  39. /*
  40. * PascalString Library
  41. */
  42.     enum Settings { radix, prefix, step, chain, placeholder, ltr, nul, newline }; //is it a chain of multiple strings ? if yes what's delimiter
  43.     class PascalString //parsing pascal style strings (length prefixed) into a human readable form
  44.     {
  45.         private string input;
  46.  
  47.         public byte prefix = 1, radix = 10, step = sizeof(char) / 2;
  48.         private bool iterate, ltr = true;
  49.         private string nul, newline = null;
  50.         private char placeholder = 'x';
  51.  
  52.         private List<string> strings = new List<string>();
  53.  
  54.         public PascalString(string NullTerminated)
  55.         {
  56.             if (true)
  57.             {
  58.                 char[] array = NullTerminated.ToCharArray();
  59.                 Array.Reverse(array);
  60.                 NullTerminated = new String(array);
  61.             }
  62.             input = NullTerminated;
  63.         }
  64.  
  65.         public string[] Parse()
  66.         {
  67.             int pntr = 0;
  68.             if (!iterate)
  69.             {
  70.                 return new string[1] { load(ref pntr, prefix) };
  71.             }
  72.  
  73.             while (pntr < input.Length)
  74.             {
  75.                 //Console.Write(seek(prefix,pntr, ref pntr) + ' ');
  76.                 strings.Add(load(ref pntr, prefix));
  77.             }
  78.  
  79.             string[] MyStr = new string[2];
  80.  
  81.             //  Console.WriteLine("write line");
  82.             return strings.ToArray();
  83.         }
  84.  
  85.  
  86.  
  87.         public bool setSetting(Settings Setting, byte value)
  88.         {
  89.             #region switch
  90.             switch ((byte)Setting)
  91.             {
  92.                 case 0:
  93.                     radix = value;
  94.                     break;
  95.                 case 1:
  96.                     prefix = value;
  97.                     break;
  98.                 case 2:
  99.                     step = value;
  100.                     break;
  101.                 case 3:
  102.                     iterate = value == 0 ? false : true;
  103.                     break;
  104.                 case 4:
  105.                     placeholder = (char)value;
  106.                     break;
  107.                 case 5:
  108.                     ltr = value == 0 ? false : true;
  109.                     break;
  110.                 default:
  111.                     //throw new System.ArgumentException("Parameter not defined", "original");
  112.                     return false;
  113.             }
  114.             #endregion
  115.             return true;
  116.         }
  117.         public bool setSetting(Settings Setting, bool value)
  118.         {
  119.             return setSetting(Setting, (byte)(value ? 1 : 0));
  120.         }
  121.         private string load(ref int offset, int prefix = 1)
  122.         {
  123.             int len = Int32.Parse(input.Substring(offset, prefix));
  124.             offset = prefix + offset + len;
  125.             try
  126.             {
  127.                 return len.ToString(new String('0', prefix)) + ' ' + input.Substring(offset - len, len);
  128.             }
  129.             catch
  130.             {
  131.                 return len.ToString(new String('0', prefix)) + ' ' + input.Substring(offset - len, input.Length - offset + len)
  132.                 + new String(placeholder, offset - input.Length);
  133.             }
  134.         }
  135.         private string seek(int prefix, int offset)
  136.         {
  137.             return input.Substring(offset + prefix, Int32.Parse(input.Substring(offset, offset + prefix)));
  138.         }
  139.         public bool isValid() // is the size advertised same as the actual size
  140.         {
  141.             return true;
  142.         }
  143.  
  144.  
  145.     }
  146. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement