elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: Recuerda que debes registrarte en el foro para poder participar (preguntar y responder)


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, YreX-DwX)
| | |-+  lectura y escritura de ficheros
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: lectura y escritura de ficheros  (Leído 1,963 veces)
franfis

Desconectado Desconectado

Mensajes: 244



Ver Perfil
lectura y escritura de ficheros
« en: 14 Abril 2013, 16:04 »

Hola, mi problema es que el segundo for imprime solo espacios en blanco como si en el fichero Letras.txt hubiese solo espacios en blanco, este es el código;
Citar
#include <iostream.h>
#include <fstream.h>

int main()
{
    int c=0;
   int j=0;
   int i;
   char letra;
       fstream letras("Letras.txt", ios::in|ios::out);

         for (i=0;i<=2000;i++){
     letras.seekg(i, ios::beg);
          letra=letras.get();
      if(letra=='\"'){
      c=c+1;
      cout<<"comilla:"<<c<<" "<<"posicion :"<<i<<endl;
      }
   }


   for (i=52;i<=100;i++){
   letras.seekg(i, ios::beg);
   letra=letras.get();
   letras.seekp(0, ios::end);
   cout<<letra;
   }   

    while(!letras.eof())

    letras.close();

    return 0;
}

El primer for, si funciona señalando la posición de las comillas en el fichero Letras.txt mostrandolos en pantalla.
En el segundo for estoy tratando de imprimir en pantalla las letras desde la posición 52 hasta 100 pero lo unico que aparece en pantalla son espacios.
Aqui esta el resultado de correr todo.

Citar
comilla:1 posicion :21
comilla:2 posicion :44
comilla:3 posicion :51
comilla:4 posicion :127
comilla:5 posicion :144
comilla:6 posicion :156
comilla:7 posicion :163
comilla:8 posicion :228
comilla:9 posicion :245
comilla:10 posicion :259
comilla:11 posicion :266
comilla:12 posicion :333
comilla:13 posicion :350
comilla:14 posicion :376
comilla:15 posicion :383
comilla:16 posicion :462
                                                 Press any key to continue
\___resultado del 2do for______/
imprimió solo espacios en blanco

 :o cuando pruebo ambos for's por separado si funcionan, pero juntos no.

Graciasss


« Última modificación: 14 Abril 2013, 16:37 por franfis » En línea

franfis

Desconectado Desconectado

Mensajes: 244



Ver Perfil
Re: lectura y escritura de ficheros
« Respuesta #1 en: 15 Abril 2013, 18:02 »

Si no lo explique bien por favor pregunten  >:(


En línea

Puntoinfinito


Desconectado Desconectado

Mensajes: 919


#! /win/archlinux


Ver Perfil WWW
Re: lectura y escritura de ficheros
« Respuesta #2 en: 15 Abril 2013, 18:37 »

Supongo que por posiciones las entiendes como caracteres, letras.

Yo te recomiendo el siguiente uso:

Código
  1. char total[1026];
  2.        ifstream archivo("archivo.txt",ios::in);
  3.        while (!archivo.eof()) {
  4.                archivo.getline(total,sizeof(total));
  5.                cout << total << "\0";
  6.        }
  7.        return 0;

Que vaya leyendo linea por linea. Y luego tu ya le puedes a partir de cuando o cuales caracteres debe imprimir-guardar.

En línea

AHORA EN SOFTONIC || CLICK HERE!!
Base64: QWNhYmFzIGRlIHBlcmRlciAxIG1pbnV0byBkZSB0dSB2aWRhLiBPbOkh



HACK AND 1337 : http://hackandleet.blogspot.com
WEBSITE: http://www.infiniterware.
franfis

Desconectado Desconectado

Mensajes: 244



Ver Perfil
Re: lectura y escritura de ficheros
« Respuesta #3 en: 15 Abril 2013, 19:47 »

Gracias, pero el archivo que intento leer es del tipo;
xxxxxxxxxxxxxxxxxx"xccvcx"xxxxxxx"nombre1"x
xxxx"dhfdhj"xxxx"nombre2"xxxxxxxxxxxxxxxxxxx
xxxxxxxxxxx"sdfsgtj"xx"nombre3"xxxxxxxxxxxxxx
xx"swew"xx"nombre4"xxxxxxxxxxxxxxxxxxxxxxxx
xxxxxxxxxxxxxxxxxxxxxxxxx"sretwt"xx"nombre4"x

etc...

Lo que intento leer es; nombre1, nombre2, nombre3, nombre4, nombre5. Es por eso que primero leo la posición de las comillas y luego lo que hay entre ellos, por ejemplo

leer entre las comillas 3 y 4
leer entre las comillas 7 y 8
leer entre las comillas 11 y 12
leer entre las comillas 15 y 16 etc,etc..

por eso ¿como haria? para leer por ejemplo nombre4 teniendo como datos las posiciones de las comillas entre las que se encuentra.
« Última modificación: 15 Abril 2013, 21:44 por franfis » En línea

franfis

Desconectado Desconectado

Mensajes: 244



Ver Perfil
Re: lectura y escritura de ficheros
« Respuesta #4 en: 17 Abril 2013, 15:09 »

La solución era poner ;

letras.close();
fstream letras2("Letras.txt", ios::in|ios::out);

después del primer for  ;D
En línea

rir3760


Desconectado Desconectado

Mensajes: 1.639


Ver Perfil
Re: lectura y escritura de ficheros
« Respuesta #5 en: 20 Abril 2013, 17:13 »

La solución era poner ;

letras.close();
fstream letras2("Letras.txt", ios::in|ios::out);

después del primer for  ;D
El problema con el fragmento que publicas es tratar de leer 2001 caracteres sin importar cuantos realmente hay en el archivo. Si contiene menos la función get eventualmente falla activando la bandera de fin de archivo y eso causa que, a partir de ese punto, todas las llamadas a seekg fallen.

Por eso el segundo bucle no funciona correctamente.

Para solucionarlo se debe desactivar esa bandera. Una forma algo extrema es mediante la operación que mencionas: cerrar el archivo y abrirlo de nuevo.

Un saludo
En línea

C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
cypascal

Desconectado Desconectado

Mensajes: 42


Ver Perfil WWW
Re: lectura y escritura de ficheros
« Respuesta #6 en: 20 Abril 2013, 19:16 »

No se si es exactamente esto lo que quieres. El código que te dejo aquí guarda los fragmentos entrecomillados de un fichero, en un fichero de texto de salida. He hecho la prueba con el fragmento que dejaste y parece que funciona.

Te lo dejo en este blog: http://cypascal.blogspot.com.es/2013/04/lectura-palabras-entrecomilladas-en-cc.html

Y aquí también:

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

int main(void)
{
 FILE *dat,*dat2;
 char nombre[50],c;
 
 printf("Nombre del fichero a leer: "); scanf("%s", &nombre);
 
 
 if (fopen(nombre,"r")==NULL)
  printf("\nEl fichero no existe.\n\n");
 else
    {
  dat=fopen(nombre,"r");
  dat2=fopen("salida.txt","w");
  fscanf(dat,"%c",&c);
  while (!feof(dat))
  {
   if (c=='"')
   {
                fscanf(dat,"%c",&c);      
                while ((!feof(dat))&&(c!='"'))
                {
                      /*Aquí es donde se guardan los datos entre comillas*/
                      /*En este caso imprime en fichero de texto*/
                      fprintf(dat2,"%c",c);
                      fscanf(dat,"%c",&c);
                }
                fprintf(dat2,"\n");            
            }
   fscanf(dat,"%c",&c);
  }
  fclose(dat);
 }
 return 0;
}

Salu10

Edito: No me di cuenta que lo tenías en C++, sorry...
En línea

Problemas interesantes de programación en C/C++ y Pascal en:
BLOG C/C++


WWW.CYPASCAL.BLOGSPOT.COM.ES
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines