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

 

 


Tema destacado: Rompecabezas de Bitcoin, Medio millón USD en premios


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  [C++]¿Cómo leo y almaceno una matriz de texto de un fichero en una tabla?
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [C++]¿Cómo leo y almaceno una matriz de texto de un fichero en una tabla?  (Leído 2,150 veces)
DeIMachine

Desconectado Desconectado

Mensajes: 41


Ver Perfil
[C++]¿Cómo leo y almaceno una matriz de texto de un fichero en una tabla?
« en: 11 Enero 2016, 14:49 pm »

Código
  1. #include <iostream>
  2. #include <fstream>
  3.  
  4. using namespace std;
  5.  
  6. const int MAX_LONG_LINEA=80;
  7. const int MAX_LINEAS=3;
  8.  
  9. struct Subtitulo{
  10.    char texto[MAX_LINEAS][MAX_LONG_LINEA];
  11. };
  12. //Creo la matriz de texto 3x80
  13. Subtitulo definir(char texto[][MAX_LONG_LINEA]){
  14.    Subtitulo S;
  15.     for(int filas=0;filas<MAX_LINEAS;filas++){
  16.        for(int columnas=0;columnas<MAX_LONG_LINEA;columnas++){
  17.            S.texto[filas][columnas]=texto[filas][columnas];
  18.        }
  19.    }
  20.    return S;
  21. }
  22. //Funcion que leera los parrafos de texto maximo de 3 lineas y 80 caracteres por línea:
  23. void leerSubtitulo(char NombreFichero[], Subtitulo S[]){
  24.    ifstream f;
  25.    f.open(NombreFichero);
  26.    char linea[MAX_LONG_LINEA];
  27.    for(int i=0;i<MAX_LINEAS;i++){
  28.        int k=0;
  29.        while(k<MAX_LINEAS && linea[0]!='\0'){
  30.                getline(linea,MAX_LONG_LINEA);
  31.                k++;
  32.        }
  33.    }
  34. }
  35.  
Mi duda está ahí: Cómo puedo guardar cada párrafo de texto max 3x80 en la tabla S[], la separación entre cada párrafo(súbtitulo) es de una línea en blanco de ahí que haya creado esa condición en el while, no sé como podía juntar las líneas, saludos.


En línea

La tradición es la mortaja de la sabiduría.
ivancea96


Desconectado Desconectado

Mensajes: 3.414


ASMático


Ver Perfil WWW
Re: [C++]¿Cómo leo y almaceno una matriz de texto de un fichero en una tabla?
« Respuesta #1 en: 11 Enero 2016, 15:58 pm »

Coloca un ejemplo de fichero.


En línea

DeIMachine

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Re: [C++]¿Cómo leo y almaceno una matriz de texto de un fichero en una tabla?
« Respuesta #2 en: 11 Enero 2016, 17:21 pm »

Los primeros números son el numero de subtitulo, y luego ya vendría la matriz de texto en la que saldrían los tiempos en los que aparecen y finalmente lo que se dice en ellos. Este sería un ejemplo del fichero:
1
00:02:24,000 --> 00:02:25,600
Rosebud.

2
00:03:02,000 --> 00:03:04,080
News on the March.

3
00:03:23,000 --> 00:03:24,960
Legendary was the Xanadu...

4
00:03:25,000 --> 00:03:28,180
...where Kubla Khan decreed
his stately pleasure dome.



En línea

La tradición es la mortaja de la sabiduría.
MAFUS


Desconectado Desconectado

Mensajes: 1.534



Ver Perfil
Re: [C++]¿Cómo leo y almaceno una matriz de texto de un fichero en una tabla?
« Respuesta #3 en: 11 Enero 2016, 18:07 pm »

No se C++, pero por lo que acabo de leer getline espera de primer argumento el objeto archivo, en tu caso f, y de segundo argumento la variable que va a contener la cadena.

Después,  por como está configurado el archivo de subtítulos deberás guardar en la variable subtítulo o descartar tanto el número de subtítulo, que podrías usar para hacer un array con todos los subtítulos del archivo, y los tiempos de visualización, que los necesitarás para mostrar en pantalla. Una vez conseguidos o descartados estos dos datos es cuándo vienen las tres líneas que deseas guardar.

Ahora ya podemos ver que tu función leerSubtitulo no puede funcionar, tal y como está construida.
Veo que te han dado el prototipo de la función
Código
  1. void leerSubtitulo(char NombreFichero[], Subtitulo S[])
Subtitulo S[] te indica que recibes un array de subtítulos y debes rellenarlo en la función. ¿Cómo?
Utiliza el índice de subtítulo proporcionado por el archivo, conviértelo en número y réstale 1. Este será tu índice para guardar el dato en el array.
Después viene tu base de tiempos. Si no la vas a utilizar la lees pero no la guardas en ningún sitio, así el contador del fichero se moverá hasta la primera línea de texto.
Ahora lees las líneas de texto, hasta tres o hasta que obtengas una línea vacía. Para cada línea, menos la vacía, vas guardando en cada línea de tu variable de Subtítulo la línea leía.
Si y solo si has leído del fichero tres líneas con texto debes seguir leyendo y, esta vez, descartando líneas de texto del archivo hasta que encuentres una línea vacía.
Repite hasta llegar al final del fichero.

No se C++ y ahora no me pondré a mirar la biblioteca estándar del lenguaje, así que dejo la codificación para ti. Ya nos dirás como te ha ido.
En línea

DeIMachine

Desconectado Desconectado

Mensajes: 41


Ver Perfil
Re: [C++]¿Cómo leo y almaceno una matriz de texto de un fichero en una tabla?
« Respuesta #4 en: 14 Enero 2016, 13:41 pm »

Perdón por reabrir el tema pero ya tendría mi función lista y no sé porque cuando pido que escriba la matriz de texto me devuelve una dirección a la memoria https://gyazo.com/9743f41d62e11d0e30e0a14db705abf5:
Código
  1. void leerSubtitulos(const char NombreFichero[],Subtitulo S[]){
  2.    ifstream f;
  3.    f.open(NombreFichero);
  4.    if(f.is_open()){
  5.        for(int i=0;i<contarSubtitulos(NombreFichero);i++){
  6.            int horas,minutos,seg,mil_seg,numSub;
  7.            char car;
  8.            Tiempo inicial, final;
  9.            char linea[MAX_LONG_LINEA];
  10.            char texto[MAX_LINEAS][MAX_LONG_LINEA];
  11.            int nLineas=0;
  12.            f >> numSub;
  13.            f >> horas >> car >> minutos >> car >> seg >> car >> mil_seg;
  14.            inicial=definir(3600*horas+60*minutos+seg,mil_seg);
  15.            f >> car >> car >> car >> horas >> car >> minutos >> car >> seg >> car >> mil_seg;
  16.            final=definir(3600*horas+60*minutos+seg,mil_seg);
  17.            f.get();
  18.            f.getline(texto[nLineas],MAX_LONG_LINEA);
  19.            while(linea[0]!='\0'){
  20.                nLineas++;
  21.                f.getline(texto[nLineas],MAX_LONG_LINEA);
  22.            }
  23.            S[i]=definir(numSub,nLineas,texto,inicial,final);
  24.        }
  25.    }
  26.    else{
  27.        cerr << "No se ha podido abrir el archivo." << endl;
  28.    }
  29. }
  30.  
  31. int main(){
  32.    Subtitulo T[contarSubtitulos("Fichero.txt")];
  33.    leerSubtitulos01("Fichero.txt",T);
  34.    cout << T[0].texto;
  35. }
  36.  
  37.  
En línea

La tradición es la mortaja de la sabiduría.
Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Como abrir y leer un fichero de texto en visual basic?
Programación Visual Basic
El_Marine 4 1,841 Último mensaje 29 Septiembre 2006, 13:13 pm
por WarGhost
Leer solo una parte de un fichero de texto, ¿como?
Scripting
yeahhh 3 6,096 Último mensaje 9 Junio 2010, 22:58 pm
por leogtz
como visualizar matriz en forma de tabla? (Solucionado)
Programación C/C++
;c1v!c 5 73,923 Último mensaje 8 Septiembre 2011, 18:00 pm
por ;c1v!c
Como almaceno un dato en un txt en java?
Java
ALCales 2 4,930 Último mensaje 26 Mayo 2012, 17:41 pm
por Valkyr
Rellenar matriz con numeros de un fichero de texto en C
Programación C/C++
mariovich12 0 1,084 Último mensaje 18 Junio 2017, 18:10 pm
por mariovich12
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines