Labfans是一个针对大学生、工程师和科研工作者的技术社区。 论坛首页 | 联系我们(Contact Us)
MATLAB爱好者论坛-LabFans.com
返回   MATLAB爱好者论坛-LabFans.com > 其它 > 资料存档
资料存档 资料存档
 
 
主题工具 显示模式
旧 2019-12-10, 20:41   #1
poster
高级会员
 
注册日期: 2019-11-21
帖子: 3,006
声望力: 66
poster 正向着好的方向发展
帖子 在Matlab中解析文本文件时遇到问题,是否有一种方法允许字段具有多行?

我有一个文本文件,我想将其添加到列表中。我最近就这个话题问了两个问题。我一直遇到的问题是我想解析文本文件,但是各节的长度不同。所以我不能用

textscan(fid,'%s%s%s')

因为每个基因的长度各不相同。我在使用字段方面也遇到了麻烦,因为当我使用代码设置字段时,它只允许在第一个基因下面的“ note”字段的每个字段中一行,我希望能够在一个字段中多行能够读取它们。目前,有关索引的错误超出了矩阵尺寸。

fieldname = regexp(line {1},'/(。+)=','tokens','once');

value = regexp(line {1},'=“?([^”] +)“?$','tokens','once');

我看到此工作的另一种可能方式是使用某种isLineEmpty能够将基因划分为它们之间的空行。有没有一种方法可以在我的字段条目中包含多行,以便获得与“ note”相关的所有信息?还是使用isLineEmpty并跳过使用字段的方法?

gene 218705..219367 /locus_tag="Rv0187" /db_xref="GeneID:886779" CDS 218705..219367 /locus_tag="Rv0187" /EC_number="2.1.1.-" /function="THOUGHT TO BE INVOLVED IN TRANSFER OF METHYL GROUP." /note="Rv0187, (MTCI28.26), len: 220 aa. Probable O-methyltransferase (EC 2.1.1.-), similar to many eg AB93458.1|AL357591 putative O-methyltransferase from Streptomyces coelicolor (223 aa); MDMC_STRMY|Q00719 O-methyltransferase from Streptomyces mycarofaciens (221 aa), FASTA scores: opt: 327, E(): 2.4e-17, (35.9% identity in 192 aa overlap). Also similar to Rv1703c, Rv1220c from Mycobacterium tuberculosis." /codon_start=1 /transl_table=11 /product="O-methyltransferase" /protein_id="NP_214701.1" /db_xref="GI:15607328" /db_xref="GeneID:886779" gene 219486..219917 /locus_tag="Rv0188" /db_xref="GeneID:886776" CDS 219486..219917 /locus_tag="Rv0188" /function="UNKNOWN" /experiment="experimental evidence, no additional details recorded" /codon_start=1 /transl_table=11 /product="transmembrane protein" /protein_id="NP_214702.1" /db_xref="GI:15607329"

回答:

我可能会考虑使用某种简单的包装函数将多行字段折叠为单行。就像是:

function l = readlongline( fh ) quotesSeen = 0; done = false; l = ''; while ~done tline = fgetl( fh ); if ~ischar( tline ) % Hit EOF l = tline; return end quotesSeen = quotesSeen + length( strfind( tline, '"' ) ); % Break if we've seen 0 or 2 quotes done = any( quotesSeen == [0 2] ); l = [l, tline]; end end 旨在替代fgetl。



更多&回答...
poster 当前离线   回复时引用此帖
 


发帖规则
不可以发表新主题
不可以发表回复
不可以上传附件
不可以编辑自己的帖子

启用 BB 代码
论坛禁用 表情符号
论坛启用 [IMG] 代码
论坛启用 HTML 代码



所有时间均为北京时间。现在的时间是 04:57


Powered by vBulletin
版权所有 ©2000 - 2025,Jelsoft Enterprises Ltd.