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]
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?
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
Archivo debería ser una int, no una string ;)
Peta igualmente!
que cosa mas rara :(
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
El fichero prg o el fichero txt que intento leer?
Saludos y mil gracias
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
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
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.
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
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
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
Lo raro de todo,es que solo le cambio el nombre al archivo,por todo lo demás es el mismo :-(
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$
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...
Sé que existe File_exists para comprobar que existe un archivo,pero para comprobar si se ha abierto cual sería?
luego del open
if ( !archivo ) // o archivo == 0
aca fallo!
end
Gracias Splinter!
de nada...