Lunes 23 de Diciembre de 2024, 14:12
SoloCodigo
Bienvenido(a),
Visitante
. Por favor,
ingresa
o
regístrate
.
¿Perdiste tu
email de activación?
Inicio
Foros
Chat
Ayuda
Buscar
Ingresar
Registrarse
SoloCodigo
»
Foros
»
Programación Específica
»
Matlab
»
Pasar caracteres numericos a su valor
« anterior
próximo »
Imprimir
Páginas: [
1
]
Autor
Tema: Pasar caracteres numericos a su valor (Leído 3626 veces)
Richi254
Miembro activo
Mensajes: 56
Nacionalidad:
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
Tweet
allisap
Miembro MUY activo
Mensajes: 259
Nacionalidad:
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
fid = fopen('misdatos.txt');
datos = fscanf(fid,'%f ',[1 inf]);
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:
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
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:
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:
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:
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:
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:
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
% Da formato a la línea
A = sscanf( linea, 'X%6dY%6d*')
% Separa en los vectores X y Y
X( numLinea ) = A( 1 );
Y( numLinea ) = A( 2 );
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
% Abre archivo
f = fopen( 'solocodigo.txt', 'rt' );
% Lee todos los valores numéricos a un vector
[ A vals ] = fscanf( f, 'X%6dY%6d*n' )
fclose( f );
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
Código: Text
% Abre archivo
f = fopen( 'solocodigo.txt', 'rt' );
% Lee datos con el formato indicado y los coloca en la celda C
C = textscan( f, 'X%6dY%6d*' );
% Cierra el archivo
fclose( f );
% Asigna vectores X y Y de la celda
X = C{1}';
Y = C{2}';
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
, por si los quieres solo pídelos.
Suerte
.
La imaginación es el límite.
Hardware & Software
|
Mexchip
Imprimir
Páginas: [
1
]
« anterior
próximo »
SoloCodigo
»
Foros
»
Programación Específica
»
Matlab
»
Pasar caracteres numericos a su valor