Calculating frequency of symbols of binary file in c# not working but working for equivalent c++ code -


i trying calculate frequency of symbols in binary file in c#, have done in c++ , works fine , have switched c# c++ because have implement same in c#.

note: don't have use luts/arrays linkedlist must used.

by frequency mean number of repetitions of symbols , symbols mean if see binary file using xxd -b binaryfile.bin lot of 8 bits of combinations of 0 , 1. how many times each symbol repeats it's frequency.

now, how have tried so: achieve in c# doing mono filename.exe binaryfile.bin @ terminal code written in filename inside notepad++.

logic: read each symbol in binaryfile if not repeated add @ tail of linked list , if repeated increase it's frequency. repeat full binary file.

code:

code c# (full): (which don't work properly, have pointed problem containing part in code, put full code because may need it):

  ////problem containing part starts here ////////         public huffman(string[] args) //called myclass          {             node tree = null;             int counter = 0;             using(var stream = new binaryreader(system.io.file.openread(args[0])))              {                 while (stream.basestream.position < stream.basestream.length)                  {                     int processingvalue = stream.readbyte();                     node ppt, pt, temp;                     bool is_there = false;                     ppt = pt = tree;                     while (pt != null)                      {                         if (pt.symbol == processingvalue)                          {                             pt.freq++;                             is_there = true;                              break;                         }                         ppt = pt;                         pt = pt.next;                     }                     if (is_there == false)                      {                         temp = new node();                         temp.symbol = processingvalue;                         temp.freq = 1;                         temp.left = null;                         temp.right = null;                         temp.next = null;                         temp.id = (++total_nodes);                         temp.is_processed = 0;                         if (tree == null)                          {                             tree = temp;                         }                          else                          {                             ppt.next = temp;                         } //the same check/debugging doing in c++ know symbol , freq contains contains different values.  //and output of both c#/c++ different supposed same.                         node chc = tree;                         while (chc != null)                          {                             console.writeline("  sym: " + chc.symbol);                             console.writeline("  freq: " + chc.freq);                             chc = chc.next;                         }                     }                 }                 stream.close();             }           }  ////problem containing part ends here //////// 

difference between output of c++ , c#:

(1) when display output of c++ works correctly , when see code part have written in code debug/check output on terminal shows correct execution of code. whereas same debugging code in c# don't show same output c++. supposed because both of these code print "symbol" , "freq" kept @ same place in program.

(2) output of c# makes me feel while loop executed less number of times in c# in c++ because in c# output terminal don't show large amount repetition of freq , symbol. please see output of both :

c# output @ terminal :

hp@ubuntu:~/desktop/$ mono check1.exe out.bin    sym: 0   freq: 1   sym: 0   freq: 200   sym: 1   freq: 1   sym: 0   freq: 200   sym: 1   freq: 198   sym: 2   freq: 1   sym: 0   freq: 200   sym: 1   freq: 198   sym: 2   freq: 195   sym: 3   freq: 1   sym: 0   freq: 200   sym: 1   freq: 198   sym: 2   freq: 195   sym: 3   freq: 189   sym: 4   freq: 1 hp@ubuntu:~/desktop/ 

whereas output of c++ : (here value of counter started form "0" (not "196") not able show full output because file larger output big terminal not able show all, shows output @ end)

    hp@ubuntu:~/desktop/$ ./filename out.bin    //counter starts "0" terminal not able show all.so doing "196"     counter: 196       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  1     counter: 197       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  2     counter: 198       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  3     counter: 199       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  4     counter: 200       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  5     counter: 201       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  6     counter: 202       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  7     counter: 203       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  8     counter: 204       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  9     counter: 205       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  10     counter: 206       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  11     counter: 207       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  12     counter: 208       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  13     counter: 209       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  14     counter: 210       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  15     counter: 211       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  16     counter: 212       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  17     counter: 213       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  18     counter: 214       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  19     counter: 215       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  20     counter: 216       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  21     counter: 217       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  22     counter: 218       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  23     counter: 219       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  24     counter: 220       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  25     counter: 221       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  26     counter: 222       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  27     counter: 223       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  28     counter: 224       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  29     counter: 225       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  30     counter: 226       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  31     counter: 227       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  32     counter: 228       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  33     counter: 229       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  34     counter: 230       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  35     counter: 231       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  36     counter: 232       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  37     counter: 233       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  38     counter: 234       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  39     counter: 235       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  40     counter: 236       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  41     counter: 237       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  42     counter: 238       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  43     counter: 239       sym:  0       freq:  50       sym:  1       freq:  50       sym:  2       freq:  48       sym:  3       freq:  48       sym:  4       freq:  44 

questions:

(1) why output shown c# code different c++ ? have tasted on same binaryfile (out.bin in case).

(2) please me in coming out of problem ? big thanks

i might totally misunderstanding this... wanting know number of occurrences of each byte value (0..255) within specified file?

if so, simple way this:

var counts = new int[256];  // assumes files aren't longer 2gb.  string filename = "<your filename goes here>";  foreach (byte b in file.readallbytes(filename)) // run out of memory     ++counts[b];                                // large files!  (int = 0; < counts.length; ++i)     console.writeline("symbol {0} occurred {1} times.", i, counts[i]); 

however, simpler you're doing feel must misunderstanding....


[edit]

i can't fix original code, here's sample program works uses linked-list solve problem:

using system; using system.io;  namespace consoleapp1 {     public sealed class node     {         public byte symbol { get; set; }         public int count   { get; set; }         public node next   { get; set; }     }      sealed class program     {         private void run()         {             var linkedlist = new node();              string filename = @"c:\test\t.cs";              foreach (byte symbol in file.readallbytes(filename))                 addsymbol(symbol, linkedlist);              (int symbol = 0; symbol < 256; ++symbol)             {                 int count = countforsymbol((byte)symbol, linkedlist);                 console.writeline("symbol {0} occurred {1} times.", symbol, count);             }         }          private static void addsymbol(byte symbol, node head)         {             node last = head;              while (head != null)             {                 last = head;                  if (head.symbol == symbol)                 {                     ++head.count;                     return;                 }                 else                 {                     head = head.next;                 }             }              last.next = new node             {                 symbol = symbol,                  count = 1             };         }          private int countforsymbol(byte symbol, node head)         {             while (head != null)             {                 if (head.symbol == symbol)                     return head.count;                 else                     head = head.next;             }              return 0;         }          private static void main()         {             new program().run();         }     } } 

Comments

Popular posts from this blog

get url and add instance to a model with prefilled foreign key :django admin -

android - Keyboard hides my half of edit-text and button below it even in scroll view -

css - Make div keyboard-scrollable in jQuery Mobile? -