Foros del Web » Programando para Internet » Javascript »

Extraer números de una cadena de texto

Estas en el tema de Extraer números de una cadena de texto en el foro de Javascript en Foros del Web. Hola, me estoy iniciando en el mundo del javascript y me temo que estoy muy verde. Estaba intentando hacer un pequeño script que calcula tiradas ...
  #1 (permalink)  
Antiguo 22/06/2012, 11:52
 
Fecha de Ingreso: junio-2012
Mensajes: 12
Antigüedad: 11 años, 10 meses
Puntos: 0
Extraer números de una cadena de texto

Hola, me estoy iniciando en el mundo del javascript y me temo que estoy muy verde. Estaba intentando hacer un pequeño script que calcula tiradas de dados en función del número de dados y las caras del dado marcado por el usuario (por ejemplo 1d8). Sin embargo, al hacer pruebas me dice que el resultado es NaN, es decir, no es númerico.

Me estoy volviendo loco porque no acabo de ver donde me equivoco y una duda que me ha surgido es si el problema puede ser que al coger un número de la cadena de texto no lo asocie como número sino como carácter y por tanto no me deje operar con él.

Sino me temo que no estoy utilizando bien el substring

¿Alguien me puede aclarar estas dudas?

El pequeño código que he preparado es este:

<script type="text/javascript">
var dados = prompt("¿Qué dados quieres tirar?");
var resultadoDados = tiradaDado(dados);
alert("El resultado es " + resultadoDados);

function aleatorio(a,b) {
return Math.round(Math.random()*(b-a)+a);
}

function tiradaDado(dados) {
var posicion_d = dados.indexOf("d");
var numeroDeDados = dados.substring(0, posicion_d);
var valorDeDados = dados.substring(posicion_d++);
var tiradaDados = aleatorio(1, valorDeDados);

for(var i=0; i<numeroDeDados; i++) {
resultadoDados += tiradaDados;
}
return resultadoDados
}


</script>
  #2 (permalink)  
Antiguo 22/06/2012, 12:45
Avatar de dontexplain  
Fecha de Ingreso: junio-2012
Mensajes: 536
Antigüedad: 11 años, 10 meses
Puntos: 127
Respuesta: Extraer números de una cadena de texto

Realiza una asociación del tipo

function sabernum(){
letra = "d";
aso = [];
aso['a'] = 0;
aso['b'] = 1;
aso['c'] = 2;
aso['d'] = 3;

alert(aso[letra]);

}


Un saludo, ya lo tienes asociado.
__________________
21añero.
HTML/CSS, PHP, JS/jQuery, Mysql; NodeJS/Socket.io (& V8); C++ ; Python (wxpy); Ensamblador.
Músico (clarinetista/pianista) y compositor
  #3 (permalink)  
Antiguo 22/06/2012, 12:57
 
Fecha de Ingreso: junio-2012
Mensajes: 12
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Extraer números de una cadena de texto

Perdona no acabo de entender muy bien como me puede ayudar esa función que me planteas. Lo siento, ¿me podrías explicar un poco más?

Añado algo de información, los datos de entrada de mi script siempre van a tener la forma de xxdyy, por ejemplo: 1d8, 10d6, 1d10...

La letra d la utilizo para intentar separar las dos subcadenas que quiero extraer.

Gracias por la ayuda porque la verdad es que ando un poco verde (por no decir mucho)
  #4 (permalink)  
Antiguo 22/06/2012, 13:20
Avatar de emprear
Colaborador
 
Fecha de Ingreso: junio-2007
Ubicación: me mudé
Mensajes: 8.388
Antigüedad: 16 años, 10 meses
Puntos: 1567
Respuesta: Extraer números de una cadena de texto

No voy a analizar toda la función, solo te digo lo de extraer los números

Código Javascript:
Ver original
  1. <script type="text/javascript">
  2. function separar()
  3. {
  4. var str="23d3";
  5. var n=str.split("d");
  6. alert(n[0] + '-' + n[1]);
  7. }
  8. </script>

Esto es , respetando lo que has dicho, que la d va a existir siempre y que hay un valor antes y otro después de la misma
Para que los trate como números, debés usar parseInt()

SAludos
__________________
La voz de las antenas va, sustituyendo a Dios.
Cuando finalice la mutación, nueva edad media habrá
S.R.

Última edición por emprear; 22/06/2012 a las 18:05 Razón: gramática
  #5 (permalink)  
Antiguo 22/06/2012, 13:23
 
Fecha de Ingreso: junio-2012
Mensajes: 12
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Extraer números de una cadena de texto

Umm, muchisimas gracias creo que esto último puede ser lo que necesito. Esta noche lo pruebo
  #6 (permalink)  
Antiguo 22/06/2012, 14:23
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 21 años, 6 meses
Puntos: 317
Respuesta: Extraer números de una cadena de texto

A mí el split() también me gusta más; pero me parece que no alcanza. Por que es cierto lo de las cadenas. No devuelven números sino literales.

Hay una forma muy fácil de arreglarlo, porque si se empieza a trabajar con números javascript supone que los valores siguientes también lo son, aunque vengan de un literal.

(Obviamente, si trabajamos con base10, al caracter "a" no lo va a interpretar jamás como un valor numérico, pero del "0" al "9", sí.)

El (casi) "truco" es poner en la variable resultadoDados un valor numérico, y lo que le sumemos después con las funciones va a ser entonces interpretado como un número.

Código:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3c.org/TR/1999/REC-html401-19991224/loose.dtd">
<html>
<head>
<meta http-equiv=Content-Type content="text/html; charset=utf-8">
<script type="text/javascript">
var resultadoDados = 0;

var dados = prompt("¿Qué dados quieres tirar?");
resultadoDados = tiradaDado(dados);
alert("El resultado es " + resultadoDados);

function aleatorio(a,b) {
return Math.round(Math.random()*(b-a)+a);
}

function tiradaDado(dados) {
var posicion_d = dados.indexOf("d"); alert(posicion_d+" posicion_d")
var numeroDeDados = (dados.substring(0, posicion_d)); alert(numeroDeDados+" numeroDeDados")
var valorDeDados = (dados.substring(posicion_d+1)); alert(valorDeDados+" valorDeDados")
var tiradaDados = aleatorio(1, valorDeDados); alert(tiradaDados+" tiradaDados")

for(i=0; i<numeroDeDados; i++) {
resultadoDados += tiradaDados; alert(resultadoDados+" resultadoDados")
}
return resultadoDados
}

</script>
</html>
De cualquier forma, yo no llego a entender el objetivo del escript, pero supongo que servirá.
  #7 (permalink)  
Antiguo 22/06/2012, 16:17
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Extraer números de una cadena de texto

furoya, aquí es un caso donde typeof() te indica que los tipos de datos obtenidos no son los correcto

otra opción, sin el uso de variables globales
Cita:
var dados = prompt("¿Qué dados quieres tirar?");
alert("El resultado es " + tiradaDado(dados));

function aleatorio(a,b) {
return Math.round(Math.random()*(b-a)+a);
}

function tiradaDado(dados) {
var posicion_d = dados.indexOf("d");
var numeroDeDados = dados.substring(0, posicion_d);
var valorDeDados = dados.substring(++posicion_d)*1;
alert(valorDeDados + ' - ' + typeof(valorDeDados));
var tiradaDados = aleatorio(1, valorDeDados);
var resultadoDados = 0;


for(var i=0; i<numeroDeDados; i++) {
resultadoDados += tiradaDados;
}
return resultadoDados;
}
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #8 (permalink)  
Antiguo 22/06/2012, 16:26
 
Fecha de Ingreso: junio-2012
Mensajes: 12
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Extraer números de una cadena de texto

Muchas gracias, lo de poner la variable igualandolo a 0 lo he hecho de casualidad porque creia que me lo pedía la función. En principio estoy intando hacer un juego a través de una página web como hobby y para eso es el script.

Da gusto tanta colaboración en tan poco tiempo
  #9 (permalink)  
Antiguo 22/06/2012, 20:51
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 21 años, 6 meses
Puntos: 317
Respuesta: Extraer números de una cadena de texto

¡Estuve así de cerca de poner en el ejemplo un typeOf()!

Pero después pensé "¡Cómo la voy a privar a IsaBelM del placer de refregármelo de nuevo en la cara!"

Y no lo puse.

Está claro : las alertas y los mensajes de consola te muestran (p.e.) un 2. Pero no te dicen si es un númeral o un literal. Sólo te muestran el caracter.

Veo que también corregiste el posicion_d++, y mejoraste mi posicion_d+1.
También veo que usaste el impresentable recurso del *1 en vez del parseInt() para "convertir" a número.
No sé de dónde habrás aprendido eso.

(Aclaremos que *1 es justamente lo que hay que borrar o no, para que en el cuadro de alerta muestre si es un number o un [/i]string[/i].)


Sigo sin entender muy bien el uso, Vincens. Pero nos diste una buena excusa para mostrar algunos trucos, recursos, variantes de código y formas de encarar un problema.
Sigo insistiendo en que el split("d") que recomendó emprear me parece mejor para cortar los dos valores.
Pero son gustos.
  #10 (permalink)  
Antiguo 23/06/2012, 01:08
 
Fecha de Ingreso: junio-2012
Mensajes: 12
Antigüedad: 11 años, 10 meses
Puntos: 0
Respuesta: Extraer números de una cadena de texto

Suroya me temo que no eres jugador de rol si no verías que las tiradas de multiples dados de diferentes caras es algo muy habitual en ese mundillo.


En cuanto a los trucos es cierto que me ha servido para aprender muchas cosas (que es el objetivo principal de hacer estos pequeños scripts) así que para mi el hilo ha sido muy pero que muy provechoso. Muchas gracias a todos.
  #11 (permalink)  
Antiguo 23/06/2012, 06:44
Avatar de IsaBelM
Colaborador
 
Fecha de Ingreso: junio-2008
Mensajes: 5.032
Antigüedad: 15 años, 10 meses
Puntos: 1012
Respuesta: Extraer números de una cadena de texto

Cita:
Iniciado por furoya Ver Mensaje
También veo que usaste el impresentable recurso del *1 en vez del parseInt() para "convertir" a número.
No sé de dónde habrás aprendido eso.
ya he comentado que soy bastante perezosa.

puesto que cualquier string "numérica" multiplicada por 1 nos retorna esa misma cadena, pero en este caso convertida en integer, es lo mismo que si usamos parseInt con base 10

aquí puedes ver unos casos que van de lujo para este tema ya que no tenemos control sobre los valores numéricos que insertará el usuario

a colación de esto último, también convendría verificar si la operación o parseInt() retorna NaN
__________________
if(ViolenciaDeGénero) {alert('MUJER ASESINADA');}
  #12 (permalink)  
Antiguo 23/06/2012, 09:50
(Desactivado)
 
Fecha de Ingreso: noviembre-2002
Ubicación: Ciudad Autónoma de Buenos Aires
Mensajes: 2.367
Antigüedad: 21 años, 6 meses
Puntos: 317
Respuesta: Extraer números de una cadena de texto

Cita:
Iniciado por Vincens
...me temo que no eres jugador de rol ...
¡Por supuesto! ¡Era eso!. A mi me pasaron por la cabeza desde el juego de la oca hasta la generala, pero siempre con dados de seis caras. Por eso no entendía.
Sería interesante hacer una animación, aunque casi seguro va a ser en flash.


Cita:
Iniciado por IsaBelM
ya he comentado que soy bastante perezosa.
Lo digo de molesto que soy. Si sabes que yo hago lo mismo. Son ejemplos, nada más.

Vi ese link, lo aproveché para comentar justamente que todos los operadores aritméticos trabajan como número lo que puede ser número ... excepto el signo "+".

Etiquetas: cadenas
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 16:24.