Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Otros entornos y lenguajes > C++ Builder
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 24-11-2014
jcdca jcdca is offline
Miembro
NULL
 
Registrado: nov 2014
Posts: 15
Poder: 0
jcdca Va por buen camino
como guardar una palabra de un archivo .txt

necesito sacar una palabra de un archivo .txt con el siguiente formato:
QUESO;5
PLANCHA;4
TORTUGA;9
ZAPATO;6
HORMIGA;1
UNIVERSIDAD;3
TECLADO;8
INFORMATICA;7
INGENIERIA;2
LETRERO;10


el numero es el orden en como debo sacarla, y guardala en una variable. COMO LO HARIA? ESTO SERIA PARA EL LENGUAJE C
Responder Con Cita
  #2  
Antiguo 24-11-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
¿Y qué parte no sabes?, ¿qué codigo tienes?, ¿dónde tienes el problema?
Responder Con Cita
  #3  
Antiguo 24-11-2014
jcdca jcdca is offline
Miembro
NULL
 
Registrado: nov 2014
Posts: 15
Poder: 0
jcdca Va por buen camino
yo leo el archivo, pero lo leo por caracteres, pero cuando trato de poner cada caracter en una sola variable no puedo, no se hacerlo en c.

Código PHP:
void tomarpalabra(){
     
system ("color b");
     
system("cls");
     
int cantidad;
     
char caracter,palabra;     
     
printf("\n\t\t\t  ¿Con cuantas palabras desea jugar? ");  
     
scanf("%d",&cantidad);
     
FILE *archivo;
     
archivofopen("prueba.txt","r"); 
     if (
archivo== NULL){
            
printf("lel archivo no se encuentra");}
            else{                
                while (
feof(archivo)==0){
                   if (
caracter!=";"){
                     
caracter=fgetc(archivo);
                     
palabra+=caracter;}
                  else{
                       break;}
                    } }  
     
printf("\n %s",palabra);                 
     
getch();    
    } 
todavia falta validar algunas cosas, como los numero y eso, pero cuando logre guardar una palabra en la variable ya hare esa parte, me interesa es guardar una palabra al menos, ya despues me encargo del orden.... el programa corre, pero al momento de imprimir la palabra printf("\n %s",palabra) me da un error y se sale. no se porque las librerias que tengo son:
Código PHP:
#include <stdio.h>
#include <stdlib.h>   
#include <string.h> 

Última edición por ecfisa fecha: 24-11-2014 a las 17:45:36. Razón: Agregar etiquetas [php]
Responder Con Cita
  #4  
Antiguo 24-11-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Cita:
Empezado por jcdca Ver Mensaje
me da un error y se sale.
¿Y qué error es?

Por cierto, bienvenido a clubdelphi, ¿ya leiste nuestra guía de estilo?, gracias por tu colaboración

Recuerda poner los tags al código fuente, ejemplo:



Gracias
Responder Con Cita
  #5  
Antiguo 24-11-2014
jcdca jcdca is offline
Miembro
NULL
 
Registrado: nov 2014
Posts: 15
Poder: 0
jcdca Va por buen camino
esa es la imagen, me sale una ventana emergente.
Imágenes Adjuntas
Tipo de Archivo: jpg codigo2.JPG (35,7 KB, 9 visitas)
Responder Con Cita
  #6  
Antiguo 24-11-2014
Avatar de Casimiro Notevi
Casimiro Notevi Casimiro Notevi is offline
Moderador
 
Registrado: sep 2004
Ubicación: En algún lugar.
Posts: 32.043
Poder: 10
Casimiro Notevi Tiene un aura espectacularCasimiro Notevi Tiene un aura espectacular
Depúralo paso a paso para encontrar la línea que te da el problema.
Responder Con Cita
  #7  
Antiguo 24-11-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jcdca.
Cita:
Empezado por jcdca Ver Mensaje
necesito sacar una palabra de un archivo .txt con el siguiente formato:
QUESO;5
PLANCHA;4
TORTUGA;9
ZAPATO;6
HORMIGA;1
UNIVERSIDAD;3
TECLADO;8
INFORMATICA;7
INGENIERIA;2
LETRERO;10

el numero es el orden en como debo sacarla, y guardala en una variable. COMO LO HARIA? ESTO SERIA PARA EL LENGUAJE C
No me quedó muy claro lo que solicitas...
Pero te pongo un ejemplo que lee el archivo, separa las palabras de los números tomando en cuenta el delimitador ";" y va almacenando las palabras en un arreglo cuyo índice está dado por el número leido:
Código PHP:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define MAX_WORDS 1024

int main()
{
  
FILE *fp;
  
char vstr[MAX_WORDS][30] = {0};
  
char cad[40], aux[30], num[10], *ch;
  
int  iix;

  if ((
fp fopen("Archivo.TXT""rt")) == NULL) {
    
perror("Error");
    
fclose(fp);
    return 
1;
  }

  while ( !
feof(fp) ) {
    
fgets(cad40fp);    
    
ch strchr(cad';');
    
strncpy(auxcadch-cad);
    
aux[ch-cad]= '\0';
    
strncpy(numcad+(ch-cad+1), 10);
    
num[10]= '\0';
    
strcpy(vstr[atoi(num)], aux);
  }
  
fclose(fp);

  for(
0MAX_WORDSi++)
    if (
strlen(vstr[i]) > 0printf("%d %s\n"ivstr[i]);

  
getchar();
  return 
0;

Saludos
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....

Última edición por ecfisa fecha: 24-11-2014 a las 23:44:35. Razón: corregir ruta al archivo
Responder Con Cita
  #8  
Antiguo 25-11-2014
jcdca jcdca is offline
Miembro
NULL
 
Registrado: nov 2014
Posts: 15
Poder: 0
jcdca Va por buen camino
listo gracias, son unos genios jeje... es que nunca había usado el lenguaje c y hay cosas que se me complican todavía... ya me corre bien gracias a todos.. era eso de concatenar así: palabra+=caracter; lo puse como me dijeron con un indice y corre, pero ahora tengo otra duda, estoy tratando de que imprima solo una palabra, por ejemplo:
QUESO;5
PLANCHA;4
TORTUGA;9
ZAPATO;6
HORMIGA;1
UNIVERSIDAD;3
TECLADO;8
INFORMATICA;7
INGENIERIA;2
LETRERO;10

de esa lista que les di antes también, yo leo carácter por carácter, guardando la palabra, hasta llegar al punto y coma, cuando llego al punto y coma leo el numero y con un if lo comparo con el numero 1, para ver si es la primera palabra que en este caso seria hormiga, si no es la primera, borro la palabra y sigo buscando hasta conseguirla. asi tengo el código:

else
{ caracter = fgetc(archivo); //esto me lee el numero que esta al lado del punto y coma
int aux = (int) (caracter - 48); //esto me convierte ese numero en entero
if (aux==x) //esto me compara ese numero con x, que en este caso es 1
{palabra[i] = '\0';
printf("\n %s",palabra); getch(); break;
}else {}


el código así si funciona, pero me imprime todas las palabras hasta llegar a la primera, QUESOPLANCHATORTUGAZAPATOHORMIGA y se detiene cuando llega a la primera... la cosa es que necesito vaciar la variable para que no me las guarde todas, si no solo la ultima palabra... esa parte de vaciar tendría que ponerla en el ultimo else si no me equivoco... intente poniendo en el else esto: *palabra = '\0';, y nada, si pongo eso no me imprime nada de nada, no me da error pero tampoco me imprime.... también intente con palabra[0]=0; y lo mismo no imprime nada. probé también poniendo palabra[i] = '\0'; en el else y no hace nada, me sigue imprimiendo todas las palabras hasta la llegar a la primera.. y con la funcion memset() me da un error no se si es que me falta alguna librería o algo.

el getch(); es solo para que se detenga y ver si imprimia algo. y el break es para romper el ciclo, que imagino que ya lo saben, pero bueno jeje
Responder Con Cita
  #9  
Antiguo 25-11-2014
Avatar de ecfisa
ecfisa ecfisa is offline
Moderador
 
Registrado: dic 2005
Ubicación: Tres Arroyos, Argentina
Posts: 10.508
Poder: 36
ecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to beholdecfisa is a splendid one to behold
Hola jcdca.

Por favor, cuando incluyas código en tus mensajes usa las etiquetas como indica la siguiente imágen:


Saludos y gracias por tu colaboración
__________________
Daniel Didriksen

Guía de estilo - Uso de las etiquetas - La otra guía de estilo ....
Responder Con Cita
  #10  
Antiguo 25-11-2014
Avatar de aguml
aguml aguml is offline
Miembro
 
Registrado: may 2013
Posts: 885
Poder: 11
aguml Va por buen camino
Creo que te complicas mucho la vida, yo usaria archivos con registros de tamaño fijo.
En este ejemplo puedes ver como crear un archivo secuencial y lo relleno y luego busco en el tanto por nombre como por numero de registro. Es mucho mas sencillo de manejar.

Código PHP:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define TAM_MAX_PALABRA 50
int main(int argccharargv[])
{
   
struct{
      
char palabra[TAM_MAX_PALABRA];
      
int index;
   }
registro;

   
char nombre[TAM_MAX_PALABRA];
   
int cantidadxindiceencontradanreadsalir=0;
   
char caracter;
   
FILE *archivo;

   
//ZONA DONDE CREO EL ARCHIVO SECUENCIAL Y LO RELLENO CON LOS REGISTROS
   
printf("\nIndique el numero de palabras a usar: ");
   
scanf("%d",&cantidad);

   
archivo fopen("prueba.txt","w"); //Abro el fichero para escritura

   
if(archivo != NULL){ //Si el archivo se ha abierto correctamente...
      
for(0cantidadx++){
         
printf("\n\nIntroduce el nombre del registro %d: "x);
         
fflush(stdin); //Limpiamos el buffer de entrada
         
fgets(registro.palabra,TAM_MAX_PALABRA,stdin); //es mas recomendable ya que permite guardar cadenas con espacios
         
printf("\nIntroduce el numero del registro %d: "x);
         
scanf("%d",&registro.index);

         
fwrite(&registro,sizeof(registro),1,archivo); //Guardo el registro
      
}
      
fclose(archivo); //Cierro el archivo
   
}

   
//ZONA DONDE BUSCO EL REGISTRO DESEADO
   
archivofopen("prueba.txt","r");

   if (
archivo== NULL){
      
printf("\nEl archivo no se encuentra.\n");
   }else{
      do{
         
//Mostramos el menú y esperamos hasta que se elija una opcion correcta
         
system("CLS"); //Limpiamos la pantalla
         
printf("\n\nELIGE EL TIPO DE BUSQUEDA\n");
         
printf("-------------------------\n\n");
         
printf("\t1.Por indice\n");
         
printf("\t2.Por nombre\n");
         
printf("\t3.Salir\n\n");
         
printf("\tOpcion: ");
         
scanf("%d",&x);

         switch(
x)
         {
            case 
1:
               
printf("\nElige el indice a buscar: ");
               
scanf("%d",&indice);
               break;

            case 
2:
               
printf("\nElige el nombre a buscar: ");
               
fflush(stdin); //Limpiamos el buffer de entrada
               
fgets(nombre,TAM_MAX_PALABRA,stdin); //es mas recomendable ya que permite guardar cadenas con espacios
               
break;

            case 
3:
               
salir 1;
               break;

            default:
               
printf("\n\tValor introducido incorrecto.");
               
printf("\n\tPulse Intro para continuar.");
               
fflush(stdin); //Limpiamos el buffer de entrada
               
getchar(); //Esperamos a que se pulse intro
         
}
      }while(
|| 3); //Si elegimos una opcion correcta saldremos del bucle

      
if(salir == 0){
         
encontrada 0;

         while (!
feof(archivo)){
            
nread fread(&registro,sizeof(registro),1,archivo);

            if(
nread == 0//Si no lee mas registros es porque llegamos al final
               
break;

            switch(
x)
            {
               case 
1:
                  if(
indice == registro.index){
                     
printf("\nPalabra encontrada: %s"registro.palabra);
                     
encontrada 1;
                  }
                  break;

               case 
2:
                  if(
strcmp(nombreregistro.palabra) == 0){
                     
printf("\nPalabra encontrada. Registro: %d"registro.index);
                     
encontrada 1;
                  }
                  break;
            }
         }

         if(
encontrada == 0)
            
printf("\nPalabra no encontrada.");

         
fclose(archivo); //Cerramos el archivo
         
printf("\n\n");
         
system("PAUSE");
      }
   }
   return 
0;
}
//--------------------------------------------------------------------------- 
Responder Con Cita
  #11  
Antiguo 25-11-2014
jcdca jcdca is offline
Miembro
NULL
 
Registrado: nov 2014
Posts: 15
Poder: 0
jcdca Va por buen camino
ya pude hacerlo, pero ahora tengo otro problemita recorro el archivo y saco las palabras en orden, y llamo a la funcion insertarenlista para meter todas las palabras en orden en una lista, al parecer si la llena o eso creo yo, pero al momento de imprimirla me muestra simbolos extraños, no se si es que la lleno mal, o que la imprimo mal o lo que sea, alguien sabe que tengo mal?

Código PHP:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

struct nodo
{
  
char palabra[30];
  
struct nodo*sig;
};

typedef struct nodo listaPalabra;

listaPalabra crearLista(listaPalabra *inicio)
{
   
inicio=NULL;
   return 
inicio;
}

listaPalabra *insertarEnLista(char palabra[30],listaPalabra *inicio)
{
       
listaPalabra *nuevoNodo;
       
listaPalabra *aux;
       
       
nuevoNodo=(listaPalabra*)malloc(sizeof(listaPalabra));
       
nuevoNodo->palabra[30]=palabra[30];
       
nuevoNodo->sig=NULL;
       
              
       
       if (
inicio == NULL)
       {
             
inicio=nuevoNodo;                  
       }
       else
       {
           
aux=inicio;
           
           while (
aux->sig !=NULL)
           {
                 
aux=aux->sig;                 
           }           
           
aux->sig=nuevoNodo;           
       }  
       return 
inicio;    
}

void imprimir (listaPalabra *lista)
{
     
listaPalabra *auxiliar;
     
auxiliar=lista;
     
     while (
auxiliar!=NULL)
     {
           
printf("%s \n",auxiliar->palabra);
           
auxiliar=auxiliar->sig;
     }
}


void Jugar(){
     
system ("color b");
     
system("cls");
     
int cantidad,i,j,aux,x,indice;
     
char caracter,palabra[30];   
     
printf("\n\t\t\t  ¿Con cuantas palabras desea jugar? ");  
     
scanf("%d",&cantidad);
     
x=1i=1j=0;
     
listaPalabra*lista;
     
lista=crearLista(lista);
     while (
i<=cantidad)
     {
       
FILE *archivo;
       
archivofopen("prueba.txt","r"); 
       if (
archivo== NULL)
       {
            
printf("El archivo no se encuentra");}
            else
            {                          
                while (
feof(archivo)==0)
                {
                       do
                       { 
                         
caracter=fgetc(archivo);
                       }while(
caracter=='\n');
                     
                   if (
caracter!=';')
                   {                      
                      
palabra[j]=caracter;
                      
j++;
                   }
                  else
                  {
                     
caracter=fgetc(archivo);
                     
aux= (int)(caracter-48);                     
                     if (
aux==i)
                     {                                                         
                        
lista=insertarEnLista(palabra,lista); 
                        
imprimir(lista);      
                      }                                          
                      
indice=0;
                      while (
indice<20)
                      {
                         
palabra[indice]=0;
                         
indice++;
                      }
                      
j=0;
                       
                  } 
            }  
                
close(archivo);
            } 
       
       
i++;
     }
                                    
     
getch();    
     }



void menu()
{
char resp;

  do
  { 
system ("color b"); 
       
system("cls");
    
printf("\n\n\t\t\t* * * * * MENU DE OPCIONES * * * * *");
    
printf("\n\t\t---------------------------------------------------");
    
printf("\n\t\t\t  Juego de el ahorcado ");
    
printf("\n\t\t---------------------------------------------------\n\n\n\n");
    
printf("\t\t\t\t (1) Jugar \n");
    
printf("\t\t\t\t (0) salir\n");

    do
     
resp=getch();

    while (
resp<'0' || resp>'1');
    switch(
resp)
     { case 
'1'Jugar();
         break;
      case 
'0'
         break;
     }
  }
  while(
resp!='0');
}


   
int main()
{
 
menu();

 return(
0);

Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
Guardar un DBGrid como archivo *.dbf richisaurio Conexión con bases de datos 13 25-01-2013 17:53:32
¿como guardar un archivo de texto como ANSI? JXJ Varios 2 09-09-2011 21:26:29
Posible Guardar QuickReport Como Archivo jirbert Varios 5 24-07-2008 10:27:40
Como guardar un TChart en archivo gif? crespopg Gráficos 1 04-05-2007 23:18:26
Como guardar un objeto en un archivo ? cmurua71 OOP 7 18-11-2005 21:26:30


La franja horaria es GMT +2. Ahora son las 00:09:04.


Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi
Copyright 1996-2007 Club Delphi