Tab Delimiterがデータベースから来たときにTab Delimitedファイルを書き込む方法は?
-
28-10-2019 - |
質問
私はこの質問を本当に言い訳するのに問題があるので、例を挙げようとします:
次のコードが機能し、予想される出力を作成します。各列が「実際の」タブで区切られる区切りファイル。
CSV.open(@targetfile, "wb", "\t") { |csv|
csv << ["row", "of", "CSV", " }
次のコードでは、予想されるコードが生成されません。
CSV.open(@targetfile, "wb", @targetdelimiter) { |csv|
csv << ["row", "of", "CSV", "data"] }
@targetdelimiter
この場合、データベースから来て、実際には文字列です '\t'
(引用符なし)ユーザーが構成できます。
このコードは区切られた出力も生成しますが、 '\t'
「本物の」タブ文字の代わりに。
2番目のコードブロックで何ができるかを示して、最初のコードブロックと同じ結果を取得します。 @targetdelimiter='\t'
DBから?
解決
ただそれをgsubして、それで完了します。
CSV.open(@targetfile, "wb", @targetdelimiter.gsub('\t',"\t")){ |csv|
csv << ["row", "of", "CSV", "data"] }
他のヒント
\t
実際のタブ文字(ASCII)に置き換えられます 0x09
, 、 また Char(9)
)最初の例で区切り文字として使用されている場合。第二に、それは置き換えられておらず、リテラルキャラクターシーケンスとして使用されています \
と t
. 。ユーザーがエスケープシーケンスを保存していない場合、代わりに次のようなものを使用している場合は運があります TAB
また NEWLINE
, その後、データベースから読み取り、代わりに適切な文字に変換できます(または、リテラルから適切な文字に変換することができます)。
所属していません StackOverflow