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