gpt4 book ai didi

ruby - 在解析字符串时使用 case 语句时避免/删除 nil

转载 作者:数据小太阳 更新时间:2023-10-29 08:41:52 25 4
gpt4 key购买 nike

示例数据:

DNA : 
This is a string

BaseQuality :
4 4 4 4 4 4 6 7 7 7

Metadata :
Is_read

DNA :
yet another string

BaseQuality :
4 4 4 4 7 7 4 8 4 4 4 4 4

Metadata :
Is_read
SCF_File
.
.
.

我有一个方法,它使用如下的 case 语句,使用分隔符“\n\n”将较长的文本文件的各个部分分隔成记录。以及一个模拟数据对象的类

def parse_file(myfile)
$/ = "\n\n"
records = []
File.open(myfile) do |f|
f.each_line do |line|
read = Read.new
case line
when /^DNA/
read.dna_data = line.strip
when /^BaseQuality/
read.quality_data =line.strip
when /^Metadata/
read.metadata =line.strip
else
puts "Unrecognized line: #{line}"
end
records.push read
end
end
records
end

class Read
attr_accessor :dna_data,:quality_data,:metadata
end

records.each do |r|
puts r.dna_data
end

dna 数据包含“合法”字符串部分以及两个零“对象”/刺激性零!

"This is a string"
nil
nil

我的问题是上面显示的 nil 字符串,在使用 read.dna_data = line 时分配给 dna_data。

请问你如何摆脱它们?你如何首先避免它们。我错过了什么?我的方法“臭”吗?谢谢

最佳答案

问题在于代码为每一行创建了一个新的 Read 实例。相反,它应该为每个部分创建一个实例。似乎一个部分以 DNA header 开始,因此:

def parse_file(myfile)
$/ = "\n\n"
records = []
File.open(myfile) do |f|
read = nil # <- NEW
f.each_line do |line|
#read = Read.new # <- DELETED
case line
when /^DNA/
read = Read.new # <- NEW
read.dna_data = line.strip
when /^BaseQuality/
read.quality_data = line.strip
when /^Metadata/
read.metadata = line.strip
records.push read # <= ADDED
else
puts "Unrecognized line: #{line}"
end
#records.push read # <= DELETED
end
end
records
end

在读取元数据后将解析的记录推送到记录数组中是可行的,但前提是每条记录始终包含元数据并且元数据始终位于最后。我们可以通过在第一次创建记录时将读取推送到记录,使程序更容忍数据布局的变化:

def parse_file(myfile)
$/ = "\n\n"
records = []
File.open(myfile) do |f|
f.each_line do |line|
read = Read.new
case line
when /^DNA/
records << Read.new
records.last.dna_data = line.strip
when /^BaseQuality/
records.last.quality_data = line.strip
when /^Metadata/
records.last.metadata = line.strip
else
puts "Unrecognized line: #{line}"
end
end
end
records
end

关于ruby - 在解析字符串时使用 case 语句时避免/删除 nil,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2288947/

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