0

マイクロアレイのデータ処理のために、1 から 654 までの遺伝子名のリストを作成する必要がありますGene_1 ... Gene_654

私のシンプルな Ruby コードは次のようになります。

1.upto(654).each { |i| print "Gene" } 

結果は次のとおりです。

GeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGene
GeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGene
GeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGene
GeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGene

GeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGene
GeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGene
GeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGene
GeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGene
GeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGene
..................................
GeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGeneGene=> 1
irb(main):008:0>

次のように、印刷された文字列に「postfix _#」を順次インクリメンタルに追加し、それらを列に配置するにはどうすればよいですか。

Gene_1
Gene_2
::::::
Gene_654
4

3 に答える 3

0

私は使用します:

str = 'Gene_0'
654.times { puts str.next! }

どの出力:

Gene_1
...
Gene_654

おそらく各行に情報を追加するために、テキスト出力を同じ幅にする必要がある場合は、いくつかのフォーマットを使用します。

str = 'Gene_0'
654.times { puts '%8s ' % str.next! }
# >>   Gene_1 
...
# >>   Gene_9 
# >>  Gene_10 
...
# >>  Gene_99 
# >> Gene_100 
...
# >> Gene_654 

ページ全体に列が必要な場合:

str = 'Gene_0'
654.times { print '%8s ' % str.next! }
puts

それらを 8 スペース幅の列に配置します。

デフォルト%8sでは右揃えが使用されますが、これは必ずしも必要なものではありません。代わりに、左揃えに使用できます%-8s

列見出しを含む配列を作成できます。

str = 'Gene_0'
columns = []
654.times { columns << '%-8s' % str.next! }
puts columns.join(' ')

次のようなものを使用することもできますinject

str = 'Gene_0'
columns = []
(1..654).inject(columns) { |a, i| a.push('%-8s' % str.next!) }
puts columns.join(' ')

しかし、それは実際には役に立たないコードを追加し始めます。


OPは尋ねました:

...結果に " " を追加する方法...

上記の出力では、によって出力に自動的に追加された空白が簡単にわかりません'%8s '。そのため、出力を二重引用符で囲むことにより、フォーマット文字列を微調整してより明確にしました。

str = 'Gene_0'
654.times { puts '"%8s "' % str.next! }

そして、対応する出力を以下に示します。文字列値が増加するにつれて、フォーマット文字列が列幅をどのように維持するかを示すためにトリミングされています。

# >> "  Gene_1 "
...
# >> "  Gene_9 "
# >> " Gene_10 "
...
# >> " Gene_99 "
# >> "Gene_100 "
...
# >> "Gene_654 "

すべての空白を列の最後に配置する場合は、左揃えを使用します。

str = 'Gene_0'
654.times { puts '"%-8s "' % str.next! }

どの出力:

# >> "Gene_1   "
...
# >> "Gene_9   "
# >> "Gene_10  "
...
# >> "Gene_99  "
# >> "Gene_100 "
...
# >> "Gene_654 "
于 2013-09-04T18:28:34.993 に答える
0
1.upto(654).each { |i| printf "%8s\t", "Gene_#{i}" }

ソース: http://www.ruby-doc.org/core-2.0.0/Kernel.html#format-method

于 2013-09-04T17:30:24.070 に答える