Como hacer que tome registros este programa desde un txt y aplique la funcion

Iniciado por luis456, 10 Enero 2013, 19:47 PM

0 Miembros y 1 Visitante están viendo este tema.

luis456

Hola a todos

Me gustaria saber si es posible hacer que este codigo que suma 1 a cada numero pero de uno en uno.

01 32 34 38 41 44 <-- registro original en variable

02 32 34 38 41 44 sumamos 1 al primero
01 33 34 38 41 44 sumamos 1 al segundo
01 32 35 38 41 44 sumamos 1 al tercero
01 32 34 39 41 44 sumamos 1 al cuarto
01 32 34 38 42 44 sumamos 1 al quinto
01 32 34 38 41 45 sumamos 1 al sexto

Se podria hacer que tome de un txt varios registros y le aplique el codigo uno por uno ? no importando que sean muchos

esto es lo que llevaria el txt por decir algo.

01 32 34 38 41 44
03 06 19 32 47 49
08 12 20 34 47 49

la idea es que lea el primer registro aplique la funcion y siga con el segundo y cuando se acaben los registros guardarlos
en otro Txt,

*************************
#include <iostream>
using namespace std;

    int main() {
    int v[6]={1 ,32, 34, 38, 41, 44};
    int i,j,a[6][6];
    for (i=0;i<6;i++)
        for (j=0;j<6;j++){
            if (i!=j)
                a[i][j]=v[j];
            else
              a[i][j]=v[i]+1;
        }

    for (i=0;i<6;i++){
        for (j=0;j<6;j++){
        cout << a[i][j]<<"   ";
        }cout << endl;
    }
    return 0;
}


Gracias de antemano

Luis
Que tu sabiduria no sea motivo de Humillacion para los demas

durasno

Lo que hiciste parace no tener problemas, solo es cuestion que averigues el tema de manejo de archivos. Tambien tal vez te convendria averiguar sobre memoria dinamica ya que si no sabes la cantidad de registros del archivo es mejor manejarlo dinamicamente


Saludos
Ahorrate una pregunta, lee el man

luis456

Cita de: durasno en 10 Enero 2013, 19:59 PM
Lo que hiciste parace no tener problemas, solo es cuestion que averigues el tema de manejo de archivos. Tambien tal vez te convendria averiguar sobre memoria dinamica ya que si no sabes la cantidad de registros del archivo es mejor manejarlo dinamicamente


Saludos

Gracias por responder como he dicho anteriormente trabajaba con fox :) y de memoria dinámica Npi de que existía jeje , me imagino que sera la capacidad del pc para hacer estos calculos y se libera al terminar ?

bien alguna idea de como empezar y por donde ? de todas manera por mi edad :)
aprendo mas rápido con ejemplos para trastear con ellos.

este código funciona bien pero siempre hay un pero ,es una joda que cada ves tenga que modificar los numeros a mano,

No se ni por donde empezar para que siquiera lea el archivo y menos pasar los registros a la variable.


gracias

Luis








Que tu sabiduria no sea motivo de Humillacion para los demas

durasno

Me parece que tu problema es que no tenes un material del cual estudiar, en cualquier libro aparecen estos temas.
En el sección de libros C/C++ vas a encontrar varios o tambien tenes http://c.conclase.net/curso/index.php  y asi hay bastante cosas en internet


Saludos
Ahorrate una pregunta, lee el man

-- KiLiaN --

Busca algún manual de C++ y vete a la parte que expliquen el manejo de archivos.
Entren al chat de elhacker.net
    
   

@kln13

luis456

Vale vere este fin de empaparme con eso,es que solo los fines de semana es que pùedo estudiar.

Mirare esos enlaces a ver si me entero

Gracias

Luis
Que tu sabiduria no sea motivo de Humillacion para los demas

leosansan

Cita de: luis456 en 11 Enero 2013, 13:31 PM
Vale veré este fin de empaparme con eso,es que solo los fines de semana es que puedo estudiar.

Mirare esos enlaces a ver si me entero

Gracias

Luis
Animo que son dos dias ¡ ¡ ¡.
Como te he comentado me defiendo más en C que en C++, no obstante haré lo que tú comentas y me iré mirando los ficheros en C++.
Pero para que veas que es relativamente sencillo, te dejo el código en C -guárdalo con la extensión .c -.
No hace falta manejar memoria dinámica ya que sólo haces uso de un array de seis elementos. La idea es leer una línea de esos seis elementos, formar la matriz con los incrementos correspondientes y guardarla en un nuevo fichero. Así de sencillo: un solo array y una sola matriz para todo, independientemente de cuantas líneas tenga el fichero.
Para que lo" veas" te dejo los printf -en C++ serían cout-:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#define NOM_ARCHIVO  "luis_C.txt"
#define NOM_ARCHIVO2  "luis2_C.txt"
#define NUM_ELEM  6

int main(void){
  FILE *fichero,*fichero2;
  float v[NUM_ELEM],a[6][6];
  int i,j;
/***********  ESTO LO PUEDES QUITAR CREANDO EL FICHERO A MANO  ************/
  if ((fichero = fopen(NOM_ARCHIVO, "w")) == NULL){
     perror(NOM_ARCHIVO);
     return EXIT_FAILURE;
  }
  fprintf(fichero, "01 32 34 38 41 44\n");
  fprintf(fichero, "03 06 19 32 47 49\n");
  fprintf(fichero, "08 12 20 34 47 50");
   /*fprintf(fichero, "01 32 34 38 41 44\n03 06 19 32 47 49\n08 12 20 34 47 50");<== o este solo fprintf*/

   fclose(fichero);
/**************************************************************************/
  if ((fichero = fopen(NOM_ARCHIVO, "r")) == NULL){
     perror(NOM_ARCHIVO);
     return EXIT_FAILURE;
  }
   if ((fichero2 = fopen(NOM_ARCHIVO2, "w")) == NULL){
     perror(NOM_ARCHIVO);
     return EXIT_FAILURE;
  }
  while (fscanf(fichero,"%g %g %g %g %g %g", &v[0], &v[1], &v[2], &v[3], &v[4], &v[5])==6){
       for (i=0;i<6;i++)
       printf ("v[%d]= %g ",i, v[i]);
       puts("\n");puts("\n");
       for (i=0;i<6;i++)
           for (j=0;j<6;j++){
               if (i!=j)
                   a[i][j]=v[j];
               else
                   a[i][j]=v[i]+1;
       }
       fprintf (fichero2, "\n ");
       for (i=0;i<6;i++){
           for (j=0;j<6;j++){
           printf ("%g ", a[i][j]);
           fprintf (fichero2, "%g ", a[i][j]);
           }fprintf (fichero2, "\n ");puts("\n");
       }
   }

  fclose(fichero);
  fclose(fichero2);

  return EXIT_SUCCESS;
}


Saluditos!.
P.D: Recuerda que los ficheros generados se encuentran en la misma carpeta donde está el código.

luis456

Cita de: leosansan en 11 Enero 2013, 16:10 PM
Animo que son dos dias ¡ ¡ ¡.
Como te he comentado me defiendo más en C que en C++, no obstante haré lo que tú comentas y me iré mirando los ficheros en C++.
Pero para que veas que es relativamente sencillo, te dejo el código en C -guárdalo con la extensión .c -.
No hace falta manejar memoria dinámica ya que sólo haces uso de un array de seis elementos. La idea es leer una línea de esos seis elementos, formar la matriz con los incrementos correspondientes y guardarla en un nuevo fichero. Así de sencillo: un solo array y una sola matriz para todo, independientemente de cuantas líneas tenga el fichero.
Para que lo" veas" te dejo los printf -en C++ serían cout-:

Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>
#define NOM_ARCHIVO  "luis_C.txt"
#define NOM_ARCHIVO2  "luis2_C.txt"
#define NUM_ELEM  6

int main(void){
  FILE *fichero,*fichero2;
  float v[NUM_ELEM],a[6][6];
  int i,j;
/***********  ESTO LO PUEDES QUITAR CREANDO EL FICHERO A MANO  ************/
  if ((fichero = fopen(NOM_ARCHIVO, "w")) == NULL){
     perror(NOM_ARCHIVO);
     return EXIT_FAILURE;
  }
  fprintf(fichero, "01 32 34 38 41 44\n");
  fprintf(fichero, "03 06 19 32 47 49\n");
  fprintf(fichero, "08 12 20 34 47 50");
   /*fprintf(fichero, "01 32 34 38 41 44\n03 06 19 32 47 49\n08 12 20 34 47 50");<== o este solo fprintf*/

   fclose(fichero);
/**************************************************************************/
  if ((fichero = fopen(NOM_ARCHIVO, "r")) == NULL){
     perror(NOM_ARCHIVO);
     return EXIT_FAILURE;
  }
   if ((fichero2 = fopen(NOM_ARCHIVO2, "w")) == NULL){
     perror(NOM_ARCHIVO);
     return EXIT_FAILURE;
  }
  while (fscanf(fichero,"%g %g %g %g %g %g", &v[0], &v[1], &v[2], &v[3], &v[4], &v[5])==6){
       for (i=0;i<6;i++)
       printf ("v[%d]= %g ",i, v[i]);
       puts("\n");puts("\n");
       for (i=0;i<6;i++)
           for (j=0;j<6;j++){
               if (i!=j)
                   a[i][j]=v[j];
               else
                   a[i][j]=v[i]+1;
       }
       fprintf (fichero2, "\n ");
       for (i=0;i<6;i++){
           for (j=0;j<6;j++){
           printf ("%g ", a[i][j]);
           fprintf (fichero2, "%g ", a[i][j]);
           }fprintf (fichero2, "\n ");puts("\n");
       }
   }

  fclose(fichero);
  fclose(fichero2);

  return EXIT_SUCCESS;
}


Saluditos!.
P.D: Recuerda que los ficheros generados se encuentran en la misma carpeta donde está el código.



Hola Leo

gracias por tu dedicación a estos proyectos locos que hago :)  ya estoy viendo las diferencias en c y c++ y mezclado con foxpro salen una buena ensalada


Luis
Que tu sabiduria no sea motivo de Humillacion para los demas

leosansan

Cita de: luis456 en 11 Enero 2013, 21:25 PM

Hola Leo

gracias por tu dedicación a estos proyectos locos que hago :)  ya estoy viendo las diferencias en c y c++ y mezclado con foxpro salen una buena ensalada


Luis

Al final logré una horita y he podido empezar a leer sobre los ficheros en C++.
Te paso el código en C++ de lo que pedias ¡ ¡ ¡.
Compilalo y ejecutalo y luego abre el fichero de texto luis2.txt, ahí estarán todas las matrices resultantes de aplicar el incremento de uno a cada array, todo un gustazo ¡ ¡ ¡ y en luis.txt es donde están, o bien tú lo pones a mano, los arrays.

Código (cpp) [Seleccionar]
#include <iostream>
#include <fstream>
#include <string>

using namespace std;

int main () {
    int i,j,v[6]={0},a[6][6];
/***********  ESTO LO PUEDES QUITAR CREANDO EL FICHERO A MANO  ************/
    fstream myfile ("luis.txt");
    if (myfile.is_open()){
        myfile << "01 32 34 38 41 44\n";
        myfile << "03 06 19 32 47 49\n";
        myfile << "08 12 20 34 47 49\n";
        myfile.close();
    }
    else cout << "\n Incapaz de crear o abrir el fichero \n";
/**************************************************************************/
    string line;
    ifstream myfile1 ("luis.txt");
    if (myfile1.is_open()){
    ofstream myfile3 ("luis2.txt");
    if (myfile3.is_open()){
        myfile1 >>v[0] >>v[1]>>v[2] >>v[3]>>v[4] >>v[5];
        while ( (!myfile1.eof())) {
            for (i=0;i<6;i++)
                cout << "v["<<i<<"] = "<<v[i] << "  ";
            cout <<endl;
            for (i=0;i<6;i++)
                for (j=0;j<6;j++){
                    if (i!=j)
                        a[i][j]=v[j];
                    else
                        a[i][j]=v[i]+1;
            }
                myfile3 << "\n ";cout <<endl;
                for (i=0;i<6;i++){
                    for (j=0;j<6;j++){
                        cout << a[i][j]<< " ";
                        myfile3 <<  a[i][j] <<" ";
                    }myfile3 << "\n ";cout <<endl;
                }
            myfile1 >>v[0] >>v[1]>>v[2] >>v[3]>>v[4] >>v[5];
            }
            myfile3.close();/**/
        }
        else cout << "\n Incapaz de crear o abrir el fichero \n";
        myfile1.close();
    }
  else cout << "\n Incapaz de crear o abrir el fichero \n";
  return 0;
}


Saluditos!.
P.D: Es mi primer código con ficheros en C++. Supongo que la semana que viene, cuando me haya visto el tema con más calma, me parecerá horrible pero ........ hace lo que pedías. :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes: :rolleyes:

luis456

Hola Leo

el codigo funciona de Pm pero en cuanto le pongo mas numeros manualmente no me sale nada, tampoco logro que lea el archivo con los registros que me hace el otro codigo tengo la idea de que en el nombre de  "  myfile3 " tiene que ver en algo ?

saludos

luis

using namespace std;

int main () {
    int i,j,v[6]={0},a[6][6];
/***********  ESTO LO PUEDES QUITAR CREANDO EL FICHERO A MANO  ************/
   // fstream myfile ("luis.txt");
   // if (myfile.is_open()){
     //   myfile << "01 32 34 38 41 44\n";
      //  myfile << "03 06 19 32 47 49\n";
      //  myfile << "08 12 20 34 47 49\n";
      //  myfile << "09 13 22 38 45 49\n";<----------ya con esto no va ;)
      //  myfile.close();
   // }
   // else cout << "\n Incapaz de crear o abrir el fichero \n";
/**************************************************************************/
    string line;
    ifstream myfile1 ("luis.txt");
    if (myfile1.is_open()){
    ofstream myfile3 ("luis2.txt"); <---------------------------------myfile3--el nombre no influye ?
    if (myfile3.is_open()){
Que tu sabiduria no sea motivo de Humillacion para los demas