Как написать файл, определенный вкладками, когда делиминатор вкладок из базы данных?
-
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'
Вместо «настоящего» символа вкладки.
Что я могу сделать со вторым блоком кода, чтобы получить тот же результат, что и первый блок кода, учитывая, что @targetdelimiter='\t'
от БД?
Решение
Просто GSUB IT и покончитесь с этим.
CSV.open(@targetfile, "wb", @targetdelimiter.gsub('\t',"\t")){ |csv|
csv << ["row", "of", "CSV", "data"] }
Другие советы
\t
заменяется фактическим символом вкладки (ASCII 0x09
, или же Char(9)
), когда он используется в качестве разделителя в вашем первом примере. Во -вторых, это не заменяется, и он используется в качестве буквальной последовательности символов \
а также t
. Анкет Вам может повезло, если у вас нет пользователей хранить последовательность побега, и вместо этого использовать что -то вроде TAB
или же NEWLINE
, что вы можете затем прочитать из базы данных и вместо этого преобразовать в соответствующий символ (или вы можете просто преобразовать их из литералов в правильный символ).