Ver Mensaje Individual
  #2 (permalink)  
Antiguo 11/09/2007, 09:12
Avatar de Instru
Instru
 
Fecha de Ingreso: noviembre-2002
Ubicación: Mexico
Mensajes: 2.751
Antigüedad: 22 años, 3 meses
Puntos: 52
Re: posicion de la cadena en archivo

Cita:
Iniciado por pak-man Ver Mensaje
saludos amigos...
pido su ayuda para mi siguiente programa...
en el siguiente estoy buscando la posicion de una cadena dentro del archivo

por ejemplo-....

me amigo se llama juan

pedro es estuciante de ingenieria

la palabra amigo se encuentra en la coordenada (renglon 1, columna 4)y asi sucesivamente

entonces serian las coordenadas las que busco les agradesco de antemano su ayuda.. aqui les dejo mi codigo...

<code>
#include <stdio.h>
#include <string.h>
#include <conio.h>



char renglon[80];
char palabras[100][80]; /* Todos los palabras */
char palabras_diferentes[100][80]; /* Solo palabras diferentes */
int i, j, k, total=0 /* Numero total de palabras*/,
diferentes=0 /* Numero de palabras diferentes */;
int Rep[100]; /* Repeticiones de cada palabra diferente */


void separador(char *renglon, char palabras[100][80], int *total);
void ocurrencias(char *nombre_archivo);
void coordenadas();


int main()
{
char nombre_archivo[100] = "palabras.txt";


clrscr();

ocurrencias(nombre_archivo);
coordenadas();
getch();


return 0;
}



/*
Recibe una cadena y devuelve las palabras de dicha cadena.
Los espacios y saltos de linea son los separadores entre palabras.
*/
void separador(char renglon[80], char palabras[100][80], int *total)
{
int i, j=0;


for(i=0; i<strlen(renglon); i++)
{
/* Si es un caracter distinto de espacio y salto de linea */
if(renglon[i]!=' ' && renglon[i]!='\n')
{
palabras[*total][j] = renglon[i];
j++;
}
/* Si es espacio o salto de linea */
else if(renglon[i]==' ' || renglon[i]=='\n')
{
/* Si el caracter anterior no es espacio ni salto de linea */
if(i>0 && renglon[i-1]!=' ' && renglon[i-1]!='\n')
{
palabras[*total][j] = '\0'; /* Indica fin de palabra */
*total = *total+1; /* Aumenta el numero de palabras */
j=0;
}
}
}
}



void ocurrencias(char nombre_archivo[100]
{

FILE *archivo;


archivo=fopen(nombre_archivo,"r" ;


if(archivo==NULL)
{
printf("No se encuentra archivo: %s\n", nombre_archivo);
return ;
}
/* Lee el archivo linea a linea y obtiene las palabras de esa linea */

while(fgets(renglon,80,archivo))
{

separador(renglon,palabras, &total);
}


fclose(archivo);


/* Saca copia del arreglo original */
for(i=0; i<total; i++)
strcpy(palabras_diferentes[i], palabras[i] ;


/* Saca palabras diferentes */
diferentes = total;
for(i=0;i<diferentes;i++)
{
for(j=i+1;j<diferentes;j++)
{
/* Si encuentra palabra repetida */
if(!strcmp(palabras_diferentes[i], palabras_diferentes[j] )
{
/* Recorre una posicion elementos posteriores */
for(k=j+1;k<diferentes;k++)
strcpy(palabras_diferentes[k-1], palabras_diferentes[k] ;


diferentes--;
j--;
}
}
}


/* Halla repeticiones de cada palabra distinta */
for(i=0; i<diferentes; i++)
Rep[i] = 0;
for(i=0; i<diferentes; i++)
for(j=0;j<total;j++)
if(!strcmp(palabras_diferentes[i], palabras[j] )
Rep[i]++;


gotoxy(10,5);printf("PALABRA\t\tREPETICIONES\t\tCO ORDENADAS" ;
int y=7;
for(i=0; i<diferentes; i++)
{
gotoxy(11,y);printf("%s", palabras_diferentes[i] ;
gotoxy(31,y);printf("%d",Rep[i] ;

y=y+1;
}
}

</code>
De entrada, te recomiendo que dejes de usar conio.h.Quieres saber porque? ve las FAQs o muchos de los posts de este foro donde tienen problemas con conio.h.

Despues.

Yo lo que haria seria ir leyendo linea por linea entera.
Despues en esa linea usando strcmp ir checando una coincidencia caracter por caracter, es decir, con un puntero.

int *p=linea;
strncmp("amigo", p, strlen("amigo"));
p++;

Y asi sucesivamente.
Aparte tienes que llevar otro contador que es el que te va a llevar la coordenada x.

Saludos