Programación Específica > Matlab
Crear y leer fichero
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
[#] Página Siguiente
[*] Página Anterior
Ir a la versión completa