Foros del Web » Programando para Internet » Javascript »

cadena con carácter especial

Estas en el tema de cadena con carácter especial en el foro de Javascript en Foros del Web. buenas tardes, var cadena = "A1\1\0\A2\1\0\A3\1\0\A4\1\0\A5\1\0\"; la valor de cadena viene de un fichero .csv el error javascript es: "constante de cadena sin terminar" ¿cómo ...
  #1 (permalink)  
Antiguo 07/06/2013, 13:40
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 22 años, 4 meses
Puntos: 2
cadena con carácter especial

buenas tardes,

var cadena = "A1\1\0\A2\1\0\A3\1\0\A4\1\0\A5\1\0\";

la valor de cadena viene de un fichero .csv

el error javascript es: "constante de cadena sin terminar"

¿cómo puedo evitar este error?

un saludo,
josé carlos.
  #2 (permalink)  
Antiguo 08/06/2013, 08:34
Avatar de Tecna  
Fecha de Ingreso: enero-2010
Mensajes: 291
Antigüedad: 14 años, 11 meses
Puntos: 45
Respuesta: cadena con carácter especial

Buenas,

Habría que ver como está estructurado el fichero. El error de cadena sin terminar puede ser porque le sobre un delimitador después del último campo. Cada registro termina con un salto de línea que es un caracter especial. También puede ser que los campos contengan al propio delimitador de campo o incluso comillas y entonces habría que escapar esos carateres especiales envolviendolos con comillas dobles.
__________________
tecnawebs.es Diseño web y programación - Modelado 3D.

google plus

Última edición por Tecna; 08/06/2013 a las 08:43
  #3 (permalink)  
Antiguo 08/06/2013, 15:48
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 22 años, 4 meses
Puntos: 2
Respuesta: cadena con carácter especial

gracias por responder,

pongo parte del script que lee secuencialmente un fichero .csv que hay que subir a la base de datos, el problema está creo en la cadena que incluye el carácter \, pues utillizo un script parecido para subir otros registros y no hay problema:

Código Javascript:
Ver original
  1. <script>
  2.  
  3. var campos      = new Array();
  4. var elementos   = new Array();
  5. var registro    = "";
  6. var codigo      = "";
  7. var concepto    = "";
  8. var factor      = "";
  9. var rendimiento = "";
  10.  
  11. var registros   = 0;
  12. var nelemento   = 0;
  13.  
  14. var cadena      = ~D|A#|A01\1\0\A02\1\0\A03\1\0\A10\1\0\A20\1\0\|;
  15. campos          = cadena.split("|");
  16.  
  17. registro        = campos[0];
  18.  
  19. if ( registro == '~D' )
  20. {
  21.     codigo      = campos[1];
  22.     elementos   = campos[2].substr(0, elementos.length-1).split("\\");
  23.    
  24.     for (i=0;i<elementos.length;i++)
  25.     {
  26.         nelemento++;
  27.    
  28.         if ( nelemento == 1 )
  29.         {
  30.             concepto = elementos[i];
  31.         }
  32.        
  33.         if ( nelemento == 2 )
  34.         {
  35.             factor = elementos[i];
  36.         }
  37.        
  38.         if ( nelemento == 3 )
  39.         {
  40.             rendimiento = elementos[i];
  41.             alert(concepto);
  42.             alert(factor);
  43.             alert(rendimiento);
  44.         }
  45.     }      
  46. }
  47.  
  48. </script>
  #4 (permalink)  
Antiguo 08/06/2013, 18:43
Avatar de zerokilled
Javascripter
 
Fecha de Ingreso: abril-2009
Ubicación: Isla del Encanto, La Borinqueña [+>==]
Mensajes: 8.050
Antigüedad: 15 años, 7 meses
Puntos: 1485
Respuesta: cadena con carácter especial

buenas...
la variable cadena no constituye un string, entonces javascript genera error. por otro lado, en la muestra original (primer post), el string no estaba finalizado. fíjate que al final termina en \" lo cual es una secuencia para una comilla doble literal. solo tenias que agregar otra comilla.
__________________
la maldad es una virtud humana,
y la espiritualidad es la lucha del hombre contra su maldad.
  #5 (permalink)  
Antiguo 09/06/2013, 13:01
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 22 años, 4 meses
Puntos: 2
Respuesta: cadena con carácter especial

buenas tardes, gracias por las respuesta

voy a probarlo, no me había dado cuenta,
la cadena que leo del fichero en campos[2]:
A1\1\0\A2\1\0\A3\1\0\A4\1\0\A5\1\0\

lo había simplificado para centrar el tema,
en el segundo post pongo un resumen más completo que no logro solucionar.

un saludo,
josé carlos.
  #6 (permalink)  
Antiguo 10/06/2013, 05:23
Avatar de Tecna  
Fecha de Ingreso: enero-2010
Mensajes: 291
Antigüedad: 14 años, 11 meses
Puntos: 45
Respuesta: cadena con carácter especial

Buenas,

Estás usando como delimitador de campos en el fichero csv la barra invertida que en javascript tiene un significado especial con las cadenas por lo tanto el contenido de campos[2] no es el que debería ser, por ejemplo la secuencia \0 se interpreta como el caracter NULL. La mejor solución sería sustituir mediante expresiones regulares el delimitador por otro que no esté incluido en el contenido del fichero csv y no tenga un significado especial en javascript. Este es el problema principal.

En las líneas 14 y 22 al usar split y ser el delimitador el último caracter de la cadena te va a generar un último elemento en el array vacio. Esto no es muy importante pero sería mejor eliminar ese carácter.

Antes de la línea 22 elementos.length es 0, no se que sentido tiene el segundo argumento de substr pero si quieres que lo haga hasta el final de la cadena sólo usa el primer argumento. Después de la línea 22 elementos.length es 1, así que tampoco tiene mucho sentido el for de la línea 24 y siguientes.

No se cual será el motivo de hacer esto con javascript pero hay mejores formas de hacerlo, por ejemplo desde la propia consola de mysql.
__________________
tecnawebs.es Diseño web y programación - Modelado 3D.

google plus
  #7 (permalink)  
Antiguo 10/06/2013, 09:02
 
Fecha de Ingreso: julio-2002
Mensajes: 813
Antigüedad: 22 años, 4 meses
Puntos: 2
Respuesta: cadena con carácter especial

gracias por la respuesta,

así el problema, viene que el fichero que recibo utiliza "\" como delimitador, para evitar complicaciones he sustituido el delimitador directamente en el fichero .csv.

un saludo,
josé carlos.
  #8 (permalink)  
Antiguo 11/06/2013, 03:28
Avatar de dontexplain  
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 12 años, 6 meses
Puntos: 127
Respuesta: cadena con carácter especial

Para evitar complicaciones sólo basta hacer las cosas bien. \ es el carácter de escape, para mostrarlo basta un carácter de escape sobre el carácter de escape

\\

No tiene más.

Un saludo.
__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor
  #9 (permalink)  
Antiguo 11/06/2013, 07:05
Avatar de Tecna  
Fecha de Ingreso: enero-2010
Mensajes: 291
Antigüedad: 14 años, 11 meses
Puntos: 45
Respuesta: cadena con carácter especial

Buenas,

En este caso concreto en que los datos ya existen en un fichero .csv y se van a importar a una base de datos la mejor opción sería hacerlo desde la propia consola de mysql por varios motivos:

- Sólo se necesita una instrucción de mysql.
- El tiempo de proceso es considerablemente menor.
- No haría falta cambiar el delimitador ni pre tratar los datos.
- Los datos no salen del servidor.
- Hay menos riesgos de que algo salga mal, como que se pierda la codificación o que el tratamiento tenga errores.

En el caso de tener que hacerlo con javascript, es mejor sustituir la barra invertida por otro caracter, también por varios motivos:

- Porque no se añade contenido extra al fichero de datos ni aumenta su tamaño. Según el ejemplo que puso aparece el caracter a escarpar 15 veces en cada registro y el fichero bien pudiera tener 10 líneas o 10.000.

- Sigue manteniendo el formato típico de los ficheros csv (dato delimitador dato) y podría ser procesado y compartido por otras aplicaciones sin tener que volver a pre tratar.

- Con javascript habría que hacer un análisis minucioso de los datos del fichero puesto que no sólo la barra invertida tiene un significado especial en javascript, también las comillas por ejemplo, y pudiera haber errores al procesar los datos si aparecen estos caracteres especiales entre ellos.
__________________
tecnawebs.es Diseño web y programación - Modelado 3D.

google plus

Etiquetas: cadena, especial
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 11:22.