Tab Delimiterがデータベースから来たときにTab Delimitedファイルを書き込む方法は?

StackOverflow https://stackoverflow.com/questions/5862164

  •  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, その後、データベースから読み取り、代わりに適切な文字に変換できます(または、リテラルから適切な文字に変換することができます)。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top