0

对这一问题感到非常沮丧。基本上有一个 txt 文件,其中包含代码行,代码是字母和数字(不同长度)的混合,它们之间没有逗号和空格,即:txt 文件中的一个代码是 X32W21039A23

我需要将它读入一个数字数组/矩阵,以便我可以轻松地操作它,并且我必须用表格中的相应数字替换字母。这是我目前拥有的

fid = fopen('upcs.txt');
mat = [];
if fid == -1
disp('File open was not successful')
else 
while feof(fid) == 0
    % Read contents of file and store into a matrix
    aline = fgetl(fid);
    [P] = sscanf(aline, '%s');
    if length(A) == 12
        mat = [mat P];
    end
end
codes =reshape(mat, length(mat)/12, 12)

基本上我已经从 txt 文件中删除了所有不是 12 位数长的行(我可以这样做),并将剩余的行转移到字符数组“mat”中。但是,mat 是一个字符数组,而不是数字数组。我已经尝试过诸如 cell2mat 和 str2num 之类的函数,但无济于事,因为我相信这些代码被视为单元格或字符串,而不是数字。我相信我需要在数组中的字符串之间放置空格。

总而言之,任何人都可以帮助我轻松地将 txt 文件中的代码转换成一种我可以像数字向量一样轻松操作它的方式,即:[1 2 3] 谢谢

4

3 回答 3

0

我不确定这是否能回答您的问题,但您可以通过将矩阵转换为 a 来强制 MATLAB 将矩阵存储为数字double

codes = double(codes)

但是,您仍然可以使用字符执行算术和索引操作等,所以我不确定这是否可以满足您的情况。

于 2013-03-13T08:55:54.243 回答
0

我认为这就是你要找的:

fid = fopen('upcs.txt');
mat = [];
if fid == -1
    disp('File open was not successful')
else 
    while feof(fid) == 0
        % Read contents of file and store into a matrix
        aline = fgetl(fid);
        P = sscanf(aline, '%d');
        if length(A) == 12
            mat = [mat; P];
        end
    end
end

codes = mat

sscanf将格式更改为%d. 也改变了mat附加。那样mat已经是你的结果了。

于 2013-03-13T08:58:07.973 回答
0

您可以使用从文件中读取的 ASCII 字符与所需值之间的对应表:

table = [zeros(1,'0'-1) , 0:9 , zeros(1,'A'-'9'-1) , ('A':'Z')-'A' + 10];
                                                   %// 10 -> 35
                                                   %// or whatever values for 'A' to 'Z'

table('0123456789ABCDWXYZ')
%// = [0  1  2  3  4  5  6  7  8  9  10  11  12  13  32  33  34  35]

table('X32W21039A23')
%// = [33  3  2  32  2  1  0  3  9  10  2  3]
于 2016-03-27T05:07:47.487 回答