从文本文件中检索字符串的特定部分,并将其保存在MATLAB中的新文件中

时间:2012-01-10 22:49:49

标签: regex matlab indexing printf

我试图在文本文件中检索字符串的特定部分,如下所示,我想将它们保存在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

所以基本上,我想检索标记为"1m8e"的pdbcodes id,标记为"A"的chainid为"77"的起始值,并且停止值为{{1我希望所有这些值都保存在fprintf语句中。

是否有某种方法可以在RegExp中使用,说明它的所有索引都是从哪个索引开始并根据文本文件中每行的位置检索这些字符串?

最后,我想在fprinf语句中拥有"496"

到目前为止,我有两个1m8e, A, 77, 496函数读取一个文件,一个写入一个新文件并逐行读取,也是一个fopen语句:

fprintf

谢谢。

1 个答案:

答案 0 :(得分:2)

你应该能够在空格上strsplit,得到第三个(“1m8e”)和第四个元素(“A:77-496”),然后使用“:”作为第四个元素的重复过程拆分字符,然后再使用“ - ”作为拆分字符在这两个参数中的第二个。这是一种方法。例如,你可以这样做:

% 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);

如果您真的想使用regular expressions,可以尝试以下

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);