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
.
.
.
J'ai une méthode qui utilise une déclaration de cas comme suit pour séparer les éléments d'un fichier texte plus dans les enregistrements en utilisant le délimiteur "\ n \ n". Et une classe qui modélise un objet de données
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
données adn contient la partie chaîne « qui lui revient », ainsi que deux « objets » néant/irritant de nils!
"This is a string"
nil
nil
Mes problèmes sont les chaînes nulles indiquées ci-dessus qui sont affectés à dna_data lors de l'utilisation read.dna_data = line
.
S'il vous plaît comment vous en débarrasser? Comment les évitez-vous en premier lieu? Qu'est-ce que je rate? Mon approche est-elle «puante»? Merci
Je pense qu'il y a un bug dans ce code: il pousse des enregistrements partiels sur le tableau des enregistrements. Il devrait seulement pousser un enregistrement en commençant une nouvelle section, ou quand le dossier est complètement lu. Si vous pouvez avoir confiance que les métadonnées sont toujours présentes et arrivent toujours en dernier, faites le push après read.metadata = ... –
Oui, il y a un bug. Les métadonnées sont toujours présentes et viennent en dernier. Donc, il est logique de faire le push après read.metadata = line.strip ... s'il vous plaît laissez-moi savoir si vous obtenez une solution de contournement qui est plus générique. Merci beaucoup! – eastafri
@eastafri, bug corrigé, et une nouvelle version introduite qui est moins pointilleuse sur la mise en page des données. Je m'excuse pour la mauvaise qualité de ma réponse initiale. –