2013-03-19 56 views
0

我有一個.txt文件的格式如下成立:,然後檢查是否有數量是數組

7 
8 
9 
10 

我想要做的,是將文件中的數字讀入數組,然後檢查一個數字是否來自不同的函數。

ismember(ruleFunc{x+1},memFunc} 

我敢肯定,這將檢查是否從ruleFunc元素是在數組memFunc並返回1/0,如果它是或不是。但是我不能讓ismember函數正常工作,因爲我用來填充memFunc數組的方法是錯誤的。

此外,我怎麼能夠添加另一個數字到一個新行的.txt文件?

編輯:

下面是我目前填充memFunc。這也是填充ruleFunc的相同方法。

mem=fopen('WorkingMemory.txt'); 
    tline = fgets(mem); 
    workMem = {}; 
    index = 1; 
while ischar(tline) 
    workMem{index} = str2num(tline); 
    tline = fgets(mem); 
    index = index + 1; 
end 

回答

1

函數ismember在輸入相等的情況下返回1的矩陣。 (有關更多信息,請參閱文檔。)實際上,您可能需要返回數字1或0的數據,具體取決於天氣或根本不在矩陣中。我已經在下面列出了兩個選項。

% read in file 
filename = 'my_data.txt'; 
fid = fopen(filename); 
data = textscan(fid, '%d'); 
data = data{1}; 
fclose(fid); 

% determine if number is in the file 
number = 33; 
ismember(data,number) %this returns an array 
length(find(data == number)) > 0 % this returns 1 or 0 

%write a line to existing file 
fid2 = fopen(filename,'a'); 
newnumber = 100; 
fprintf(fid2, '%d\n', newnumber); 
fclose(fid2); 

現在我看到你的更新答案。該代碼會將每行讀入單元陣列的不同單元。你想要所有的數據在矩陣中。您可以重新排列單元陣列並將數據放入矩陣中,或者可以使用上述的textscan

在回答您的評論,你可以讓一個if語句是這樣的:

if (length(find(data == number)) > 0) 
    'do something' 
end 
+0

如何將中間部分放入if語句中? – Seldom 2013-03-19 23:50:24

+0

另外,如果我把fclose線從頂部拿出來,我可以在不做fopen的情況下使用底部嗎? – Seldom 2013-03-19 23:53:00

+0

我已將if語句添加到我的答案中。不,你不能拿出fclose。第一個fopen打開文件供讀取(默認情況下),第二個打開文件進行追加。 – Molly 2013-03-20 00:04:34

0

也許你實際上是在創建一個包含字符串而不是數字的數組?

如果不那麼簡單,更多的信息/代碼片段將是有用的。你提到的方法填充memFunc可能是錯誤的,也許你可以發佈該代碼?

+0

注:我會加入這個爲問題的評論,但我沒有足夠的代表。 – Madsn 2013-03-19 22:23:26

+0

更新了原始帖子以包含代碼。 workMem數組在main中創建並作爲memFunc傳遞給函數 – Seldom 2013-03-19 22:35:52