Cómo leer número de un txt.

Iniciado por Wilber592, 22 Noviembre 2018, 00:34 AM

0 Miembros y 3 Visitantes están viendo este tema.

Wilber592

Buenas tardes amigos, tengo un proyecto, y este habla sobre una abarrotes, dónde hay 3 archivos 1 para facturas otro para "inventario" y otro para clientes.

Resulta que el de inventario, debe cargar información cada que se cierre el programa así la próxima vez que se abra, mantenga los datos anteriores hasta agotar existencias.

Y no puedo o no sé cómo extraer numeros de los txt, ayuda porfavor

FranFin

Por que usar un archivo de texto para leer informacion?  :huh:
Puedes leer los bytes del archivo y esperar tener suerte y que no haya sido modificado por lo que sea, de esa forma puedes leer el numero que quieres.

AlbertoBSD

Hay que tener varias consideraciones, para empezar saber distinguir si el archivo esta guardado como texto o en formato binario.

Apartir de ahi hay varias cosas que ver.

Si es modo texto, buscar la estrucura y orden de los datos guardados y leerlos en formato de texto y convertir los necesarios a  datos enteros, flotantes etc. ejemplo fgets + strtol, strtof etc...

Si es modo binario, lo mismo buscar la estrucura y orden de los datos guardados, y leerlo en formato directo a una estrucutra de datos ejemplo fread(&dato1,...

Si me mandas los archivos yo te escribo el programa para leer los datos y mostrarlos en pantalla.

Saludos
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Beginner Web

#3
Bueno la solucion esta en la teoria busca esto en tus apuntes o en internet "Archivos en C. Apertura"
Código (cpp) [Seleccionar]
puntero_archivo=fopen("ruta_archivo","modo_apertura");
Y con respecto a los numeros depende la estructura que hayas elegido, si es una struct, habras guardado un archivo de structs por lo tanto a la hora de modificar/extraer esos numeros lo haces leyendo secuencialmente el archivo y sacas la estructura que te interesa y modificas el campo donde contiene numeros, es solo un ejemplo

7w7

Wilber592

Cita de: FranFin en 22 Noviembre 2018, 00:36 AM
Por que usar un archivo de texto para leer informacion?  :huh:
Puedes leer los bytes del archivo y esperar tener suerte y que no haya sido modificado por lo que sea, de esa forma puedes leer el numero que quieres.
[/quote

Esque de hecho podemos usar el archivo que deseemos, la estructura para abrirlo, si puedo usarlo, lo que me cuesta es extraer los datos]

Wilber592

Cita de: AlbertoBSD en 22 Noviembre 2018, 00:42 AM
Hay que tener varias consideraciones, para empezar saber distinguir si el archivo esta guardado como texto o en formato binario.

Apartir de ahi hay varias cosas que ver.

Si es modo texto, buscar la estrucura y orden de los datos guardados y leerlos en formato de texto y convertir los necesarios a  datos enteros, flotantes etc. ejemplo fgets + strtol, strtof etc...

Si es modo binario, lo mismo buscar la estrucura y orden de los datos guardados, y leerlo en formato directo a una estrucutra de datos ejemplo fread(&dato1,...

Si me mandas los archivos yo te escribo el programa para leer los datos y mostrarlos en pantalla.

Saludos

Hola! Saludos gracias por tu comentario, y fíjate que si, en realidad tienes mucha razón por ejemplo con respecto a los archivos, este es así;

Archivo 1 debe tener solo números, dónde se sea el stock de manzanas, peras, pan, piña,chicle. Según el catedrático no debe llevar mucha ciencia, que podemos leer los números y almacenarlos en un vector y ya después en el vector ponerle un nombre,.

Ahora en los otros archivos, es solo introducción de datos por ejemplo datos de comprador y en el otro la factura

FranFin

Código (cpp) [Seleccionar]
cout << "Leyendo archivo ejemplo.txt" << endl;

ifstream archivoQueLeer; //declaramos variable que representa nuestro archivo a leer

archivoQueLeer.open("ejemplo.txt"); //ponemos el nombre del archivo, asumimos que el objetivo esta en la misma carpeta

char contenido[100]; //definimos lo que sera el contenido una vez abierto el archivo
if (archivoQueLeer.is_open()) { //nos aseguramos que hemos abierto el archivo de manera satisfactoria
while (!archivoQueLeer.eof()) { //siempre que no hallamos llegado al final del archivo...
archivoQueLeer >> contenido; //leemos el archivo y asignamos el valor a nuestra primera variable
cout << contenido; //imprimimos el valor
}
}
archivoQueLeer.close(); // cerramos el fichero de forma que no tengamos problemas en el futuro

Wilber592

Cita de: FranFin en 22 Noviembre 2018, 15:06 PM
Código (cpp) [Seleccionar]
cout << "Leyendo archivo ejemplo.txt" << endl;

ifstream archivoQueLeer; //declaramos variable que representa nuestro archivo a leer

archivoQueLeer.open("ejemplo.txt"); //ponemos el nombre del archivo, asumimos que el objetivo esta en la misma carpeta

char contenido[100]; //definimos lo que sera el contenido una vez abierto el archivo
if (archivoQueLeer.is_open()) { //nos aseguramos que hemos abierto el archivo de manera satisfactoria
while (!archivoQueLeer.eof()) { //siempre que no hallamos llegado al final del archivo...
archivoQueLeer >> contenido; //leemos el archivo y asignamos el valor a nuestra primera variable
cout << contenido; //imprimimos el valor
}
}
archivoQueLeer.close(); // cerramos el fichero de forma que no tengamos problemas en el futuro

Amigo yo trabajo en c y realmente si te entendí la mayoría de que me recomendaste, pero precisamente la parte del while no sé cómo hacerla podrías detallarme algo porfavor

AlbertoBSD

Un ejemplo en C


#include<stdlib.h>
#include<stdio.h>

int main() {
int numero;
char temporal[20];
FILE *archivo;
archivo = fopen("archivo.txt","r");
while(!feof(archivo)) {// Esto se lee "mientras (while) no (!) sea el fin del archivo( END OF FILE feof (archivo))  hacer"
fgets(temporal,20,archivo);// Leemos hasta encontrar un enter o un limite de 20 Caracteres suficientes para un numero...
numero = strtol(temporal,NULL,10); //Solo procesamos numeros BASE 10
printf("Dato leido %i\n",numero);
}
}
Donaciones
1Coffee1jV4gB5gaXfHgSHDz9xx9QSECVW

Wilber592

Cita de: AlbertoBSD en 22 Noviembre 2018, 18:23 PM
Un ejemplo en C


#include<stdlib.h>
#include<stdio.h>

int main() {
int numero;
char temporal[20];
FILE *archivo;
archivo = fopen("archivo.txt","r");
while(!feof(archivo)) {// Esto se lee "mientras (while) no (!) sea el fin del archivo( END OF FILE feof (archivo))  hacer"
fgets(temporal,20,archivo);// Leemos hasta encontrar un enter o un limite de 20 Caracteres suficientes para un numero...
numero = strtol(temporal,NULL,10); //Solo procesamos numeros BASE 10
printf("Dato leido %i\n",numero);
}
}

Mira lo que llevo

#include <stdio.h>
#include <stdlib.h>
#define MAX 100
FILE *cliente;
FILE *inventario;



struct cliente{
    char nombre[20];
    int nit;
    int compra;
}id;



int factura()
{
    system("CLS");
    int item;

    printf("\t\t\t.::.FACTURACION.::.");
    printf("\n\n\n\tNOMBRE:");
    scanf("%s",&id.nombre);
    printf("\n\tNIT:");
    scanf("%d",&id.nit);
    //leyendo archivo
    inventario=fopen("inventario.txt","r");
    if(inventario==NULL)
    {
        printf("Error al Leer inventario");
    }
    while((item=fgetc(inventario))!=EOF)
    {
        if(item=='\n')
        {
            printf("\n");
        }
        else{
            putchar(item);
        }
    }

    fclose(inventario);

    cliente=fopen("usuario.txt","a+");
    if (cliente==NULL)
    {
        printf("No se puede crear datos de Cliente");
    }
}



void datos()
{
    int item[5];
    printf("a continuacion con cada intro podra ingresar solo cantidades, en el orden siguiente \nmanzanas\nperas\npan\pinha\nchicle\n");
    inventario=fopen("inventario.txt","w");
    if (inventario==NULL)
    {
        printf("El archivo esta Da񡤯");
    }
    //Guardar Datos
    for(int i=0;i<5;i++)
    {
        scanf("\n%d",&item[i]);
        fputc(item[i],inventario);
    }
//Verificar datos Guardados
    for(int e=0;e<5;e++)
    {
        fscanf(inventario,"%d",&item[e]);
        printf("\n%d",item[e]);
    }

    fclose(inventario);
}

int leer()
{
   /* int item[5];
    inventario=fopen("inventario.txt","r");
    if(inventario==NULL)
    {
        printf("NO SE PUEDE LEER");
    }

    while(inventario!=EOF)
    {
        for(int i=0;i<5;i++){
        fscanf(inventario,"%c",item[i]);
        printf("%d",item[i]);
    }
    fclose(inventario);
}
*/
int numero;
char temporal[20];
inventario=fopen("inventario.txt","r");
while(!feof(inventario))
{
    fgets(temporal,20,inventario);
    numero=strtol(temporal,NULL,10);
    printf("dato leido %i\n",numero);
}
fclose(inventario);
}

int main()
{
    int op;
    do{
        printf("\n\t.:MENU:.\n");
        printf("\n\n1.Introducir Datos.");
        printf("\n2.Facturar");
        printf("\n3.Ver clientes");
        printf("\n4.Salir");
        printf("\n\nOpcion:");
        scanf("%d",&op);
        switch(op)
        {
        case 1: datos();break;
        case 2: factura();break;
        case 3: leer();break;

        }
    }
    while(op!=4);
    return 0;
}
[\code]