input_count.asv
上传用户:xxhxxny
上传日期:2021-02-19
资源大小:87k
文件大小:1k
源码类别:

压缩解压

开发平台:

Matlab

  1. %============================================
  2. % 读取被压缩文件,统计不同字符在文件中出现的频率
  3. % 数组下标指示对应的ASCII字符,元素值就是该字符的频率
  4. %============================================
  5. function char_prob = input_count(fid_in)
  6. char_prob = zeros(1,256);       %生成一个有256个元素的数组,注意Matlab中数组下标从1开始。英文文档1-256,若支持中文则应将数组扩展成1-512
  7. disp('counting the number of each character...');
  8. while 1
  9.     %text_line = fgetl(fid_in); %这将忽略文件中的回车换行符
  10.     text_line = fgets(fid_in);  %读入一行文本,包含行尾的回车换行,以字符串的形式保存在text_line中
  11.     if ~ischar(text_line)       %读到文件尾
  12.         break;
  13.     end
  14.     num_line = uint8(abs(text_line)); % 将字符串转换为无符号8比特整数数组,每一个字符变成其ASCII码,作为数组的元素,这样还可以防止非ASCII字符
  15.     len=length(num_line);             % 得到整数数组的元素个数
  16.     for index=1:len
  17.         char_prob(num_line(index)) = char_prob(num_line(index))+1; % num_line(index)就是某个字符的ASCII码
  18.     end
  19. end
  20. % ===== scale the char_prob
  21. % 这部分代码,主要是将所有字符出现次数折换到[0-255
  22. origin_prob=char_prob;
  23. char_prob=uint8(char_prob*255/max(char_prob));
  24. for i=1:256
  25.     if origin_prob(i)~=0 && char_prob(i)==0
  26.         char_prob(i)=1;
  27.     end
  28. end
  29. char_prob(256) = 1;
  30. disp('completed!');
  31.         
  32.     
  33.     
  34.