0

这是问题:

文件 upcs.txt 包含在杂货店扫描的 UPC 代码列表。理想情况下,每行应包含对应于单个产品的 12 位数字。读取文件的内容并将条目存储到一个名为代码的 mx 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 位的代码。

4

1 回答 1

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”。这是 am*12 数字矩阵。每一行都是一个代码。

all_codes_num:我们读过的所有行数

code_discarded_num:所有多于或少于 12 个字符的代码的数量

codes_with_x:12 位长度代码中缺少数字的个数。

correct_codes_without_x:只有数字的 12 位代码的数量。

在代码中,我假设在“upcs.txt”中,每一行都是一个代码。

于 2013-03-14T21:50:47.427 回答