我想找出一种方法来做到这一点,我知道它应该是可能的。首先有一点背景。解析CSV文件,找到列并记住它们
我想自动创建用于将DNA序列提交给GenBank的NCBI Sequin块的过程。我总是最终创建一个表,列出物种名称,样品ID值,序列类型以及最终收集的位置。我很容易将它导出到制表符分隔的文件中。现在我做这样的事情:
while ($csv) {
foreach ($_) {
if ($_ =! m/table|species|accession/i) {
@csv = split('\t', $csv);
print NEWFILE ">[species=$csv[0]] [molecule=DNA] [moltype=genomic] [country=$csv[2]] [spec-id=$csv[1]]\n";
}
else {
next;
}
}
}
我知道这是凌乱的,我只是输入了类似于我有记忆的东西(没有脚本的任我在家里的电脑,只在工作)。
现在对我罚款,因为现在我知道哪些列我需要的信息(种类,位置和ID号)在工作。
但是,有没有办法(必须有)对我来说,动态找到所需信息的列?也就是说,无论列的顺序如何,来自正确列的正确信息都会发送到正确的地方?
第一行通常是表格X(其中X是出版物中表格的编号),下一行通常会有感兴趣的列标题,并且在标题中几乎是通用的。几乎所有的表格都会有标准标题来搜索,我可以使用|在我的模式匹配。
突出显示%列和%{$ hdr_data}的主要原因是因为您的标题更具灵活性。例如,'keys%{$ hdr_data}'总是会让你知道你感兴趣的列的名字, $ hdr_data - > {'bogus'}将始终返回undef,即使数据中有'假'列。把你的数据精简到你需要的数据总是最好的。 – mcglk 2013-04-30 03:35:51
如果您需要处理引用或转义,Text :: CSV是非常好的,但如果您确定不需要,它会过度杀伤。制表符分隔的文件通常不会使用;他们只是不允许带有标签的字段。 – cjm 2013-04-30 06:04:56
你能指点我一个网站或书籍,它对映射机制有很好的解释吗?我是一位了解perl的生物学家,几乎无法完成我想要的任务,但我对这些问题缺乏深入的了解。我有o'reilly的学习perl,掌握perl,编程Perl,开始perl生物信息学,掌握生物信息学的perl,以及其他一些书。〜alphaa – AlphaA 2013-05-01 18:33:13