How to write a tab-delimited file when the tab-delimiter comes from a database?

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

  •  28-10-2019
  •  | 
  •  

سؤال

I have a problem really phrasing this question so i try to give an example:

The following code works and creates the expected output: a delimited file where each column is separated by a "real" tab.

CSV.open(@targetfile, "wb", "\t") { |csv| 
csv << ["row", "of", "CSV", " }

The following code does not produce the expected out.

CSV.open(@targetfile, "wb", @targetdelimiter) { |csv| 
csv << ["row", "of", "CSV", "data"] }

@targetdelimiter in this case comes from the database and is actually the string '\t' (without the quotes) which can be configured by the user.

This code produces also a delimited output, but i can see the '\t' instead of a "real" tab character.

What can I do with the second code block to get the same result as the first codeblock given that the @targetdelimiter='\t' from the db?

هل كانت مفيدة؟

المحلول

Just gsub it and be done with it.

CSV.open(@targetfile, "wb", @targetdelimiter.gsub('\t',"\t")){ |csv| 
csv << ["row", "of", "CSV", "data"] }

نصائح أخرى

\t is replaced by an actual tab character (ASCII 0x09, or Char(9)) when it's used as a delimiter in your first example. In the second, it's not being replaced, and it's being used as the literal character sequence \ and t. You might have luck if you don't have the users store the escape sequence, and instead use something like TAB or NEWLINE, which you can then read from the database and convert to the proper character instead (or you can just convert them from the literals to the proper character).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top