在MATLAB中将txt文件(带字符和数字)读入数字数组/矩阵的最简单方法是什么?

时间:2013-03-13 08:46:58

标签: arrays matlab text-files

对这个问题感到非常沮丧。基本上有一个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]谢谢

3 个答案:

答案 0 :(得分:0)

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

codes = double(codes)

但是,您仍然可以使用字符执行算术和索引操作等,因此我不确定这是否可以为您的情况做任何事情。

答案 1 :(得分: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就是你的结果。

答案 2 :(得分: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]