0

この1つの問題に本当にイライラしています。基本的に、コード行を含む txt ファイルがあり、コードは文字と数字 (長さの異なる) が混在しており、その間にカンマとスペースはありません。つまり、txt ファイルの 1 つのコードは 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

これがあなたの質問に答えるかどうかはわかりませんが、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にフォーマットを変更しました%dmat追記も変更。その道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 に答える