2 Stimmen

Vermeiden/Entfernen von nil bei Verwendung einer case-Anweisung beim Parsen einer Zeichenkette

Musterdaten:

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 
.
.
.

Ich habe eine Methode, die eine Case-Anweisung wie folgt verwendet, um Teile einer längeren Textdatei in Datensätze zu trennen, indem ich das Delimeter " \n\n ". Und eine Klasse, die ein Datenobjekt modelliert

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 data enthält sowohl den "richtigen" String-Teil als auch zwei Null-"Objekte"/ irritierende Nullen!

"This is a string"
nil
nil

Meine Probleme sind die oben gezeigten Null-Zeichenfolgen, die dna_data zugewiesen werden, wenn Sie read.dna_data = line .

Wie wird man sie bitte los? Wie kann man sie von vornherein vermeiden? Was übersehe ich? Ist mein Ansatz "stinkig"? Ich danke Ihnen

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X