7
votes

Fractionnement sur un caractère unique

Je souhaite créer une liste séparée par des virgules afin que je puisse diviser sur la virgule plus tard pour obtenir un tableau des valeurs. Cependant, les valeurs peuvent avoir une virgule dans elles. En fait, ils peuvent avoir un caractère de clavier normal (ils sont fournis à partir d'un utilisateur). Quelle est une bonne stratégie pour déterminer un personnage que vous êtes sûr ne sera certainement pas collide avec les valeurs?

Si cela compte de manière dépendante de la langue, je construisons la liste séparée "de certains caractères" en C # et je l'envoie à un navigateur à scinder en JavaScript.


2 commentaires

Repenser peut-être le problème et envoie les données dans XML ou JSON au lieu de s'appuyer sur un ou plusieurs caractères que vous espérez que l'utilisateur ne fournit pas en entrée ou ne peut pas faire partie des données valides.


Je suis d'accord avec Anthony, il y a un support complet sur le serveur et le client pour utiliser ces approches. S'il y a une condition réelle d'émettre un CSV / DSV, il peut toujours être moins de problème d'exporter les données plus tard.


7 Réponses :


1
votes

Vous pouvez le diviser par un caractère nul et mettre fin à votre liste avec un caractère double null.


0 commentaires

0
votes

J'utilise toujours | Mais si vous pensez toujours que cela peut le contenir, vous pouvez utiliser des combinaisons comme @ | @. Par exemple: xxx


2 commentaires

Le point est que les utilisateurs peuvent toujours taper de tels caractères. En utilisant un caractère nul comme GAMERNB suggère, vous pouvez éviter ce problème. Un caractère nul peut toutefois ne pas être valide dans chaque format de fichier. Vous pouvez échapper à la chaîne d'origine et utiliser un autre caractère divisé pour éviter ce problème.


Je pensais que cela aussi, mais j'ai raté que le format de sortie est consommé par JS. Si les données sont exportées comme un fichier cependant, vous avez raison.



3
votes

Si JavaScript consomme la liste, pourquoi ne pas l'envoyer sous la forme d'une matrice JavaScript? Il possède déjà une méthode établie et fiable pour représenter une liste et échapper des caractères.

["Value 1", "Value 2", "Escaped \"Quotes\"", "Escaped \\ Backslash"]


0 commentaires

0
votes

Eric S. Raymond a écrit un chapitre de livre à ce sujet que vous pourriez trouver utile . Il est dirigé vers les utilisateurs Unix mais devrait toujours s'appliquer.

Quant à votre question, si vous aurez des virgules au sein des cellules, vous aurez besoin d'une forme d'échappement. L'utilisation de \, code> est une manière standard, mais vous devrez également échapper aux barres obliques, qui sont également courantes. P>

Alternativement, utilisez un autre caractère tel que le tuyau (|), l'onglet ou quelque chose d'autre de votre choix. Si les utilisateurs doivent travailler avec les données à l'aide d'un programme de feuille de calcul, vous pouvez généralement ajouter des règles de filtrage pour diviser les cellules du délimiteur de votre choix. Si ceci est une préoccupation, il est probablement préférable de choisir un délimiteur que les utilisateurs peuvent facilement taper, ce qui exclut le NUL Char, entre autres. P>

Vous pouvez également utiliser citant: P>

"value1", "value2", "etc"


0 commentaires

0
votes

S'il y a un potentiel d'apparition de tout caractère de fractionnement dans vos chaînes, je vous suggère que vous écrivez un élément de script à votre sortie avec une définition de matrice JavaScript. Par exemple:

<script>
var myVars=new Array();
myVars[0]="abc|@123$";
myVars[1]="123*456";
myVars[2]="blah|blah";
</script>


0 commentaires

0
votes

Il y a plusieurs façons de faire cela. Le premier consiste à sélectionner un caractère de séparateur qui ne serait normalement pas entré du clavier. NULL ou TAB sont normalement bons. La seconde consiste à utiliser une séquence de caractères comme séparateur, les fichiers CSV Excel sont un bon exemple dans lequel les valeurs de cellule sont définies par des guillemets avec des virgules séparant les cellules.
La réponse dépend de si vous souhaitez réinventer la roue ou non.


0 commentaires

0
votes

Il y a un RFC qui documente le format CSV. suivez les normes et vous allez Évitez de réinventer la roue et de créer un gâchis pour le prochain gars à venir et à maintenir votre code. La bonne chose est qu'il existe des bibliothèques disponibles pour importer / exporter CSV pour presque toutes les plateformes que vous pouvez imaginer.

Cela dit, si vous êtes des données sérialisées pour envoyer à un navigateur, JSON est vraiment la voie à suivre et c'est aussi documenté dans un RFC et vous pouvez obtenir des bibliothèques pour presque toutes les plateformes telles que json.net


0 commentaires