Nasıl Ruby HEREDOC önde gelen beyaz boşluk karakter kaldırabilirim?
Yapmaya çalışıyorum Ruby bir yorumlu metin olarak bir sorun yaşıyorum. - Tüm önde gelen boşluk bastırmak gerekiyordu operatör, karakterler dahil olmama rağmen her satırından önde gelen boşluk dönüyor. benim yöntem bu gibi görünüyor:
def distinct_count
<<-EOF
\tSELECT
\t CAST('#{name}' AS VARCHAR(30)) as COLUMN_NAME
\t,COUNT(DISTINCT #{name}) AS DISTINCT_COUNT
\tFROM #{table.call}
EOF
end
ve benim çıkış bu gibi görünüyor:
=> " \tSELECT\n \t CAST('SRC_ACCT_NUM' AS VARCHAR(30)) as
COLUMN_NAME\n \t,COUNT(DISTINCT SRC_ACCT_NUM) AS DISTINCT_COUNT\n
\tFROM UD461.MGMT_REPORT_HNB\n"
bu, tabii ki, ilk " ve \t. arasındaki tüm boşluklar dışında bu özel durumda değil. herkes burada yanlış ne yapıyorum biliyor mu?
CEVAP
Eğer Raylar 3.0 veya daha yeni bir sürümünü kullanıyorsanız, #strip_heredoc
deneyin. This example from the docs son iki satır' iki boşluk girinti: . koruyarak, hiçbir girinti ile ilk üç satırı yazdırır
if options[:usage]
puts <<-USAGE.strip_heredoc
This command does such and such.
Supported options are:
-h This message
...
USAGE
end
Belgeleri de notları: "Teknik olarak, bütün dizesinde az girintili satırı arar ve baştaki boşluk miktarını kaldırır."
İşte active_support/core_ext/string/strip.rb uygulama:
class String
def strip_heredoc
indent = scan(/^[ \t]*(?=\S)/).min.try(:size) || 0
gsub(/^[ \t]{#{indent}}/, '')
end
end
Ve test/core_ext/string_ext_test.rb testleri bulabilirsiniz.
Nasıl sınırlayıcı olarak herhangi bir ...
Nasıl IIS7 gelen eTag başlıkları kaldı...
Nasıl dize gelen ilk 5 karakter almak ...
Nasıl bir boşluk ile birden fazla beya...
Nasıl dize karakter ve boşluk içeriyor...