Как написать файл, определенный вкладками, когда делиминатор вкладок из базы данных?

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' Вместо «настоящего» символа вкладки.

Что я могу сделать со вторым блоком кода, чтобы получить тот же результат, что и первый блок кода, учитывая, что @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, что вы можете затем прочитать из базы данных и вместо этого преобразовать в соответствующий символ (или вы можете просто преобразовать их из литералов в правильный символ).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top