gpt4 book ai didi

用 D 解析文件

转载 作者:行者123 更新时间:2023-12-02 15:27:38 25 4
gpt4 key购买 nike

我是 D 新手,想解析以下形式的生物文件

>name1
acgcgcagagatatagctagatcg
aagctctgctcgcgct
>name2
acgggggcttgctagctcgatagatcga
agctctctttctccttcttcttctagagaga
>name2
gag ggagag

这样我就可以捕获“标题”name1、name2、name3 以及相应的“序列”数据,即 ..acgcg... 内容。

现在我有了这个,但它只会逐行迭代,

import std.stdio;
import std.stream;
import std.regex;


int main(string[] args){
auto filename = args[1];
auto entry_name = regex(r"^>(.*)"); //captures header only
auto fasta_regex = regex(r"(\>.+\n)([^\>]+\n)"); //captures header and correponding sequence

try {
Stream file = new BufferedFile(filename);
foreach(ulong n, char[] line; file) {
auto name_capture = match(line,entry_name);
writeln(name_capture.captures[1]);
}

file.close();
}
catch (FileException xy){
writefln("Error reading the file: ");
}

catch (Exception xx){
writefln("Exception occured: " ~ xx.toString());
}
return 0;
}

我想知道一种提取标题和序列数据的好方法,以便我可以创建一个关联数组,其中每个项目对应于文件中的一个条目

[name1:acgcgcagagatatagctagatcgaagctctgctcgcgct,name2:acgggggcttgctagctcgatagatcgaagctctctttctccttcttcttctagagaga,.....]

最佳答案

标题在它自己的行上,对吗?那么为什么不检查它并使用附加程序来分配值

auto current = std.array.appender!(char[]);
string name;
foreach(ulong n, char[] line; file) {
auto entry = match(line,entry_name);
if(entry){//we are in a header line

if(name){//write what was caught
map[name]=current.data.dup;//dup because .current.data is reused
}
name = entry.hit.idup;
current.clear();
}else{
current.put(line);
}
}
map[name]=current.data.dup;//remember last capture

map 是存储值的位置(string[string] 即可)

关于用 D 解析文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8992731/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com