声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 1106|回复: 2

[综合讨论] 正则表达式在处理txt文档时遇到的问题

[复制链接]
发表于 2010-2-16 18:43 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

x
先说点废话~老师在寒假给小弟一个课题,就是在matlab中运用正则表达式来处理txt文档,小弟matlab新手~正则表达式中文资料太少了~英文又太差劲,所以对英文资料只好自动过滤了~摸索了半个多月,删删改改,论坛也去了好多个,今天才找到找个论坛·~~自我感觉这个题目如果能完成应该是对matlab中正则表达式的一个实例吧~希望大家看看~好了,转入正题~
先介绍下附件1的格式:
>AB016625
GCGGCCCAGGCCCGGAACCTTCCCTGGTCGTGCG
>AF008216
AAGCTTTCCT

题目1:将'>'符号后跟的的字符串(母字符串)提取出来并建立以字符串命名的文件夹(如文件夹ABO16625,文件夹AF008216)
题目2:在相应的文件下建立base.txt
题目3:将母字符串下面的字符串(子字符串)提取出来储存在相应的base.txt里面
这3个题目,小弟摸爬滚打算是做出来了,共享如下:

  1. clc;clear;
  2. file=fopen('fasta.txt','r');
  3. fname={};fname1={};
  4. fbase={};
  5. while feof(file)==0
  6.       str=fgetl(file);
  7.       fname1=regexpi(str,'(?<=>)[A-Z0-9]+$','match');
  8.       fbase=regexpi(str,'^[a-z]+$','match');
  9.       if ~isempty(fname1)
  10.         mkdir(fname1{1});
  11.         k1=strcat('D:\mat\work\',fname1{1},'\base.txt');
  12.         fname=[fname; fname1];
  13.         fname1={};
  14.       end
  15.        if ~isempty(fbase)
  16.         fid1=fopen(k1,'a');
  17.         fwrite(fid1,fbase{1});
  18.         fclose(fid1);
  19.         fbase1={};
  20.        end
  21. end
  22. fclose('all');
复制代码
但是接下来的题目小弟实在困惑不已,望各位指教
先介绍hmrcds格式:

AB016625 12 24 35 67
AF008216 12 15
U25134 11 15

题目4:在相应母字符串命名的文件夹下建立cds.txt文档
题目5:将hmrcds中母字符串后的纯数字字符串提取出来存在各自的cds.txt中
题目6:在相应的文件夹中,由cds.txt中储存的偶数个数字为根据,提取出base.txt中的字符串,并储存在由此在相应文件夹下建立的ex1.txt,ex2.txt……中~,例如在AB016625命名的文件夹下,在base.txt中取出12-24的字符串存在ex1.txt,取出35-67的字符串存在ex2.txt中~
是不是看的头大~~~

题目4小弟可以做出来,题目5,小弟用正则表达式实在做不出来,题目6还没做到
另外,小弟今天知道用
f = fopen('fasta.txt','rt'); % t 属性根据需要可省略
x = fread(f,'*char');
fclose(f);
x=x'
可以将文档以字符串形式读入(textread读取后是一个cell格式),于是就用
fname1=regexpi(x,'(?<=>)\w+','match')
来完成题目题目1中的提取母字符串,结果在matlab运行后,不出现结果,同时cpu使用达到50%,不知道怎么回事~大家指点小弟下吧~~~
附件fasta高达1000K。无法上传~伤心~大家有需要留言,可以上传邮箱,全天恭候~~

[ 本帖最后由 nxhylyh 于 2010-2-16 19:08 编辑 ]

hmrcds.txt

8.55 KB, 下载次数: 1

评分

1

查看全部评分

回复
分享到:

使用道具 举报

发表于 2010-2-17 12:35 | 显示全部楼层
有关正则表达式的一点儿学习资料,可以参看
http://forum.vibunion.com/forum/vi ... 2%B1%ED%B4%EF%CA%BD
http://forum.vibunion.com/forum/vi ... 2%B1%ED%B4%EF%CA%BD
问题可以一个一个的解决,你的问题用正则表达式肯定能做的。1MB大小的文件,也不算太大,不过按照你的要求建立那么多文件夹的话应该是有点儿慢。

[ 本帖最后由 sogooda 于 2010-2-17 12:40 编辑 ]

评分

1

查看全部评分

 楼主| 发表于 2010-2-17 15:26 | 显示全部楼层
谢谢LS~
关于正则表达式的中文资料都已经看过了~呵呵
就是最后几步,个人就想无法用行读和多字符串操作,就用fread格式,但是奈何,运行后不出现结果,CPU占用率一直高达50%,无解
难道是2进制非常慢?
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-11-26 03:34 , Processed in 0.105025 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表