• Jueves 28 de Marzo de 2024, 19:01

Autor Tema:  [Dudas] Sobre lectura de ficheros y arrays  (Leído 1856 veces)

cotolon

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
[Dudas] Sobre lectura de ficheros y arrays
« en: Viernes 23 de Noviembre de 2012, 16:36 »
0
Hola Buenos tardes a todos! Tengo 2 dudas y espero puedan resolver, es sobre ficheros. Aquí mi primera duda:

1 - Resulta que tengo un archivo.txt con esto:

Código: [Seleccionar]
4
10
6
2
1
20
-102
43
23
65
2
10
1
-5
-10
102
85
97

Son varios números xd. Y este es mi código (funciona bien):

Código: C++
  1. #include <iostream>
  2. #include <stdio.h>
  3.  
  4. using namespace std;
  5.  
  6. #define cantidad_fila_imprimir 7
  7.  
  8. int main()
  9. {
  10.     FILE *arch_lectura;
  11.  
  12.     if ((arch_lectura = fopen("archivo.txt", "r+"))== NULL)
  13.         cout << "El Archivo no se puede leer." << endl;
  14.     else{
  15.         int cantidad = 0, numero, i = 0, j = 0;
  16.         while(fscanf(arch_lectura, "%d", &numero) != EOF) cantidad++; //cantidad elementos
  17.         rewind(arch_lectura); //Cursor al principio
  18.         int Arr[cantidad]; //Creamos el array
  19.         while(fscanf(arch_lectura, "%d", &Arr[i]) != EOF) i++; //asignamos al array cada elemento
  20.         fclose(arch_lectura); //cerramos archivo.
  21.         //Mostramos array:
  22.         for (i = 0; i<cantidad; i++){
  23.             cout << Arr[i] << "  ";
  24.             j++;
  25.             if (j == cantidad_fila_imprimir) {j = 0; cout << endl;}
  26.         }
  27.     }
  28.  
  29.     return 0;
  30. }
  31.  
  32.  

Bueno este código básicamente abre el archivo.txt para lectura, primero cuenta los elementos, posicionamos el cursor al inicio con rewind y luego los lee de nuevo ya que creamos un array con la cantidad de elementos y se los asignamos, y buno después los muestra. Ahora Mi pregunta:

¿Hay alguna forma de almacenar esos datos en algún array (para despues ordenarlos buscar menor mayor o algo así) solamente procesando el archivo una vez (No sé si con punteros o "dinámicamente" se pueda)? (Y no 2 como lo hice yo)

Ahora mi segunda pregunta:

2 - Suponiendo que tengo un archivo2.txt con esto:

Código: [Seleccionar]
2 5
3 3 4
5 5
6 10 8 6

Resulta que cada vez que uso "fscanf" automáticamente me hace un salto de linea, como podría yo leer los datos ?
Por ej:

leo el 2, y en vez de saltar de linea el cursor de mantiene al inicio del 5, y luego leo el 5. Y de alguna forma, que supongo de manera manual, salta de línea y sigue leyendo el número 3, luego el otro 3, luego el 4 y un salto de línea, y así...

Gracias ! Saludos!

ProfesorX

  • Moderador
  • ******
  • Mensajes: 796
  • Nacionalidad: mx
    • Ver Perfil
Re:[Dudas] Sobre lectura de ficheros y arrays
« Respuesta #1 en: Domingo 25 de Noviembre de 2012, 07:23 »
0
Hola cotolon, te contesto

1. Si se puede hacer lo que dices, y tal como mencionas se puede hacer con punteros y memoria dinamica, busca informacion sobre listas enlazadas ordenadas

2. No se en que forma estas usando fscanf, porque fscanf no hace un salto de linea automatico, sino que en realidad funciona tal como quieres que funcione, o sea, que trata los espacios y los salto de linea como separador entre datos.

Te dejo un programa que escribe los 11 numeros de tu ejemplo en un archivo de texto, los lee en un vector, y luego imprme el vector en pantalla, funciona en Visual C++, pero no creo que tengas problemas con otros compiladores:


Código: [Seleccionar]
#include <cstdio>

int vector[11];
FILE * pFile;
int i;

int main()
{

    pFile = fopen ("archivo2.txt","w+");
    fprintf(pFile, "2 5\n");
    fprintf(pFile, "3 3 4\n");
    fprintf(pFile, "5 5\n");
    fprintf(pFile, "6 10 8 6\n");
    rewind (pFile);
    for (i=0; i <= 10; i++)
        fscanf (pFile, "%d", &vector[i]);
    fclose (pFile);

    for (i=0; i <= 10; i++)
        printf("%d ", vector[i]);

    printf("\n");

    return 0;
}

NOTA:
==================================================================
Este foro es para ayudar, aprender, compartir... usenlo para eso,
NO SE RESUELVEN DUDAS POR MENSAJE PRIVADO Y MENOS POR CORREO
==================================================================

cotolon

  • Nuevo Miembro
  • *
  • Mensajes: 12
    • Ver Perfil
Re:[Dudas] Sobre lectura de ficheros y arrays
« Respuesta #2 en: Lunes 26 de Noviembre de 2012, 02:31 »
0
gracias! de a poco lo veré entonces xd