2016-09-13 8 views
-1
1 :: 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 
2 :: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 
3 :: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 
4 :: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 
5 :: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 
6 :: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 
7 :: 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 
8 :: 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 0 
9 :: 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 
10 :: 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 1 
11 :: 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 1 
12 :: 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 

私は上記のテキストファイルを持っています。 Matlabでこのファイルを読んで、 というファイルの内容を2列の配列に格納したいとします。matlabの配列でファイルを読む

1  0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 
2  0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 
3  0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 1 
4  0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 
5  0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 1 
6  0 0 0 0 0 0 0 0 0 0 0 0 1 0 1 0 
7 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 1 

を次のように16ビット・パターンの最初の列で
シーケンス番号と、他の列に誰も私を助けることができますか?

+1

第2列に16列のデータを収める方法はありますか? – Suever

+0

これをテキストとして扱うか(たとえば、 '' 7 '' 0000000000000111 ')、セル配列や表を使用できます。 – EBH

答えて

0

インデックスが1:nよう命じている場合(または任意の他の順序を知っている)、あなたは、この使用することができます:

fileID = fopen('bin16.txt'); 
raw = fscanf(fileID,'%s'); 
fclose(fileID); 
colon_ind = strfind(raw,'::'); 
data = table((1:numel(colon_ind)).',... 
    cell(numel(colon_ind),1),... 
    'VariableNames',{'Index','Pattern'}); 
counter = 1; 
for k = colon_ind 
    data.Pattern(counter,:) = {raw(k+2:k+17)}; 
    counter = counter+1; 
end 

をし、この取得:インデックス列があなたを注文されていない場合

data = 
    Index   Pattern  
    _____ __________________ 
    1  '0000000000000011' 
    2  '0000000000000101' 
    3  '0000000000001001' 
    4  '0000000000000110' 
    5  '0000000000010001' 
    6  '0000000000001010' 
    7  '0000000000000111' 
    8  '0000000000010010' 
    9  '0000000000001100' 
    10  '0000000000001011' 
    11  '0000000000100001' 
    12  '0000000000010100' 

fileID = fopen('bin16b.txt','r'); 
raw = fscanf(fileID,'%s'); 
C = textscan(raw,'%s','delimiter','::'); 
fclose(fileID); 
N = (size(C{1},1)-1)/2; 
data = table(zeros(N,1),cell(N,1),... 
    'VariableNames',{'Index','Pattern'}); 
data.Index(1) = str2num(C{1}{1,1}); 
for k = 1:N 
    if k>1 
     data.Index(k) = str2num(C{1}{k*2-1,:}(17:end)); 
    end 
    data.Pattern(k,:) = {C{1}{k*2+1,:}(1:16)}; 
end 

入手するには(入力した任意のデータを使用):

Index   Pattern  
_____ __________________ 
54  '0000000000000011' 
6  '0000000000000101' 
3  '0000000000001001' 
4  '0000000000000110' 
5  '0000000000010001' 
92  '0000000000001010' 
7  '0000000000000111' 
35  '0000000000010010' 
9  '0000000000001100' 
10  '0000000000001011' 
11  '0000000000100001' 
12  '0000000000010100' 

EDIT

'::' ファイルには、あなたが使用することができ、前に削除することができる場合は、次の

text = load ('bin16b.txt', '-ascii'); 
data = table(text(:,1),text(:,2:end),... 
    'VariableNames',{'Index','Pattern'}); 

とget:

data = 
    Index  Pattern 
    _____ _____________ 
    54  [1x16 double] 
    6  [1x16 double] 
    3  [1x16 double] 
    4  [1x16 double] 
    5  [1x16 double] 
    92  [1x16 double] 
    7  [1x16 double] 
    35  [1x16 double] 
    9  [1x16 double] 
    10  [1x16 double] 
    11  [1x16 double] 
    12  [1x16 double] 

パターン列の各セルは次のようになります。

>> data.Pattern(1,:) 
ans = 
    Columns 1 through 14 
    0  0  0  0  0  0  0  0  0  0  0  0  0  0 
    Columns 15 through 16 
    1  1 
+0

こんにちは、それは私のために働くが、私は整数として自分の値を格納するので、ロードファイルオプションを使用していた。 –

+0

@shilpapund私は 'load'コマンドを使うオプションを追加しました – EBH

関連する問題