90 votes

Caractère de délimitation le moins utilisé dans un texte normal < ASCII 128

Pour des raisons de codage qui vous horrifieraient (je suis trop gêné pour le dire), je dois stocker un certain nombre d'éléments de texte dans une seule chaîne.

Je vais les délimiter en utilisant un caractère.

Quel est le meilleur caractère à utiliser pour cela, c'est-à-dire celui qui a le moins de chances d'apparaître dans le texte ? Il doit être imprimable et probablement inférieur à 128 en ASCII pour éviter les problèmes de localisation.

51voto

Edwin Buck Points 33097

Je choisirais "Unit Separator" code ASCII "US" : ASCII 31 (0x1F)

Dans le passé, la plupart des choses étaient faites en série, sans accès aléatoire. Cela signifie que quelques codes de contrôle étaient intégrés dans l'ASCII.

ASCII 28 (0x1C) File Separator - Used to indicate separation between files on a data input stream.
ASCII 29 (0x1D) Group Separator - Used to indicate separation between tables on a data input stream (called groups back then).
ASCII 30 (0x1E) Record Separator - Used to indicate separation between records within a table (within a group).  These roughly map to a tuple in modern nomenclature.
ASCII 31 (0x1F) Unit Separator - Used to indicate separation between units within a record.  The roughly map to fields in modern nomenclature.

Le séparateur d'unités est en ASCII, et il existe un support Unicode pour l'afficher (typiquement un "us" dans le même glyphe) mais de nombreuses polices ne l'affichent pas.

Si vous devez l'afficher, je vous recommande de le faire dans l'application, après l'avoir analysé en champs.

37voto

Nick Fortescue Points 18829

En supposant que, pour une raison embarrassante, vous ne puissiez pas utiliser le CSV, je dirais qu'il faut utiliser les données. Prenez un échantillon de données, et faites un simple comptage de caractères pour chaque valeur 0-127. Choisissez l'une des valeurs qui n'apparaît pas. S'il y a trop de choix, prenez un ensemble de données plus grand. Cela ne prendra pas beaucoup de temps à écrire et vous obtiendrez la meilleure réponse pour vous.

La réponse sera différente pour différents domaines de problèmes, ainsi | (pipe) est commun dans les scripts, ^ est commun dans les formules mathématiques, et la même chose est probablement vraie pour la plupart des autres caractères.

Personnellement, je pense que j'opterais pour | (pipe) si on me donnait le choix, mais il est plus sûr d'utiliser des données réelles.

Et quoi que vous fassiez, assurez-vous d'avoir trouvé un moyen de vous échapper !

23voto

Icarin Points 58

Lorsque vous utilisez différentes langues, ce symbole : ¬

s'est avéré être le meilleur. Cependant, je continue à faire des essais.

22voto

SQLMenace Points 68670

Probablement | ou ^ ou ~ vous pouvez aussi combiner deux caractères

17voto

Jason S Points 58434

Vous avez dit "imprimable", mais cela peut inclure des caractères tels qu'une tabulation (0x09) ou un saut de page (0x0c). Je choisis presque toujours les tabulations plutôt que les virgules pour les fichiers délimités, car les virgules peuvent parfois apparaître dans le texte.

(Il est intéressant de noter que le table ascii a les caractères GS (0x1D), RS (0x1E) et US (0x1F) pour les séparateurs de groupe, d'enregistrement et d'unité, quels qu'ils soient).

Si par "imprimable" vous entendez un caractère qu'un utilisateur peut reconnaître et taper facilement, je choisirais d'abord le symbole "pipe", avec quelques autres caractères bizarres ( @ o ~ o ^ o \ ou backtick (que je ne parviens pas à saisir ici) comme une possibilité. Ces caractères +=!$%&*()-'":;<>,.?/ semblent plus susceptibles de se produire dans la saisie de l'utilisateur. Quant au soulignement _ et le hachage # et les parenthèses {}[] Je ne sais pas.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X