[ Foro de Pascal ]
Bueno, lo que pasa es lo siguiente. Yo tengo esta expresion:
if (linea=) then
exito3:= true
else
exito3:= false;
Donde pone (linea=) despues del igual yo quiero poner los caracteres de la tabla ascii. Es decir, he estado viendo la tabla ascii y he visto que los caracteres (me refiero a los numeros, mayuculas, minusculas y caracteres especiales como el punto, la coma, etc.) van desde el 33 hasta el 126 (#33..#126).
Yo lo que quiero es poner que linea= a todos esos caracteres pero no se como poner eso.
Alguna idea ??
Por cierto linea es del tipo string.
Usando conjuntos y utilizando una variable "letra" del tipo char, se hace de la siguiente manera:
var
letra: char;
exito3: boolean;
Begin
write('Introduzca una letra: '); readln(letra);
if letra in [#33..#126] then {Aqui usamos conjuntos}
exito3:= true
else
exito3:= false;
readln;
End.
Saludos.
Eso esta bien, pero en este caso no se si sirve.
Te dejo aqui mas cosas:
var
exito3: boolean;
fichero: text;
linea: string;
begin
assign(fichero, 'indice.txt');
{$I-}
reset(fichero);
{$I+}
if (ioResult=0) then
begin
readln(fichero, linea);
if (linea=) then
exito3:= true
else
exito3:= false;
end
else
exito3:= false;
close(fichero);
end;
Lo que tengo que hacer es, primero comprobar que el fichero de texto "indice.txt" existe. Si no existe "exito3" es false (exito3=false), pero por el contrario si existe tengo que trabajar con él.
Si el fichero de texto "indice.txt" existe, lo que hago es abrirlo para lectura y leo la 1º linea. Despues de leer la 1º linea compruebo si hay algo escrito. Si hay algo escrito exito3=true, pero si no hay nada exito3=false.
El problema es que para hacer esto no se si esta bien asi el ejercicios, pero donde pone if (linea=) then, despues del igual me falta algo. Me pueden ayudar ??
Enfocaste mal el problema. Es mucho más fácil solucinarlo de otro modo: en vez de estar pendiente del código ASCII, es más sencillo preguntarte si linea es igual a vacío, de ser cierto exito3 valdrá true, caso contrario valdrá false. El codigo corregido es el siguiente, tú te encargarás de probarlo:
var
exito3: boolean;
fichero: text;
linea: string;
begin
assign(fichero, 'indice.txt');
{$I-}
reset(fichero);
{$I+}
if (ioResult=0) then
begin
readln(fichero, linea);
if (linea='') then {entre '' no hay espacio en blanco}
exito3:= true
else
exito3:= false;
end
else
exito3:= false;
close(fichero);
end;
O sea
if (linea='') then
exito3:=true
else
exito3:=false;
Con esto lo que estoy haciendo es si en linea no hay nada exito3 es true pero si hay algo como un numero, una letra lo que sea es false.
Vale, pero ahora tengo una duda.
Yo lo he probado, pero prefiero estar seguro.
Y si en linea hay un espacio eso seria true o false ??
A mi me sale que es false y lo que yo quiero es que cuando es solo un espacio que sea tambien true.
Para eso solo tengo que añadir esto:
if ((linea='') or (linea=' ')) then ???
Ya no hace falta ayuda. Mi problema ya lo he resuelto y gracias por la ayuda.
¿Cómo lo solucionaste?.
Saludos.
Bueno, la verdad no es que lo haya solucionado. Lo que pasa es que me equivocado. Resulta que la solucion que me has dado me sirve, pero esta al rever.
Cuando linea='' exito es false y cuando linea<>'' exito es true. Y resulta que lo tenia al reves.
Tu pregunta entonces no tiene mucho que ver con el código ASCII, sino con si una cadena está vacía o no.
En la medida de lo posible, no uses variables como "exito", sino que tengan nombres que indiquen mejor lo que pretendes descubrir, como "lineaVacia" o "lineaContieneTexto".
Piensa que un programa se escribe una sola vez, pero se lee muchas más, especialmente en caso de que algo no funcione correctamente. Por eso es fundamental buscar la legibilidad.
Si tienes razon. Ahora mismo estoy cambiando cosas en mi programa y voy a cambiar tambien el nombre de alguna variables.
(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)