2013-03-19 5 views
0

해당 배열에있는 경우 다음 확인 :는 하나의 배열에 파일을 읽고 숫자가 나는 다음과 같은 형식으로 설정 .txt 파일있어

내가 할 노력하고있어
7 
8 
9 
10 

이입니다 파일에서 숫자를 배열로 읽어 들인 다음 다른 함수에서 가져온 숫자가 해당 배열에 포함되어 있는지 확인하십시오.

ismember(ruleFunc{x+1},memFunc} 

나는 ruleFunc의 요소가 배열 memFunc에 있는지 확인하고 또는없는 경우 1/0가 반환 확신합니다. 하지만 memFunc 배열을 채우는 데 사용하고있는 메서드가 잘못 되었기 때문에 ismember 함수가 제대로 작동하지 않습니다.

또한 새 줄의 .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 (length(find(data == number)) > 0) 
    'do something' 
end 
+0

어떻게하면 중간 부분을 if 문에 넣을 수 있습니까? – Seldom

+0

또한 fclose 라인을 상단 부분에서 제거하면 fopen을 수행하지 않고 하단 부분을 사용할 수 있습니까? – Seldom

+0

답안에 if 문을 추가했습니다. 아니요, 당신은 fclose를 꺼낼 수 없습니다. 첫 번째 fopen은 파일을 열어 (기본적으로) 읽은 다음 두 번째 파일을 열어 추가합니다. – Molly

0

숫자 대신 문자열이 포함 된 배열을 실제로 만들었습니까?

간단하지 않은 경우 더 많은 정보/코드 스 니펫이 유용합니다. memFunc을 채우는 방법이 잘못되었을 수 있습니다. 아마도이 코드를 게시 할 수 있습니까?

+0

참고 : 나는이 질문에 주석으로이를 추가 한 것입니다,하지만 난 충분히 담당자가 없습니다. – Madsn

+0

코드를 포함하도록 원래 게시물을 업데이트했습니다. workMem 배열은 main에 만들어지고 memFunc로 함수에 전달됩니다. – Seldom