Moins utilisés caractère délimiteur de texte normal < ASCII 128
Pour le codage des raisons qui seraient horrifiés vous (je suis trop gêné pour le dire), j'ai besoin de stocker un certain nombre d'éléments de texte dans une chaîne unique.
Je vais délimiter entre eux à l'aide d'un personnage.
Le caractère qui est le meilleur à utiliser pour ce, c'est à dire le caractère qui est le moins susceptible d'apparaître dans le texte? Doit être imprimable et probablement moins de 128 en ASCII pour éviter de paramètres régionaux questions.
- Merci de ne pas être embarrased. Vous devez ignorer toutes les personnes qui disent "oh, c'est une merde manière, le faire à la place". Ce n'est pas pour les intervenants à la question pourquoi, pour eux de répondre à comment. Je ne m'inquiète pas pourquoi vous êtes dans cette position. J'ai été dans un peu de moi. Bonne chance!
- J'ai eu ce même problème..et je suis allé avec tube avant de le googler ou la pile déborde...parce que j'ai aimé la façon dont il a regardé--- | ----comme un skinney personne.
- Il dépend du type de texte. Certains types de texte utilise rarement les caractères de tabulation j'ai donc souvent aller avec qui. Mais d'autres types de texte y compris le code source souvent le fait de l'utiliser. Ne pouvez-vous pas faire quelques stats sur votre texte source? Ne pouvez-vous pas ajouter des caractères d'échappement dans votre texte source et ainsi utiliser tout ce que vous voulez comme délimiteur?
- ne se posant pas de & ne pas essayer c'est bien pire que d'être gêné de poser tout type de question. Je suis ici pour répondre à la même question et je suis fière de moi que j'ai quelques autres personnes qui partagent le même problème avec moi 🙂
- Pour ceux qui ont un
|
dans leur texte, j'ai effectivement eu un cas où j'avais besoin de garder les caractères vers un minimum autant que possible. Puisque la plupart des domaines où les cordes avec un texte intéressant, CSV ne fonctionne pas en raison de trop s'échapper. Notre séparateur de champ est/|
. La barre oblique n'est que modérément commune, mais couplé avec un tuyau de ne jamais vous exécutez en elle. J'ai été en utilisant un moteur qui reçoit beaucoup de données transmises par le biais de tous les jours. Cela n'a jamais rompu, et je n'ai jamais eu besoin d'encapsuler une seule chaîne de caractères, ou d'échapper à un caractère spécial. En moyenne, ce mécanisme nous a sauvés d'un peu de pourcentage de texte.
Vous devez vous connecter pour publier un commentaire.
En supposant que pour certains embarrassant raison pour laquelle vous ne pouvez pas utiliser CSV, je dirais aller avec les données. Prenons quelques exemples de données, et de faire une simple nombre de caractères pour chaque valeur de 0 à 127. Choisissez l'un de ceux qui ne se produit pas. Si il y a trop de choix à obtenir un plus grand ensemble de données. Il ne prendra pas beaucoup de temps pour écrire, et vous aurez la réponse le mieux pour vous.
La réponse sera différente pour différents domaines de problème, de sorte que | (pipe) est commun dans les scripts shell, ^ est commun dans les formules mathématiques, et la même chose est probablement vrai pour la plupart des autres personnages.
Personnellement, je pense que j'irais pour | (pipe), si, étant donné un choix, mais d'aller avec des données réelles est plus sûr.
Et quoi que vous fassiez, assurez-vous que vous avez travaillé un échapper schéma!
additional_attributes
.\t
comme délimiteur?Je choisirais "Unité de Séparateur" code ASCII "NOUS": ASCII 31 (0x1F)
Dans l'ancien, le vieux jours, la plupart des choses ont été faites en série, sans accès aléatoire. Cela signifie que quelques-uns des codes de contrôle ont été intégrés en ASCII.
Unité de Séparateur est en ASCII, et il est le support de l'Unicode pour l'affichage (généralement un "nous" dans le même glyphe), mais de nombreuses polices de ne pas l'afficher.
Si vous devez l'afficher, je vous recommande de les afficher dans l'application, après qu'il a été analysé dans les champs.
Probablement | ou ^ ou ~ vous pouvez également combiner deux personnages
Lors de l'utilisation de langues différentes, ce symbole:
s'est avéré être le meilleur. Cependant, je suis encore en test.
Vous avez dit "imprimable", mais qui peut inclure des caractères tels que un onglet (0x09) ou de la forme de l'aliment (0x0c). J'ai presque toujours choisir des onglets plutôt que de virgules pour les fichiers délimités par des, depuis des virgules peuvent parfois apparaître dans le texte.
(Curieusement le table ascii a des caractères GS (0x1D), RS (0x1E), et NOUS (0x1F) pour le groupe, d'enregistrer et de l'unité de séparateurs, quelle que soit ceux sont/ont.)
Si par "imprimer" vous voulez dire un personnage qu'un utilisateur pouvait reconnaître et d'entrer facilement, je pencherais pour le tuyau | symbole d'abord, avec quelques autres caractères bizarres (
@
ou~
ou^
ou\
, ou backtick qui je n'arrive pas à entrer ici) comme une possibilité. Ces caractères+=!$%&*()-'":;<>,.?/
semblent comme ils seraient plus susceptibles de se produire dans la saisie de l'utilisateur. Comme pour souligner_
de hachage et de#
et les supports{}[]
je ne sais pas.28 FS
Séparateur de Fichiers,29 GS
Séparateur de Groupe,30 RS
le Séparateur d'Enregistrement,31 US
Unité de Séparateur. Malheureusement, presque personne ne les utilise bien, c'est exactement ce à quoi ils étaient destinés. Personnellement, j'ai horreur de CSV format de fichiers que beaucoup de gens ne pense pas que des choses à travers et faire un désordre que nous les programmeurs ont à traiter si nous voulons soutenir leurs formats de fichier.Que diriez-vous d'utiliser un fichier CSV format de style? Les caractères peuvent être échappé dans un standard format CSV, et il y a déjà beaucoup d'analyseurs déjà écrit.
Pouvez-vous utiliser un symbole de canal? C'est généralement le plus souvent délimiteur après la virgule ou tabulation des chaînes de caractères. Il est peu probable que la plupart de texte contenant une pipe, et ord('|') retourne 124 pour moi, donc, qui semble correspondre à vos besoins.
Rapide pour s'échapper-je utiliser des trucs comme ça:
dites que vous voulez concatinate str1, str2 et str3
ce que je fais, c'est:
puis de récupérer usage d'origine:
remarque: l'ordre de les remplacer est important
ses incassable et facile à mettre en œuvre
Tuyau pour la victoire! |
Nous utilisons ascii 0x7f qui est de la pseudo-imprimable et à peine vient jamais en utilisation régulière.
Cela peut être bon ou mauvais (généralement mauvais) en fonction de la situation et de la langue, mais garder l'esprit l'esprit que vous pouvez toujours Base64 encode le tout. Ensuite, vous n'avez pas à vous inquiéter au sujet de l'évasion et de l'unescaping des motifs différents de chaque côté, et vous pouvez simplement les séparer et diviser les chaînes basé sur un personnage qui n'est pas utilisée dans votre Base64 charset.
J'ai eu recours à cette solution lorsqu'ils sont confrontés à mettre des documents XML en XML des propriétés ou des nœuds. Les propriétés ne peuvent pas avoir CDATA blocs en tout, et les nœuds échappé que CDATA de toute évidence ne peut pas avoir plus CDATA des blocs à l'intérieur que sans casser la structure.
CSV est probablement une meilleure idée pour la plupart des situations, si.
Bien ça va dépendre de la nature de votre texte dans une certaine mesure, mais une barre verticale 0x7C ne pas des cultures dans le texte très souvent.
Je ne pense pas que j'ai jamais vu un commercial suivi par une virgule dans le texte naturel, mais vous pouvez vérifier d'abord le fichier pour voir s'il contient le séparateur, et si oui, utiliser une solution de rechange. Si vous voulez toujours être en mesure de savoir que le délimiteur vous utilisez ne seront pas provoquer un conflit, puis de faire une boucle de vérifier le fichier pour le délimiteur vous voulez, et si elle existe, alors le double de la corde jusqu'à ce que le fichier n'a plus de match. Il n'a pas d'importance si il y a des chaînes similaires parce que votre programme ne exactes délimiteur de matchs.
À la fois de la pipe et caret sont les choix évidents. Je tiens à préciser que si les utilisateurs sont attendus pour la saisie de la totalité de la réponse, l'accent circonflexe est plus facile à trouver sur un clavier que de la pipe.