• Lunes 29 de Abril de 2024, 06:56

Autor Tema:  Re: Copia de un texto a una matriz  (Leído 1636 veces)

Felip_Neo

  • Nuevo Miembro
  • *
  • Mensajes: 4
    • Ver Perfil
Re: Copia de un texto a una matriz
« en: Jueves 30 de Mayo de 2002, 23:49 »
0
Hola a todos:

Tengo un problemita con un programa. Me gustaria saber si alguien me podria decir cómo, de un texto de formato .txt, lo puedo leer, copiarlo y almacenarlo en una matriz de caracteres
y a demas de eso, cómo una determinada seccion de ese texto almacenado en esa matriz, la puedo llamar para expresarla en pantalla (graficos en win32)

En realidad lo que tengo que hacer es un panel electronico que se desplazan mensajes y en un fichero de texto a parecen las letras hechas con asteriscos en grande, entonces quiero saber como llamar a cada letra que se pida en forma de asteriscos para que se muestren en el panel

Ojala alguien me pueda decir algo, ya que es muy importante.

Muchas gracias

P.D.: Soy principiante en esto y no entiendo cosas como malloc y parecidos

Gracias denuevo

dheak

  • Miembro activo
  • **
  • Mensajes: 62
    • Ver Perfil
Re: Copia de un texto a una matriz
« Respuesta #1 en: Viernes 31 de Mayo de 2002, 21:44 »
0
Hla felipe! Creo que lo que preguntas seria algo asi.

#include <stdio.h>
#define n mucho /* donde mucho es un numero mu gordo xDD */

void main()
{
char texto[n];
char caracter;
int i;
FILE *p;

/* abrir el fichero */
p = fopen("ARCHIVO.TXT", "r");

/* leer caracteres hasta fin de fichero */
while ((caracter = getc(p)) != EOF)
{
texto = caracter;
i++;
}

/* cerrar el fichero */
fclose(p);
}

Si te has fijado esto no vale pa nada o mas bien pa poco, ya que el vector texto es definido estaticamente y tu no sabes (al menos a priori) cuantos caracteres va a tener el fichero. Una solucion es hacerlo mediante listas enlazadas. Es decir, crear un struct asi:

typedef struct lista
{
char dato;
struct lista *next;
} car;

E ir creando en cada pasada del bucle while un caracter con un malloc. Mas o menos asi:

p->next = (struct lista *) malloc(sizeof(struct lista));
p->dato = caracter;
p = p->next;

Aunque piensa que p debe estar inicializado y debes guardarte el primer malloc que hagas en algun lao aparte porque sino no sabras donde empieza tu lista.

Espero que esto te haya servido.

Respecto a tu segunda cuestion no se muy bien que quieres hacer.

Saludos.

TxaKy

  • Nuevo Miembro
  • *
  • Mensajes: 11
    • Ver Perfil
Copia de un texto a una matriz
« Respuesta #2 en: Sábado 1 de Junio de 2002, 15:13 »
0
Una forma un poco mas sencilla que lo de la lista enlazada es mirar el tamaño del fichero antes de leer.

Algo como esto:


void main()
{
char *texto;
FILE *pf;
int len;

pf = fopen("ARCHIVO.TXT", "r");

//me pongo al final y miro posicion
fseek(pf, 0, SEEK_END);
len=ftell(pf);

//me pongo al principio de nuevo
rewind(pf);

//reservo memoria
texto=(char *)malloc(len);

//leo todo el fichero
fread(texto, 1, len, pf);

//haces lo que quieras con el texto

free(texto);
fclose(pf);
}