• Martes 30 de Abril de 2024, 02:30

Autor Tema:  ASCII, texto etc..  (Leído 2776 veces)

Estrufi

  • Miembro MUY activo
  • ***
  • Mensajes: 158
    • Ver Perfil
ASCII, texto etc..
« en: Martes 17 de Febrero de 2009, 13:10 »
0
Hola, He creado una función en Matlab que me crea un fichero con una cabecera y una matriz llena de datos, al final he usado la opción "fprintf" en lugar de "save", ya que estaba mezclando strings de la cabecera, con numeros, enteros, reales, etc...He hecho bien?

 Quiero decir, no me aclaro mucho a que nos referimos con formato "ASCII" o que son "ficheros ASCII", los ficheros .txt son ficheros ASCII? La verdad ando un poco perdida, si alguien pudiera aclararme de que va todo eso, seria estupendo.

 Muchisimas gracias por todo, saludos!

allisap

  • Miembro MUY activo
  • ***
  • Mensajes: 259
  • Nacionalidad: mx
    • Ver Perfil
Re: ASCII, texto etc..
« Respuesta #1 en: Martes 17 de Febrero de 2009, 18:12 »
0
hola...

lo fichero ascii son archivos de texto plano es decir sin formato, y estos los puedes abrir con el bock de notas

Victor Pasilla Campos
Puebla,Pue

fernandezlm

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: ASCII, texto etc..
« Respuesta #2 en: Martes 17 de Febrero de 2009, 22:28 »
0
Buenas chica!

Esta mañana estuve a punto de responderte pero andaba liada en el trabajo. Veo que intentas hacer lo mismo que yo estoy haciendo. Quieres trabajar con archivos .txt, eso he entendido. Preguntaste si para poner archivos en un txt con una cabecera se puede hacer con la función 'fprintf', de echo es la forma adecuada cuando la parte de cabecera la introduces de forma constante y la parte de .txt es de forma matricial con caracteres.

En Matlab cuando se trabaja con archivos .txt que se desea tratar se debe tener cuidado porque al leerlos generaras lo que se conocen como 'cell arrays'. Este formato es incompatible con la función 'fprintf' por lo que si quieres volver a pegar ese contenido en otro fichero no podras hacerlos a menos que modifiques su formato pasando de 'cell array a 'character array?. Ese paso se puede realizar mediante la función '' que los pega unos a otro. Te voy a poner ejemplos de las dos situaciones, cuando generas un .txt con datos matriciale sy cabecera, y un .txt con 'character arrays'.

PRIMER CASO

matriz=[1 2 3;4 5 6;7 8 9];
B1='prueba';%Esta parte si la ponemos variable podemos generar archivos con nombres variables
Lista=strcat(B1,'.txt');%Marca el nombre del archivo que vamos a crear
D1_1=strcat('c:Archivos de programaMATLAB704work',Lista);%Marca donde se va a guardar el .txt
fid1=fopen(D1_1,'w')% Se abre un archivo txt que ya hemos denominado con anterioridad con al función 'w' de escritura
fprintf(fid1,' %s%[^n]','La matriz que estamos guardando');%Se pueden poner tantos como se deseen, lo que hay entre los dos es el fromato
fprintf(fid1, '%f%f%f n', matriz);

************************************************************
Este programa te guardaria un archivo como .txt con una cabecera 'La matriz que estamos guardando' y de contenido la matriz.

SEGUNDO CASO

EN el caso de tener en lugar de matriz un .txt con datos en columnas o separados por comas se tiene que leer primero el contenido. Esto se ahce mediante la función 'textscan', de donde se generan cell arrays del conido. Este se transforma en 'character array' mediante la función 'char' y por último se pega con  la cabecera y el 'character array'.

entrada=input('Dame el archivo .txt de entrada:  ','s');%entrada del archivo
fid1=fopen(entrada);%Se abre el archivo
datos=textscan(fid1, '%s%[^n]');%Se lee el archivo, se elige el formato que se desea.
A{1,1}=char(datos{1});%Se define las dos 'character array'
A{1,2}=char(datos{2});
space={' '};
B1=strcat(A{1,1},space,A{1,2});%Se crea una 'character cell' de todos los contenidos
cabecera=char('La cabecera que predice');
B2=strvcat(cabecera,B1);%pegado en vertical de la cabecera y lo del archivo .txt
dlmwrite('prueba.txt', B1);%La salida del archivo nuevo será 'prueba.txt'

***************************************************************************************************

Espero que esto te se ade ayuda si tienes alguna duda más sólo tienes que preguntármelo.

Mucha suerte,
Mercedes

Estrufi

  • Miembro MUY activo
  • ***
  • Mensajes: 158
    • Ver Perfil
Re: ASCII, texto etc..
« Respuesta #3 en: Miércoles 18 de Febrero de 2009, 10:00 »
0
Hola!

  muchisimas gracias por la aclaracion, ...la segunda parte la veo un poco mas liosa. Tengo un par de dudas mas:

    1) Para leer cual es mejor, textread, textscan o fscanf?? no me aclaro mucho con la ayuda porque esta en ingles. Ademas ahora creo otro fichero (aparte del fichero de con la cabecera, etc etccc) con solo las matrices, y ese lo guardo con save y lo leo con load, y parece k recupero los datos sin problemas...

    2) Hay alguna manera en Matlab de saber si existe un determinado directorio en work y en su caso crearlo simplemente con un mkdir? Lo que necesito es la manera de comprobar que ese directorio existe ó no.

  Muchisimas gracias, Saludos!

fernandezlm

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: ASCII, texto etc..
« Respuesta #4 en: Miércoles 18 de Febrero de 2009, 12:07 »
0
BUenas!

Sobre la 1) Te comento que yo utilizo el textscan siempre que deseo trabajar con los datos. El textread lo uso cuando únicamente los leo y no los quiero manipular. El fscanf nunca lo he utilizado luego que tengo un rato te miro que sale de resultado, pero como en todo si te vale pues adelante.

2) Pues es qe ypo no creo los directorios de forma computacional, sino manualmente. Ásí que no te puedo ser de ayuda.

UN saludo, y luego te hablo del fscanf

Mercedes

Estrufi

  • Miembro MUY activo
  • ***
  • Mensajes: 158
    • Ver Perfil
Re: ASCII, texto etc..
« Respuesta #5 en: Jueves 19 de Febrero de 2009, 18:09 »
0
ok, Ya lo he conseguido grabando solo la matriz despues de crear el otro fichero, Otra duda, Cual es la mejor manera de usar Quiver cuando tengo una matriz:

  matriz =

   16.0000  496.0000   -0.0017    0.5740
   48.0000  432.0000    0.0505    0.1444
   80.0000  400.0000   -0.0059   -0.0614
   80.0000  432.0000   -0.0256   -0.0999
   80.0000  464.0000    0.0029    0.0196
   80.0000  656.0000   -0.0288    0.0356
  112.0000  624.0000    0.0747   -0.0265

 Donde la primera columna son las "x", la segunda las "y", y la tercera y cuarta los "dx" (desplazamientos en x) y "dy" (desplazamientos en y) respectivamente de una imagen que se representa con una matriz de  736 puntos en la "y"  192 en las "x"?
lo digo por eso de centrarla y esas cosas.

 Muchisimas gracias.

allisap

  • Miembro MUY activo
  • ***
  • Mensajes: 259
  • Nacionalidad: mx
    • Ver Perfil
Re: ASCII, texto etc..
« Respuesta #6 en: Domingo 22 de Febrero de 2009, 16:15 »
0
saludos, no he usado quiver

pero si me dices que quieres hacer con los datos , tal vez pueda decirte como puedes acomodar tus datos de la mejor manera



Victor Pasilla Campos
Puebla Pue

Estrufi

  • Miembro MUY activo
  • ***
  • Mensajes: 158
    • Ver Perfil
Re: ASCII, texto etc..
« Respuesta #7 en: Martes 24 de Febrero de 2009, 10:56 »
0
Buenas!!

Yo tengo esta matriz:

matriz =

16.0000 496.0000 -0.0017 0.5740
48.0000 432.0000 0.0505 0.1444
80.0000 400.0000 -0.0059 -0.0614
80.0000 432.0000 -0.0256 -0.0999
80.0000 464.0000 0.0029 0.0196
80.0000 656.0000 -0.0288 0.0356
112.0000 624.0000 0.0747 -0.0265

Los valores de la coordenada "x" se mueven de 1 a 192 ,y los de la coordenada "y" de 1 a 736, cierto?  la tercera columna son los desplazamientos en " x" y la cuarta son los desplazamientos en "y", así que lo que quiero es representar esos desplazamientos como vectores, pero ajustando las coordenadas "x" e "y"... como podría hacer?

 Saludos! y muchas gracias!