2011-01-20 23 views
7

Quiero construir una lista separada por comas para poder dividir la coma más tarde para obtener una matriz de valores. Sin embargo, los valores pueden tener coma en ellos. De hecho, pueden tener cualquier carácter de teclado normal en ellos (son proporcionados por un usuario). ¿Cuál es una buena estrategia para determinar un personaje que está seguro que no colisionará con los valores?Dividir en un carácter único

En caso de que esto importa de una manera dependiente de la lengua, estoy construyendo el "poco de carácter" lista separada en C# y enviarla a un navegador que ser dividido en javascript.

+4

repensar Tal vez el problema y envíe los datos en xml o json en lugar de confiar en uno o más caracteres que espera que el usuario no proporcione como entrada o que no puedan formar parte de datos válidos. –

+0

Estoy de acuerdo con Anthony, hay un soporte completo en el servidor y el cliente para usar estos enfoques. Si existe un requisito real para emitir un csv/dsv, puede ser menos problemático exportar los datos más tarde. –

Respuesta

1

Puede dividirlo por un carácter nulo, y finalizar su lista con un doble carácter nulo.

+0

esta es una buena idea, me gusta. –

0

Siempre uso | pero si aún crees que puede contenerlo, puedes usar combinaciones como @ | @. Por ejemplo:

"string [email protected]|@string [email protected]|@[email protected]|@last string" 
+0

El punto es que los usuarios siempre pueden escribir esos caracteres. Al usar un carácter nulo como lo sugiere gamernb, puede evitar este problema. Sin embargo, un carácter nulo puede no ser válido en todos los formatos de archivo. Puede escapar de la cadena original y usar otro carácter dividido para evitar ese problema. – Ruud

+0

Pensé eso también, pero me perdí que el formato de salida es consumido por JS. Sin embargo, si los datos se exportan como un archivo, tienes razón. –

3

Si JavaScript está consumiendo la lista, por qué no enviarlo en forma de una matriz de JavaScript? Ya tiene un método establecido y confiable para representar una lista y escapar de los caracteres.

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

Eric S. Raymond escribió un capítulo de un libro sobre esto que es posible encontrar useful. Está dirigido a usuarios de Unix, pero aún debe aplicarse.

En cuanto a su pregunta, si tiene comas dentro de las celdas, entonces necesitará algún tipo de escape. Usar \, es una forma estándar, pero también deberá escapar de las barras, que también son comunes.

Como alternativa, use otro carácter como la tubería (|), la pestaña u otra cosa de su elección. Si los usuarios necesitan trabajar con los datos usando un programa de hoja de cálculo, generalmente puede agregar reglas de filtro para dividir celdas en el delimitador de su elección. Si esto es una preocupación, probablemente sea mejor elegir un delimitador que los usuarios puedan escribir fácilmente, lo que excluye el nul char, entre otros.

También es posible usar citar:

"value1", "value2", "etc" 

En cuyo caso, usted sólo tendrá que escapar comillas (y barras). Esto también debería ser aceptado por hojas de cálculo dadas las opciones de filtro correctas.

0

Si existe la posibilidad de cualquier carácter división que aparezca en sus cadenas a continuación, entonces yo sugeriría que se escribe un elemento de secuencia de comandos para su salida con una definición de matriz Javascript en ella. Por ejemplo:

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

Su Javascript a continuación puede hacer referencia a esa matriz

De esta forma también se evita la necesidad de crear una cadena separada separado de su gama C# cadena.

El gotcha que puedo pensar es en cadenas que contiene comillas, en este caso tendría que escapar de ellos en C# al escribirlas a la salida myVars.

0

Existen varias formas de hacerlo. El primero es seleccionar un carácter separador que normalmente no se ingresaría desde el teclado. NULL o TAB son normalmente buenos. El segundo es usar una secuencia de caracteres como separador, los archivos CSV de Excel son un buen ejemplo donde los valores de las celdas están definidos por comillas con comas que separan las celdas.
La respuesta depende de si desea reinventar la rueda o no.

0

Hay un RFC which documents the CSV format. Siga los estándares y evitará reinventar la rueda y crear un lío para el siguiente tipo que venga y mantenga su código. Lo bueno es que hay bibliotecas disponibles para importar/exportar CSV para casi cualquier plataforma que puedas imaginar.

Dicho esto, si usted está serialising datos para enviar a un navegador, JSON es realmente el camino a seguir y que también es documented in an RFC y usted puede conseguir las bibliotecas para casi cualquier plataforma, como JSON.NET

Cuestiones relacionadas