Esto me explota xD

Started by Goku jr, November 15, 2017, 02:24:29 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.

Goku jr

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]

panreyes

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?

Goku jr

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

panreyes

Archivo debería ser una int, no una string ;)


panreyes

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

Goku jr

El fichero prg o el fichero txt que intento leer?
Saludos y mil gracias

Goku jr

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


KeiDash

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

panreyes

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.

Drumpi

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
Hala, como con 1001 procesos sólo va a 9 FPS, vamos a meterle 32 veces más, a ver si revienta.
(Drumpi epic moment)

Goku jr

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



KeiDash

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

Goku jr

Lo raro de todo,es que solo le cambio el nombre al archivo,por todo lo demás es el mismo :-(

SplinterGU

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$
Download Lastest BennuGD Release: http://www.bennugd.org/node/2