Programación Específica => Matlab => Mensaje iniciado por: Richi254 en Viernes 10 de Octubre de 2008, 11:39
Título: Pasar caracteres numericos a su valor
Publicado por: Richi254 en Viernes 10 de Octubre de 2008, 11:39
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
Título: Re: Pasar caracteres numericos a su valor
Publicado por: allisap en Viernes 10 de Octubre de 2008, 17:38
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
Título: Re: Pasar caracteres numericos a su valor
Publicado por: Toph en Viernes 10 de Octubre de 2008, 17:46
Una opcion es convertirlas, checate este enlace http://www.weizmann.ac.il/matlab/techdo ... c_b23.html (http://www.weizmann.ac.il/matlab/techdoc/ref/func_b23.html" onclick="window.open(this.href);return false;) y revisa las funciones de conversion de datos puede que te sirva alguna :comp:
Título: Re: Pasar caracteres numericos a su valor
Publicado por: allisap en Viernes 10 de Octubre de 2008, 17:53
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
Título: Re: Pasar caracteres numericos a su valor
Publicado por: Richi254 en Jueves 23 de Octubre de 2008, 13:38
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:
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.
Título: Re: Pasar caracteres numericos a su valor
Publicado por: allisap en Jueves 23 de Octubre de 2008, 16:33
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
Título: Re: Pasar caracteres numericos a su valor
Publicado por: Richi254 en Jueves 23 de Octubre de 2008, 18:55
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.
Título: Re: Pasar caracteres numericos a su valor
Publicado por: Geo en Domingo 26 de Octubre de 2008, 00:22
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 :D
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 :P, por si los quieres solo pídelos.