Programación Específica > Matlab

 Crear y leer fichero

<< < (3/4) > >>

Estrufi:
Hola de nuevo, una ultima duda: Tal y como kiero hacer la tabla...

f=fopen(strcat(file,'.txt'),'w+');
fprintf(f,'Nombre fichero: %sn',file);
fprintf(f,'t: %dn',t);
fprintf(f,'paso_t: %dn',paso_t);
fprintf(f,'calibracion_t: %fn',calibracion_t);
fprintf(f,'unidad_t: %sn',unidad_t);
fprintf(f,'pasox: %dn',pasox);
fprintf(f,'pasoy: %dn',pasoy);
fprintf(f,'tamaño_region_2^: %dn',pot);
fprintf(f,'umbral: %fn',umbral);
fprintf(f,'calibracion_x: %fn',calibracion_x);
fprintf(f,'calibracion_y: %fn',calibracion_y);
fprintf(f,'unidad_l: %sn',unidad_l);

fprintf(f,'x  y  dx  dy  u_dx  u_dy  nu n'); %Cabecera de la matriz.
%fprintf( archivo, '%st%st%st%st%st%st%sn, 'x', 'y', 'dx', 'dy', 'u_dx', 'u_dy', 'nu' );
for filas=1:Q
fprintf(f,'%f  %f  %f  %f  %f  %f %d n',tabla_desplazamientos);
end
fclose(f);
return

Esto tendria sentido? aun no lo he probado, estoy esperando a saber construir el nombre de file, con lo k comento arriba...

Muchisimas gracias.

Estrufi:
Hola!!

 Al final en la parte de la función para crear la matriz con sus cabeceras he hecho:

 fprintf(f, '%st%st%st%st%st%st%sn', 'x', 'y', 'dx', 'dy', 'u_dx', 'u_dy', 'nu' );
for filas=1:Q
    fprintf(f, '%ft%ft%ft%ft%ft%ft%dn', tabla_desplazamientos);
end

 Lo he probado y me sale un fichero así:

 Nombre fichero: Pruebaimag0003.tif_I1_1
t: 1
paso_t: 1
calibracion_t: 1.000000
unidad_t: s
pasox: 32
pasoy: 32
tamaño_region_2^: 7
umbral: 0.500000
calibracion_x: 1.000000
calibracion_y: 1.000000
unidad_l: mm
x   y   dx   dy   u_dx   u_dy   nu
128.000000   640.000000   0.288062   0.884419   0.118659   0.443981   6
128.000000   640.000000   0.288062   0.884419   0.118659   0.443981   6
128.000000   640.000000   0.288062   0.884419   0.118659   0.443981   6
128.000000   640.000000   0.288062   0.884419   0.118659   0.443981   6
128.000000   640.000000   0.288062   0.884419   0.118659   0.443981   6

(son mas filas pero las he borrado..)

Los unicos problemas k tengo ahora es poner cada nombre encima de la columna correcta, ya  k salen un poco descentrados. Y conseguir que el nombre del fichero:

 Pruebaimag0003.tif_I1_1 en realidad sea Pruebaimag0003.tif_I01_001, con 2 y 3 digitos respectivamente..., ya k este nombre se va cambiando en un bucle mientras hacemos distintas medidas. ¿Se te ocurre algo? He buscado en un par de manuales, pero no he encontrado nada.

 Muchisiiimas gracias por todo. Saludos!

Estrufi:
Tengo un problema!! Resulta k la matriz estaba mal calculada...y estaba haciendo solo una linea, ahora la he calculado bien, pero los resultados me los graba mal:
Poniendo esto:
fprintf(f, '%sttt%sttt%sttt%sttt%stt%stt%sn', 'x', 'y', 'dx', 'dy', 'u_dx', 'u_dy', 'nu' );
for filas=1:Q
    fprintf(f, '%dt%dt%ft%ft%ft%ft%dn', tabla_desplazamientos);
fclose(f);
return

Me sale algo así:
x         y         dx         dy         u_dx      u_dy      nu
16   16   48.000000   48.000000   48.000000   80.000000   80
80   80   112.000000   112.000000   496.000000   560.000000   368
400   432   400.000000   432.000000   464.000000   656.000000   432
624   3.942151e-002   0.031646   0.177913   0.214485   0.230994   3.150616e-001
2.014277e-001   3.332901e-001   0.312544   0.157933   1.384341   0.650919   -2.921787e+000
-3.734466e-001   1.612407e+000   1.081187   1.892821   1.269534   1.219600   -3.125440e-001
2.001913e+000   -6.162923e-001   0.000566   0.036826   0.122135   0.081458   3.990918e-002
7.727177e-002   2.058310e-001   0.237355   0.344691   0.164698   0.110252   1.108553e-002
3.293859e-001   2.714914e-001   0.236088   0.119215   0.186629   0.413563   7.629885e-001
3.445276e-001   2.799322e-001   0.049306   4.000000   4.000000   4.000000   4
4   6   8.000000   6.000000   4.000000   4.000000   4

O sea, las va guarndando al reves, yo jeria k en las x estuviese :16 16 48 48 etc.. etc.

 ¿como puedo hacer??

 Muchisimas gracias!!!! siento la cantidad de dudas juntas, pero es k no da salido.

Geo:
Bien, el formato en que se escriben los números depende del parámetro que pases: %d - número entero decimal, %f - número de punto/coma flotante. Con el primero no tendrás parte decimal, con el segundo si.

Luego, la cuestión de las separaciones, en los parámetros pasaste un parámetro t, que indica insertar un caracter tabulador (la tecla TAB en tu teclado), el detalle es que este TAB podrían interpretarlo diferente algunos editores de texto, algunos sustituyen el caracter TAB con un cierto número de espacios, los cuales pueden variar entre programas ¿con qué programa abres tu archivo resultante?

Para ordenar más adecuadamente, puedes determinar cuántos caracteres deseas utilizar para cada opción, pasando el número de caracteres deseados junto al formato numérico deseado. Por ejemplo: %3d, indica escribir un número entero forzando a que utilice al menos tres caracteres, si el número fuera de dos dígitos, el se agrega un espacio automáticamente para completar los 3. En tu código, puedes determinar cuál es el máximo de dígitos que deseas y utilizarlo como parámetro, algo como esto: También puedes indicar el número de dígitos decimales que deseas, haciendolo de esta forma: %.2f, indica formato flotante con dos decimales. Puedes combiarlas: %10.2f, formato flotante que utilice 10 digitos con dos decimales.

--- Código: Text --- fprintf( f, '%10d %10d %10f %10f');  Haz varias pruebas y observa cómo va quedando para que vayas realizando los ajustes necesarios.

En cuanto a contar agregando ceros a la izquierda, no se cuenta con ceros a la izquierda, sino que estos se agregan al convertir a caracter (al generar tu nombre de archivo). El contador seguirá su lógica: 1, 2, 3... al momento de concatenar este valor para formar el nombre del archivo es donde debes agregarle tantos ceros (caracteres) como desees. Si no te sale con gusto más tarde pongo un ejemplo (no tengo MATLAB aquí ) :).

Suerte.

Estrufi:
Buenas! Antes de nada gracias por todo.

A ver, entonces yo si hago:
num_tabla=1;
pero quiero que tabla sea un string='01'
haciendo:
tabla=sprintf('%2d',num_tabla);
no se consigue nada directamente, con lo que tendría que hacer un "if" para , en caso de llegar a 9, añadir un 1, y asi poder escribir en tabla:
00
01
02
03
04
et..

Se me entiende? Es k creo k me explico bastante mal, lo siento.

Por otro lado, lo de leer la matriz no era tanto por lo del formato (pero  muchas gracias, pork me ha aclarado bastante), si no que parece que iba cogiendo de columnas y guardandolo en el fichero, al final hice así:

fprintf(f, '%sttt%sttt%sttt%sttt%stt%stt%sn', 'x', 'y', 'dx', 'dy', 'u_dx', 'u_dy', 'nu' ); %Para la cabecera.
for fila=1:Q
fprintf(f,'%d %d  %f  %f  %f  %f %d n',tabla_desplazamientos(fila,:));
end

Y claro me queda una cosa así en el fichero tipo texto:
x         y         dx         dy         u_dx      u_dy      nu
16 496  0.039422  0.650919  0.000566  0.011086 4
16 560  0.031646  -2.921787  0.036826  0.329386 4
48 368  0.177913  -0.373447  0.122135  0.271491 4
48 400  0.214485  1.612407  0.081458  0.236088 4
48 432  0.230994  1.081187  0.039909  0.119215 4
80 400  0.315062  1.892821  0.077272  0.186629 6
80 432  0.201428  1.269534  0.205831  0.413563 8
80 464  0.333290  1.219600  0.237355  0.762988 6
80 656  0.312544  -0.312544  0.344691  0.344528 4
112 432  0.157933  2.001913  0.164698  0.279932 4
112 624  1.384341  -0.616292  0.110252  0.049306 4

Ahora tengo que conseguir k kede mas centrado, voy a ponerme a probar con tabuladores a ver si no da problemas,ok?
Se te ocurre algo para lo de los digitos? No hay manera de poner contar 01,02, et.. y pasarlo a string de manera más directa,no?

Muchisimas gracias por todo!

Saludos!

Navegación

[0] Índice de Mensajes

[#] Página Siguiente

[*] Página Anterior

Ir a la versión completa