以下是问题:
文件upcs.txt包含在杂货店扫描的UPC代码列表
商店。理想情况下,每一行应包含对应于单个产品的12位数字。读
文件的内容并将条目存储到名为的m x 12大小的数字数组中
代码,其中m是文件中有效行的数量。具有少于或多于的行
应丢弃12位数字。一些12位数的行可能有不正确的数字
正确扫描,被字母X'. These missing digits should be
represented in the array codes by the integer
- 1'取代。处理完文件后,打印总数
读取的行数,丢弃的行数和正确的行数
处理并存储在代码中。
upcs.txt:
X9096X082489
921642004330
810905023006
733554287763
413527622XX1
287X35871528
100093334850
764491079X90
1537X8886614
086755751640
860053705316
980098819206
038356338621
577577248178
82825685985
684580785580
736657539753
71113617151
935014271064
702345843488
58316491755
110118383664
333841856254
996003013296
495258095746
4457870230
684104168936
522784039910
6504512835
699553963094
853110488363
554147120089
到目前为止,这是我的代码:
fid = fopen('upcs.txt');
mat = [];
if fid == -1
disp('File open was not successful')
else codes = {};
while feof(fid) == 0
aline = fgetl(fid);
num = strtok(aline);
codes = [codes; num]
end;
[m n] = size(codes)
discard = 0
for i = 1:m
len = length (codes(i))
if len ~= 12
codes = [];
discard = discard + 1
else
char(codes(i))
codes = strrep(codes, 'X', '-1')
end
end
codes
end
我遇到的麻烦是我不知道如何删除代码中少于或多于12位的代码。
答案 0 :(得分:1)
clear;clc;
fid = fopen('upcs.txt','r');
if fid == -1
error('File open was not successful');
end
C = textscan(fid,'%s');
C = C{1};
all_codes_num = size(C,1);
codes_discarded_num = 0;
codes_missed_digit_num = 0;
codes_correct_num = 0;
codes = [];
for i = 1:all_codes_num
one_code = C{i};
if length(one_code) == 12
x_flag = 0;
code_tmp = zeros(1,12);
for j = 1:12
if one_code(j) == 'X' || one_code(j) == 'x'
code_tmp(j) = -1;
x_flag = 1;
else
code_tmp(j) = str2num(one_code(j));
end
end
if x_flag == 1
codes_missed_digit_num = codes_missed_digit_num +1;
end
codes = [codes;code_tmp];
elseif length(one_code) ~= 12
codes_discarded_num = codes_discarded_num + 1;
end
end
all_codes_num
codes_discarded_num
codes_with_x = codes_missed_digit_num
correct_codes_without_x = all_codes_num - codes_discarded_num - codes_with_x
代码:具有所有正确的代码以及缺少数据的12长度代码,这些代码已被替换为“-1”。这是一个m * 12数字矩阵。每行都是一个代码。
all_codes_num:我们读过的所有行的数量
codes_discarded_num:所有代码的数量多于或少于12个字符
codes_with_x:缺少数字的12长度代码的数量。
correct_codes_without_x:仅包含数字的12长度代码的数量。
在代码中,我假设在'upcs.txt'中,每一行都是一个代码。