input_count.asv
上传用户:xxhxxny
上传日期:2021-02-19
资源大小:87k
文件大小:1k
- %============================================
- % 读取被压缩文件,统计不同字符在文件中出现的频率
- % 数组下标指示对应的ASCII字符,元素值就是该字符的频率
- %============================================
- function char_prob = input_count(fid_in)
- char_prob = zeros(1,256); %生成一个有256个元素的数组,注意Matlab中数组下标从1开始。英文文档1-256,若支持中文则应将数组扩展成1-512
- disp('counting the number of each character...');
- while 1
- %text_line = fgetl(fid_in); %这将忽略文件中的回车换行符
- text_line = fgets(fid_in); %读入一行文本,包含行尾的回车换行,以字符串的形式保存在text_line中
- if ~ischar(text_line) %读到文件尾
- break;
- end
- num_line = uint8(abs(text_line)); % 将字符串转换为无符号8比特整数数组,每一个字符变成其ASCII码,作为数组的元素,这样还可以防止非ASCII字符
- len=length(num_line); % 得到整数数组的元素个数
- for index=1:len
- char_prob(num_line(index)) = char_prob(num_line(index))+1; % num_line(index)就是某个字符的ASCII码
- end
- end
- % ===== scale the char_prob
- % 这部分代码,主要是将所有字符出现次数折换到[0-255
- origin_prob=char_prob;
- char_prob=uint8(char_prob*255/max(char_prob));
- for i=1:256
- if origin_prob(i)~=0 && char_prob(i)==0
- char_prob(i)=1;
- end
- end
- char_prob(256) = 1;
- disp('completed!');
-
-
-
-