Comment écrire un fichier délimité par des tabulations lorsque l'onglet délimiteur provient d'une base de données?

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

  •  28-10-2019
  •  | 
  •  

Question

J'ai un problème phrasé vraiment cette question si je tente de donner un exemple:

Les travaux de code suivant et crée la sortie attendue:. un fichier délimité où chaque colonne est séparée par un onglet « réel »

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

Le code suivant ne produit pas attendu dehors.

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

@targetdelimiter dans ce cas provient de la base de données et est en fait la chaîne '\t' (sans les guillemets) qui peut être configuré par l'utilisateur.

Ce code produit également une sortie Délimité, mais je peux voir le '\t' au lieu d'un caractère de tabulation « réel ».

Que puis-je faire avec le deuxième bloc de code pour obtenir le même résultat que le premier bloc de code étant donné que le @targetdelimiter='\t' du db?

Était-ce utile?

La solution

Juste gsub et être fait avec elle.

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

Autres conseils

\t est remplacé par un caractère de tabulation réelle (0x09 ASCII ou Char(9)) lorsqu'il est utilisé comme séparateur dans votre premier exemple. Dans le second, il est pas remplacé, et il est utilisé comme la séquence de caractères littérale \ et t. Vous pourriez avoir de la chance si vous ne possédez pas les utilisateurs de stocker la séquence d'échappement, et au lieu d'utiliser quelque chose comme TAB ou NEWLINE, que vous pouvez ensuite lire à partir de la base de données et convertir au caractère approprié au lieu (ou vous pouvez simplement les convertir de la littéraux au caractère propre).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top