Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Buscar Temas de Hoy Marcar Foros Como Leídos

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 07-09-2007
Avatar de Peterman
Peterman Peterman is offline
Miembro
 
Registrado: Jun 2006
Ubicación: Almeria (España)
Posts: 50
Poder: 13
Peterman Va por buen camino
Necesito guardar datos en txt pero en columnas parejas

Buenas, tengo una serie de variables con sus respectivos valores y necesito que cada segundo se me guarden en un archivo de texto tanto los nombres como las variables. Bien, pues la cosa es sencilla: utilizo un <<< ofstream fSalida("Datos.txt", ios:ut); >>> y los datos los voy metiendo así : <<< fSalida<<nombres[i]<<"\t" >>> y otro igual para los valores con sus respectivos for().

Bien el problemas es que algunos nombres son de longitud mayor que otros, al igual que los datos, algunos son datos decimales y otros un simple digito binario; la consecuencia de esto es que las columnas no me quedan bien estructuradas, es decir no son rectas:


Variable1 Variable2 Variable3
123 0 4567.9897975
99 1 4567.9897975
12378 0 4567.9897975


Lo que yo quiero es que se me guarden así (parejitas):

Variable1 Variable2 Variable3
123 0 4567.9897975
99 0 4567.9897975
12378 0 4567.9897975


Bien, espero que haya quedado claro y que algun benevolente me sepa solucionar mi pequeño y tonto problema. Gracias everybody!
Responder Con Cita
  #2  
Antiguo 07-09-2007
[basti] basti is offline
Miembro Premium
 
Registrado: Aug 2004
Posts: 388
Poder: 15
basti Va por buen camino
Puedes usar sprintf para darle formato a la cadena antes de enviarla:

Código:
  fSalida << sprintf("%-20s", nombres[i]);
__________________
Saludos.
Responder Con Cita
  #3  
Antiguo 09-09-2007
Avatar de Peterman
Peterman Peterman is offline
Miembro
 
Registrado: Jun 2006
Ubicación: Almeria (España)
Posts: 50
Poder: 13
Peterman Va por buen camino
Buenas, perdona pero me da un resultado muy raro con sprintf

No se que coño pasa pero primero debería de pintarme en el archivo el nombre de las variables en una fila, y luego en la otra los valores y así sucesivamente.

Bueno pues lo que me pasa es que se me pinta todo en la misma linea a pesar de utilizar un "\n" por ahí...


234riable1 235riable2 743534.43able3

Se me mezcla todo en la misma fila, tanto los nombres como los valores; realmente es que no sé lo que significa "-20%d" que me has dicho que le meta a la función... joder, tiene que ser una chorrada pero no doy con ella.
Responder Con Cita
  #4  
Antiguo 09-09-2007
[basti] basti is offline
Miembro Premium
 
Registrado: Aug 2004
Posts: 388
Poder: 15
basti Va por buen camino
Me acabo de dar cuenta que está mal, perdón, es la costumbre del php. Tienes que guardar el resultado de la función sprintf en una cadena y después enviarla:
Código:
  char cadenaFormato[100];

  sprintf(cadenaFormato, "%-20s", nombres[i]);



"%-20s" es un formato de sprintf(o printf, fprintf, etc..), puedes ver aquí los formatos que admite. Supongo que también en la ayuda del builder, pero no lo tengo instalado así que no estoy seguro.

% -> indica que lo que viene después son indicadores de formato
- -> alineación a la izquierda (por defecto es a la derecha)
20 -> número de caracteres, si son menos, rellena con espacios
s -> indica que es una cadena.
__________________
Saludos.

Última edición por basti fecha: 09-09-2007 a las 11:43:14.
Responder Con Cita
  #5  
Antiguo 09-09-2007
Avatar de Peterman
Peterman Peterman is offline
Miembro
 
Registrado: Jun 2006
Ubicación: Almeria (España)
Posts: 50
Poder: 13
Peterman Va por buen camino
Ya estoy apunto pero me queda una duda más.......

El siguiente codio lo que hace es abrir un archivo de texto, mete una pequeña cabecera, y luego porne: "hora" + "nombres de Variables", y en los sucesivos renglones pondra el valor de la hora correspondientes + los sucesivos valores de las correspondientes variables: bien, pues la cosa queda bien parejita, como yo digo, pero ocurre un error: cuando metemos los nombres de las variables, estos cadenas ocupan más espacio que cuando meto los valores de las variables; no sé si me explico bien, aunque todo esté formateado para que las cadenas que vaya introducido sean de 20 caracteres, no sé porqué, cuando introduzco las string con los nombres, no miden 20, sino que miden más.....¿?


Código:
 
    ofstream  fSalida("Datos.txt", ios::out);     //Abrimos el archivo de datos donde vamos a guardar los datos.
                if(!fSalida.is_open())
                        ShowMessage("!El archivo de Datos.txt donde guardaré los datos, no se ha podido abrir!");
                else
                {
                    fSalida.clear();
                    //Escribimos la cabecera del archivo.
                    fSalida<<"# Archivo de Datos.txt #"<<endl<<"#"<<endl;
                    sprintf(cadAux,"%-20s","Hora");
                    fSalida<<cadAux<<"-";
                    //Escribimos el nombre de las variables a escribir.
                    for(int i=0;i<numeroVariables;i++)
                    {
                        sprintf(cadAux3,"%-20s",nombres[i].c_str());
                        sprintf(cadAux,"%-20s",cadAux3);
                        fSalida<<cadAux<<"-";
                    }
 
 
                    //Metemos la hora
                    fSalida<<endl;
                    sprintf(cadAux,"%-20s",Label199->Caption.c_str());
                    fSalida<<cadAux<<"-";
                    //Ahora introducimos los valores.
                    for(int i=0;i<numeroVariables;i++)
                    {
                        sprintf(cadAux3,"%20.4f",valores[i]);
                        sprintf(cadAux,"%-35s",cadAux3);
                        fSalida<<cadAux<<"-";
                    }

                    fSalida.close(); //Cerramos el archivo.
Este es el codigo:

nombres[]-->Es un vector de cadenas string (string *nombres=new string[numeroVarialbes]).
valores[]-->Es un vector de double
cadAux y cadAux3 son vectores de char ( char cadAux[50],cadAux3[50]) ¿Puede ser que la clave esté aquí, en el tamaño de la longitud de la cadena?


Efectivamente, creo que tiene esto ultimo que ver porque he cambiado cadAux a longitud de [25] y los doubles no cambian pero las cadenas con los nombres de la variables se ha hecho más corto...¿¿¿no debería quedar todo en 20 que es el tamaño que le tengo puesto en el sprintf???

P.D.: Perdonen por meter esto en la seccion de Varios del Foro de Delphi cuando tenía que haber estado en el de Borland C++.
Responder Con Cita
Respuesta


Herramientas Buscar en Tema
Buscar en Tema:

Búsqueda Avanzada
Desplegado

Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Escribir en dbgrid, pero no guardar drykea Varios 10 02-08-2007 16:28:19
Ayuda!!necesito guardar una imagen ivan84 Varios 6 05-12-2006 18:02:48
Necesito crear un permiso para escribir pero no para leer federiconqn21 Conexión con bases de datos 5 07-07-2006 19:13:47
necesito programar un evento en un combobox,pero no se cual de todos es federiconqn21 Varios 7 06-04-2006 17:42:24
Pregunta Realmente Tonta, pero necesito respuestas codigit Internet 5 19-10-2005 16:41:51


La franja horaria es GMT +2. Ahora son las 05:04:23.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi