• Lunes 23 de Diciembre de 2024, 17:43

Autor Tema:  Pasar caracteres numericos a su valor  (Leído 3628 veces)

Richi254

  • Miembro activo
  • **
  • Mensajes: 56
  • Nacionalidad: es
    • Ver Perfil
Pasar caracteres numericos a su valor
« en: Viernes 10 de Octubre de 2008, 11:39 »
0
Hola a todos, tengo un problemilla. Resulta que estoy haciendo un programa en el que tengo que trabajar con unos datos númericos obtenidos de un archivo .txt, el problema es que matlab lo interpreta como caracteres ASCII y yo lo que necesito es su valor. Por ejemplo, del archivo saco un vector (de caracteres) así:

>> vector=
0.01000
251111
020847

cada dígito es interpretado como un elemento del vector(los puntos también) y los retorno de carro como dos espacios en blanco, es decir, si hago:

>>vector(1)
ans=
0

>>vector(11)
ans=
5

pero si hago:
>>vector(1)+1=
ans=
49

O sea, que MATLAB interpreta el valor del código ASCII cuando quiero hacer operaciones con él, pero yo lo que necesitaría es guardar el valor completo en alguna variable, por ejemplo A=0.01000 para poder usar ese valor para realizar otras operaciones con él.

¿Alguien sabría como podría hacer esto?

MUCHAS GRACIAS

allisap

  • Miembro MUY activo
  • ***
  • Mensajes: 259
  • Nacionalidad: mx
    • Ver Perfil
Re: Pasar caracteres numericos a su valor
« Respuesta #1 en: Viernes 10 de Octubre de 2008, 17:38 »
0
saludos....

no dices como es que estas leyendo el archivo de texto
pero si lo lees de esta forma

Código: Text
  1.  
  2. fid = fopen('misdatos.txt');
  3. datos = fscanf(fid,'%f ',[1 inf]);
  4.  
  5.  

tendrias un vector de 1* n datos numericos (flotantes por el modificador %f, usa %d para enteros) y asi ya puedes operarlos como numeros...
espero que te sirva...

Victor Pasilla Campos
Puebla, Mexico

Toph

  • Moderador
  • ******
  • Mensajes: 420
  • Nacionalidad: sv
    • Ver Perfil
    • http://www.electronicayotros.blogspot.com/
Re: Pasar caracteres numericos a su valor
« Respuesta #2 en: Viernes 10 de Octubre de 2008, 17:46 »
0
Una opcion es convertirlas, checate este enlace http://www.weizmann.ac.il/matlab/techdo ... c_b23.html y revisa las funciones de conversion de datos puede que te sirva alguna  :comp:
Por favor leer esto antes de postear. Gracias
NO alimenten al TROLL y morirá
¿Querés ayudar?, pues doná comida gratis con un simple clic aqui ,sin trucos
photobucket , Google , wine y cutepdf Rock!!!


programacion,c,c++,
Microcontroladores,java,linux,videojuegos,
,.NET,asm,codigo
por favor este 2012 que sea

allisap

  • Miembro MUY activo
  • ***
  • Mensajes: 259
  • Nacionalidad: mx
    • Ver Perfil
Re: Pasar caracteres numericos a su valor
« Respuesta #3 en: Viernes 10 de Octubre de 2008, 17:53 »
0
saludos

no es necesario convertir los datos....
si estan en un archivo de texto se pueden leer directamente como numeros

Victor Pasilla Campos
Puebla, Mexico

Richi254

  • Miembro activo
  • **
  • Mensajes: 56
  • Nacionalidad: es
    • Ver Perfil
Re: Pasar caracteres numericos a su valor
« Respuesta #4 en: Jueves 23 de Octubre de 2008, 13:38 »
0
Hola Victor:
   Como bien dices, si los datos númericos están en un .txt se pueden extraer. El problema es que como haya sólo una letra ya no lee nada. Sólo los lee poniendo %c, pero claro los interpreta a cada uno como un elemento del vector y además se le asigna el valor del código ASCII.  El archivo del que quiero sacar los datos viene de esta forma:

X100000Y200000*
X200000Y200000*
X250000Y350000*
....

   Entonces yo lo que quisiera es guardar en dos vectores(X e Y,por ejemplo) los datos, de manera que:
>> X
X=
100000  200000  250000 ...

>> Y
Y=
2000000 200000 350000 ...

¿Esto se puede hacer? Si puedes ayudarme, te lo agradezco muchísimo.
GRACIAS DE ANTEMANO.
UN SALUDO.

allisap

  • Miembro MUY activo
  • ***
  • Mensajes: 259
  • Nacionalidad: mx
    • Ver Perfil
Re: Pasar caracteres numericos a su valor
« Respuesta #5 en: Jueves 23 de Octubre de 2008, 16:33 »
0
saludos:
se me ocurren 2 opciones:

1.- Que es lo que genera tu archivo de texto ? puedes cambiar el formato del archivo, es decir , en lugar de  X100000Y200000, que aparezca X 100000 Y 100000, el espacio solucionaria tu problema porque lees un caracter usando %c y cuando lo encuentres lo comparas con X o Y y luego lees el valor que sigue con %d o %f para guardarlo en el vector que corresponde....

2.- Si no es posible cambiar el archivo de entrada desde el origen .... pues has primero un conversor de formato... es decir un programa que lo que va estar haciendo es leer el archivo de texto  caracter por caracter,pegandolo en un archivo de texto de salida , y cuando encuentre una X o una Y que inserte un espacio en blanco en el archivo de salida ...al final tendras un archivo identitco pero con los caracteres y los valores numericos separados...

espero te sirva ...

Victor Pasilla Campos
Puebla, Mexico

Richi254

  • Miembro activo
  • **
  • Mensajes: 56
  • Nacionalidad: es
    • Ver Perfil
Re: Pasar caracteres numericos a su valor
« Respuesta #6 en: Jueves 23 de Octubre de 2008, 18:55 »
0
Lo intento ahora mismo, muchas gracias.
   Ah, el archivo de texto lo genera un programa de diseño, son coordenadas cartesianas como habrás supuesto. Y no, no puedo cambiar el formato de salida de los datos :( (MÁS TRABAJO!) En fin, a programar!!
GRACIAS de nuevo.
UN SALUDO.

Geo

  • Miembro de PLATA
  • *****
  • Mensajes: 1011
  • Nacionalidad: mx
    • Ver Perfil
    • http://hsblog.mexchip.com
Re: Pasar caracteres numericos a su valor
« Respuesta #7 en: Domingo 26 de Octubre de 2008, 00:22 »
0
scanf es más potente de lo que parece :).

Una opción sería leer el archivo línea por línea con fgetl, y darle formato con sscanf:
Código: Text
  1.  
  2.     % Da formato a la línea
  3.     A = sscanf( linea, 'X%6dY%6d*')
  4.     % Separa en los vectores X y Y
  5.     X( numLinea ) = A( 1 );
  6.     Y( numLinea ) = A( 2 );
  7.  
  8.  
Así trabajarías línea por línea e irías llenando los vectores X y Y.

Otra opción, es con fscanf, puedes ir paso a paso o leer todo el archivo de un solo golpe:
Código: Text
  1.  
  2. % Abre archivo
  3. f = fopen( 'solocodigo.txt', 'rt' );
  4. % Lee todos los valores numéricos a un vector
  5. [ A vals ] = fscanf( f, 'X%6dY%6d*n' )
  6. fclose( f );
  7.  
  8.  
En este caso, todos los valores numéricos del archivo quedan guardados en el vector columna A, ya de ahí puedes separarlos.

Pero bueno, MATLAB ya cuenta con una forma de conseguir justo lo que quieres: textscan :D
Código: Text
  1.  
  2. % Abre archivo
  3. f = fopen( 'solocodigo.txt', 'rt' );
  4. % Lee datos con el formato indicado y los coloca en la celda C
  5. C = textscan( f, 'X%6dY%6d*' );
  6. % Cierra el archivo
  7. fclose( f );
  8.  
  9. % Asigna vectores X y Y de la celda
  10. X = C{1}';
  11. Y = C{2}';
  12.  
  13.  

Te recomiendo trabajar con esta última opción, la cual es muy potente y te ahorra mucho trabajo :). Aún asi, tengo los códigos completos para las dos primeras (con sscanf y fscanf), son sencillas pero ocupan mucho espacio :P, por si los quieres solo pídelos.

Suerte :).
La imaginación es el límite.
Hardware & Software | Mexchip