2012-01-10 2 views
3

아래 텍스트 파일에서 문자열의 특정 부분을 검색하려고하는데 다음과 같은 텍스트 파일로 저장하려고합니다. MATLAB텍스트 파일에서 문자열의 특정 부분을 검색하여 MATLAB의 새 파일에 저장하십시오.

원본 텍스트 파일 그래서 기본적으로

D 1m8ea_ 1m8e A: d.174.1.1 74583 cl=53931,cf=56511,sf=56512,fa=56513,dm=56514,sp=56515,px=74583 
D 1m8eb_ 1m8e B: d.174.1.1 74584 cl=53931,cf=56511,sf=56512,fa=56513,dm=56514,sp=56515,px=74584 
D 3e7ia1 3e7i A:77-496 d.174.1.1 158052 cl=53931,cf=56511,sf=56512,fa=56513,dm=56514,sp=56515,px=158052 
D 3e7ib1 3e7i B:77-496 d.174.1.1 158053 cl=53931,cf=56511,sf=56512,fa=56513,dm=56514,sp=56515,px=158053 
D 2bhja1 2bhj A:77-497 d.174.1.1 128533 cl=53931,cf=56511,sf=56512,fa=56513,dm=56514,sp=56515,px=128533 

, 내가 "A"으로 "77"입니다 시작 값을 표시하고 "496"입니다 값을 중지 chainid, "1m8e"으로 표시됩니다 pdbcodes ID를 검색하고자

와 나는 이 모든 값을 fprintf 내부에 저장하고 싶습니다. 의견.

RegExp에서 어떤 인덱스를 사용하고 각 행의 텍스트 파일 위치를 기반으로 해당 문자열을 검색하는지 알 수있는 방법이 있습니까?

결국 fprinf 문에 넣고 싶은 것은 1m8e, A, 77, 496입니다.

pdbcode = ''; 
chainid = ''; 
start = ''; 
stop = ''; 
fin = fopen('dir.cla.scop.txt_1.75.txt', 'r'); 
fout = fopen('output_scop.txt', 'w'); 
% TODO: Add error check! 
while true 
    line = fgetl(fin); % Get the next line from the file 
    if ~ischar(line) 
     % End of file 
     break; 
    end 

      % Print result into output_cath.txt file 

      fprintf(fout, 'INSERT INTO cath_domains (scop_pdbcode, scop_chainid, scopbegin, scopend) VALUES("%s", %s, %s, %s);\n', pdbcode, chainid, start, stop); 

감사합니다 :

지금까지 내가 새 파일에 기록 파일 하나를 읽고 라인으로 각 라인, 또한 fprintf 한 Statment을 읽고 두 fopen 기능을 가지고있다.

답변

1

공백에 strsplit을 입력하고 세 번째 ("1m8e") 및 네 번째 요소 ("A : 77-496")를 가져올 수 있어야합니다. 그런 다음 분할 문자로 ":"를 사용하여 네 번째 요소에 대한 프로세스를 반복하십시오 , 그리고 다시 두 개의 인수 중 두 번째에 "-"를 분리 문자로 사용합니다. 그것은 하나의 접근 방식입니다. 예를 들어, 당신은 할 수 있습니다 : 당신이 정말로 regular expressions을 사용하고 싶다면 내가 분할을 사용하고자하는 경우

% split on space and tab, and ignore empty tokens 
tokens = strsplit(line, ' \t', true); 
pdbcode = tokens(3); 
% split fourth token from previous split on colon 
tokens = strsplit(tokens(4), ':'); 
chainid = tokens(1); 
% split second token from previous split on dash 
tokens = strsplit(tokens(2), '-'); 
start = tokens(1); 
stop = tokens(2); 

다음

pattern = '\S+\s+\S+\s+(\S+)\s+([A-Za-z]+):([0-9]+)-([0-9]+)'; 
[mat tok] = regexp(line, pattern, 'match', 'tokens'); 
pdbcode = cell2mat(tok)(1); 
chainid = cell2mat(tok)(2); 
start = cell2mat(tok)(3); 
stop = cell2mat(tok)(4); 
+0

을 시도해 볼 수도, 내가 이름을 정의 할 필요가 없습니다 'split ('_ /', 'fin')', 여기서'fin'은 내가 읽었던 파일을 나타 냅니까? 또한, 위의 방법을 사용하여 Regexp 시도하고 작동하지 않습니다. 대신 빈 문자열을 출력합니다. 제발 조언. – Jeiman

+0

split 함수를 사용할 때 오류가 발생했습니다 :'??? "char"유형의 입력 인수에 대해 정의되지 않은 함수 또는 메소드 'split'. – Jeiman

+1

죄송합니다. 분명히 split은 더 이상 사용되지 않습니다. 그에 따라 내 대답을 업데이트 할 것입니다. –

관련 문제