Programación General > C/C++
como puedo concatenar la salida de un archivo
ccgt:
necesito concatenar la salida de un archivo que leo con fgetc para saber si es un digito , una palabra reservada o un identificador
pero cuando lo hago if ((f1=fopen("ard.txt","r"))==NULL){
printf("Error! opening file");
}
while((c=fgetc(f1))!=EOF)
{
if(isdigit(c));
printf("%c es numero",c);
}
}
este solo muestra caracter por caracter es decir el 555 debe ser un numero y no 5 y 5 y 5 ademas hay problemas con los espacios en blanco
chenech:
Hola, es que la función fgetc es para leer carácter a carácter, si quieres leer líneas deberías usar fgets, getline o alguna otra.
Tienes mas de una palabra en cada línea? por que si solo es una tendrías que leerla y luego recorrer el array a ver si todos sus dígitos son numéricos, por ejemplo el 5 y 5 y 5, si siempre es true es un número, si salta algún false no es numérico.
En caso de varias palabras por línea, la lees completa y luego la recorres hasta que sea un espacio, y ahí haces la pregunta si es número cada uno de los dígitos del array desde la posición inicial de lectura del array hasta el espacio.
ccgt:
tengo este txt
-----------------------------------------------------------------------------------------------------------
miguel ruiz 44455 56.65 jose5r
5 6 miguel55
----------------------------------------------------------------------------------------------------------------
es decir puede venir mas de una palabra en una linea y muchas mas lineas
pero el objetivo del programa es que este pueda identificar los numeros con punto o sin punto y los nombres e identificadores que tiene letras y numeros y la salida del programa tendria que ser de este modo
--------------------------------------------------
miguel ---- palabra
ruiz --------palabra
44455 ----- numero
56.65 -------numero flotante
jose5r-----------identificador
5----- numero
6------ numero
---------------------------------------------------
miguel55--------------identificador
chenech:
Habrá que leer línea por línea el fichero, luego separar estas líneas por los espacios y en cada palabra comprobar si es palabra, número o identificador, el separar se hace con la función strtok, haz tres funciones (esto te queda para ti) :jumpie: que devuelvan true o false para sumar o no a cada tipo, así al final en los datos sPalabra, sNumero, sIdentifica tendrás la suma de cada uno:
--- Código: ---
FILE *fpFichero;
char *pPuntero;
char cCadena[75];
short sPalabra, sNumero, sIdentifica;
sPalabra = sNumero = sIdentifica = 0;
if((fpFichero = fopen("PRUEBA.TXT", "r")) != NULL)
{
while(fgets(cCadena, 70, fpFichero) != NULL) // Aquí leemos hasta el final del fichero por línea
{
pPuntero = strtok(cCadena, " ");
while(pPuntero != NULL) // Aquí partimos la línea leída por espacios
{
if(Palabra(pPuntero)) // Aquí llamaremos a una función que devuelva si es una palabra
sPalabra++;
if(Numero(pPuntero)) // Aquí llamaremos a una función que devuelva si es un número
sNumero++;
if(Identifica(pPuntero)) // Aquí llamaremos a una función que devuelva si es un identificador
sIdentifica++;
pPuntero = strtok(NULL, " ");
}
}
}
fclose(fpFichero);
--- Fin del código ---
ccgt:
--- Cita de: chenech en Lunes 29 de Agosto de 2016, 20:24 ---Habrá que leer línea por línea el fichero, luego separar estas líneas por los espacios y en cada palabra comprobar si es palabra, número o identificador, el separar se hace con la función strtok, haz tres funciones (esto te queda para ti) :jumpie: que devuelvan true o false para sumar o no a cada tipo, así al final en los datos sPalabra, sNumero, sIdentifica tendrás la suma de cada uno:
--- Código: ---
FILE *fpFichero;
char *pPuntero;
char cCadena[75];
short sPalabra, sNumero, sIdentifica;
sPalabra = sNumero = sIdentifica = 0;
if((fpFichero = fopen("PRUEBA.TXT", "r")) != NULL)
{
while(fgets(cCadena, 70, fpFichero) != NULL) // Aquí leemos hasta el final del fichero por línea
{
pPuntero = strtok(cCadena, " ");
while(pPuntero != NULL) // Aquí partimos la línea leída por espacios
{
if(Palabra(pPuntero)) // Aquí llamaremos a una función que devuelva si es una palabra
sPalabra++;
if(Numero(pPuntero)) // Aquí llamaremos a una función que devuelva si es un número
sNumero++;
if(Identifica(pPuntero)) // Aquí llamaremos a una función que devuelva si es un identificador
sIdentifica++;
pPuntero = strtok(NULL, " ");
}
}
}
fclose(fpFichero);
--- Fin del código ---
--- Fin de la cita ---
amigo disculpa creo que encontre una mejor solucion para mi problema
es leer el archivo en un array de strings
#include <stdio.h>
#include <conio.h>
#define MAX_CHARS 20
typedef char string[MAX_CHARS+1];
main(){
int i;
string array[4];
FILE *data;
data = fopen("ard.txt","r");
for(i = 0; i < 4; i++)
{ fscanf(data, "%s", array); }
printf("%s",array[3]);
getch();
}
el cual me separa cada palabra del txt y lo vueleve un string pero ahora como hago para que ese array de string sea dinamico solicito me puedar ayudar
Navegación
[#] Página Siguiente
Ir a la versión completa