Bennu Game Development

Foros en Español => Mesa de Ayuda => Topic started by: Goku jr on November 15, 2017, 02:24:29 PM

Title: Esto me explota xD
Post by: Goku jr on November 15, 2017, 02:24:29 PM
Buenas ha todos!
ya estoy aqui de nuevo,necesito un help!

resulta que tengo este codigo...
begin
archivo=fopen("archivo.txt",o_Read); //lee archivo de texto con las rutas de los ficheros
//say("leyendo... : "+archivo]);  //Muestra por consola el resultado

//------------------------------------------------------------//
// FUNCIONES A REALIZAR SEGUN LO QUE LEA                      //
//------------------------------------------------------------//
repeat
linea=fgets(archivo);
       if(linea=="txt1");
       say("mensaje de bienvenida");
       end
    until(feof(archivo));
fclose(archivo);
end

Pues el programa compila,se ejecuta y peta cerrandose el programa con el tipico error de windows..
tanto los nombres linea,como archivo son variables globales..
Alguna idea?
Saludos y gracias[/code]
Title: Re:Esto me explota xD
Post by: panreyes on November 15, 2017, 02:36:25 PM
Con exactamente este código me ha funcionado correctamente:

import "mod_key"
import "mod_file"
import "mod_say"

Private
int archivo;
string linea;
Begin
archivo=fopen("archivo.txt",o_Read); //lee archivo de texto con las rutas de los ficheros
repeat
linea=fgets(archivo);
if(linea=="txt1");
   say("mensaje de bienvenida");
   while(!key(_esc)) frame; end
end
until(feof(archivo));
fclose(archivo);
End


¿Es posible que estés definiendo línea como int en vez de como string?
Title: Re:Esto me explota xD
Post by: Goku jr on November 15, 2017, 02:46:32 PM
Quote from: panreyes on November 15, 2017, 02:36:25 PM
Con exactamente este código me ha funcionado correctamente:

[quote]import "mod_key"
import "mod_file"
import "mod_say"

Private
   int archivo;
   string linea;
Begin
   archivo=fopen("archivo.txt",o_Read); //lee archivo de texto con las rutas de los ficheros
   repeat
      linea=fgets(archivo);
      if(linea=="txt1");
         say("mensaje de bienvenida");
         while(!key(_esc)) frame; end
      end
   until(feof(archivo));
   fclose(archivo);
End


¿Es posible que estés definiendo línea como int en vez de como string?

Nop,esta como string
te dejo el codigo entero
program holamundo;
import "mod_key";
import "mod_say";
import "mod_file";


include "BNPwriter.prg"; //incluye funciones de escritura
// include "ent.prg"; // datos de lectura

global
string linea;


string archivo;  //indicador del archivo que se leera
int fileget;
string dirfiles="";
begin
archivo=fopen("archivo.txt",o_Read); //lee archivo de texto con las rutas de los ficheros
//say("leyendo... : "+argv[1]);  //Muestra por consola el resultado

//------------------------------------------------------------//
// FUNCIONES A REALIZAR SEGUN LO QUE LEA                      //
//------------------------------------------------------------//
repeat
linea=fgets(archivo);
       if(linea=="txt1");
       say("mensaje de bienvenida");
       end
    until(feof(archivo));
fclose(archivo);
end

y en el BNPwriter.prg

// FICHERO ESCRIBE BNP //
global
byte datos; // datos a copiar
archivo2;

Pero vamos esto ultimo no lo utilizo aun xD
Title: Re:Esto me explota xD
Post by: panreyes on November 15, 2017, 02:53:42 PM
Archivo debería ser una int, no una string ;)
Title: Re:Esto me explota xD
Post by: Goku jr on November 15, 2017, 03:01:58 PM
Peta igualmente!
que cosa mas rara :(
Title: Re:Esto me explota xD
Post by: panreyes on November 15, 2017, 03:19:56 PM
Me funciona correctamente (sin el include de BNPWriter). Ni idea de por qué te falla.
¿Es posible que tu fichero esté codificado en UTF8 con BOM? Esto lo puedes ver utilizando notepad++ y el menú de Codificación.

Suerte con ello
Title: Re:Esto me explota xD
Post by: Goku jr on November 15, 2017, 03:27:14 PM
El fichero prg o el fichero txt que intento leer?
Saludos y mil gracias
Title: Re:Esto me explota xD
Post by: Goku jr on November 15, 2017, 03:32:24 PM
Cambiando el nombre del archivo.txt ,ya se ejecuta el programa,ahora el problema es que no me muestra el Say,pero supongo que se ya sera otro fallo xD

Title: Re:Esto me explota xD
Post by: KeiDash on November 15, 2017, 07:31:10 PM
Tienes un bucle Repeat > Until y te falta el frame; dentro, es solo eso

begin
archivo=fopen("archivo.txt",o_Read); //lee archivo de texto con las rutas de los ficheros
//say("leyendo... : "+archivo]);  //Muestra por consola el resultado

//------------------------------------------------------------//
// FUNCIONES A REALIZAR SEGUN LO QUE LEA                      //
//------------------------------------------------------------//
repeat
       linea=fgets(archivo);
       if(linea=="txt1");
            say("mensaje de bienvenida");
       end
       frame;
until(feof(archivo));
fclose(archivo);
end
Title: Re:Esto me explota xD
Post by: panreyes on November 15, 2017, 07:47:25 PM
Quote from: KeiDash on November 15, 2017, 07:31:10 PM
Tienes un bucle Repeat > Until y te falta el frame; dentro, es solo eso

No es necesario dicho frame al tratarse de una lectura de un archivo.
Title: Re:Esto me explota xD
Post by: Drumpi on November 16, 2017, 12:50:21 AM
Haz una cosa: en lugar de imprimir "mensaje de bienvenida", imprime la línea del fichero de texto. No sé por qué pero me parece que puede tratarse o bien de un problema de intentar leer más allá del final del fichero (sí, pese a FEOF, es una función que, históricamente, ha dado muchos problemas, especialmente con el rollo de fin de linea y fichero entre Windows y Linux), o de que te esté leyendo mal las líneas.

Al menos, saber que realmente estás leyendo el fichero y no dando vueltas sin sentido.
Cuando Bennu se cierra es un problema de punteros. Si no es tuyo, tienes que pensar qué función puede estar usando punteros internamente, y puede provocar un problema gordo si no le pasas valores válidos (en tu caso, que FEOF no devuelva EndOfFile y el bucle siga intentando leer). Las strings, signals a valores no válidos, o delete_text con valores incorrectos suelen ser los "sospechosos habituales".
Eso sí: el 95% de los problemas es culpa tuya, no de Bennu. Corroborado y certificado tras años de experiencia :D
Title: Re:Esto me explota xD
Post by: Goku jr on November 16, 2017, 12:41:28 PM
Despues de nuevas pruebas,ya me funciona,pero es curioso.. si en vezde el nombre "archivo.txt" pongo "Install.txt" con exactamente los mismo datos en los dos archivos,con el segundo peta,en cambio con el primero funciona.
que tiene la palabra install para que pete todo?

Saludos y gracias


Title: Re:Esto me explota xD
Post by: KeiDash on November 16, 2017, 01:57:42 PM
Quote from: panreyes on November 15, 2017, 07:47:25 PM
Quote from: KeiDash on November 15, 2017, 07:31:10 PM
Tienes un bucle Repeat > Until y te falta el frame; dentro, es solo eso

No es necesario dicho frame al tratarse de una lectura de un archivo.

Cierto! Fallo mío.

Curioso lo del nombre del fichero. Será por el tipo de codificación de fichero?? ANSI, UTF-8, Windows-1521??....

Lo comento por que la lectura según la codificación puede hacer que pete el "sistema" de lectura. A mi me ha pasado en el trabajo cuando nos mandan ficheros xml con codificación ANSI, cuando la aplicación solo acepta UTF-8
Title: Re:Esto me explota xD
Post by: Goku jr on November 16, 2017, 02:35:20 PM
Lo raro de todo,es que solo le cambio el nombre al archivo,por todo lo demás es el mismo :-(
Title: Re:Esto me explota xD
Post by: SplinterGU on November 16, 2017, 05:30:44 PM
Goku Jr.

Lo que sucede es que no existe archivo.txt (o tiene un espacio o algun caracter que no le gusta o permisos o algo), falla la apertura y no estas comprobando que asi sea... te mandas directo a leer...

es cierto lo que dices del crash, si no chequeas que se haya abierto el archivo...

pruebas


splinter@splinter-C500:~/bennugd.bug/crash_file$ bgdc holamundo.prg
BGDC 1.0.0 (Oct 16 2017 05:22:43)
Bennu Game Development Compiler

Copyright (c) 2006-2017 SplinterGU (Fenix/BennuGD)
Copyright (c) 2002-2006 Fenix Team (Fenix)
Copyright (c) 1999-2002 Jos� Luis Cebri�n Pag�e (Fenix)

/home/splinter/bennugd.bug/crash_file/holamundo.prg:18: warning: implicit conversion (INTEGER to STRING).

File holamundo.dcb compiled (24687 bytes):

  Processes                     1
  Global data                 176 bytes
  Local data                   44 bytes
  Private data                  0 bytes
  Public data                   0 bytes
  Code                        200 bytes
  System processes             28
  Globals vars                 12
  Locals vars                   7
  Private vars                  0
  Publics vars                  0
  Identifiers                 344
  Structs                       1
  Strings                      11 (106 bytes)

splinter@splinter-C500:~/bennugd.bug/crash_file$ bgdi holamundo
Violación de segmento                                                                                                                                                                           
splinter@splinter-C500:~/bennugd.bug/crash_file$ echo "txt1" > archivo.txt
splinter@splinter-C500:~/bennugd.bug/crash_file$ bgdi holamundo
mensaje de bienvenida
splinter@splinter-C500:~/bennugd.bug/crash_file$
Title: Re:Esto me explota xD
Post by: SplinterGU on November 16, 2017, 05:34:02 PM
el warning de "/home/splinter/bennugd.bug/crash_file/holamundo.prg:18: warning: implicit conversion (INTEGER to STRING)." es porque la variable archivo es string, como te dijo panreyes... si bien eso no afecta a la funcionalidad, si mete mas procesamiento, lo ideal seria que fuera integer... pero eso es otro tema, no tiene que ver con el crash, el crash es porque no puede abrir el archivo...
Title: Re:Esto me explota xD
Post by: Goku jr on November 16, 2017, 05:54:58 PM
Sé que existe File_exists para comprobar que existe un archivo,pero para comprobar si se ha abierto cual sería?
Title: Re:Esto me explota xD
Post by: SplinterGU on November 16, 2017, 05:59:58 PM
luego del open

if ( !archivo )  // o archivo == 0
      aca fallo!
end
Title: Re:Esto me explota xD
Post by: Goku jr on November 16, 2017, 06:15:33 PM
Gracias Splinter!
Title: Re:Esto me explota xD
Post by: SplinterGU on November 16, 2017, 06:18:15 PM
de nada...