Autor
|
Tema: Como hacer que tome registros este programa desde un txt y aplique la funcion (Leído 361 veces)
|
luis456
Desconectado
Mensajes: 50
|
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
|
|
|
|
|
En línea
|
|
|
|
durasno
Desconectado
Mensajes: 376
|
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
|
|
|
|
|
En línea
|
Ahorrate una pregunta, lee el man
|
|
|
luis456
Desconectado
Mensajes: 50
|
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
|
|
|
|
|
En línea
|
|
|
|
durasno
Desconectado
Mensajes: 376
|
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
|
|
|
|
|
En línea
|
Ahorrate una pregunta, lee el man
|
|
|
-- KiLiaN --
Desconectado
Mensajes: 938
Ju Já!!
|
Busca algún manual de C++ y vete a la parte que expliquen el manejo de archivos.
|
|
|
|
|
En línea
|
@kln13
|
|
|
luis456
Desconectado
Mensajes: 50
|
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
|
|
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 558
|
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-:#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.
|
|
|
|
« Última modificación: 11 Enero 2013, 16:32 por leosansan »
|
En línea
|
|
|
|
luis456
Desconectado
Mensajes: 50
|
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-:#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
|
|
|
|
|
En línea
|
|
|
|
leosansan
Desconectado
Mensajes: 558
|
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.#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. 
|
|
|
|
|
En línea
|
|
|
|
luis456
Desconectado
Mensajes: 50
|
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()){
|
|
|
|
|
En línea
|
|
|
|
luis456
Desconectado
Mensajes: 50
|
Ya funciona el problema era que cuando creo por primera ves los archivos txt los nombro Luis_C.txt y luis2_c.txt ni idea, pero se me ocurrió quitar los " _c " y funciona de maravilla hace los calculos con cualquier cantidad de registros. gracias Luis
|
|
|
|
|
En línea
|
|
|
|
|
|