[ Foro de Pascal ]

Tabla Ascii

22-Jan-2013 13:38
Antonio Rodrigues
9 Respuestas

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.


22-Jan-2013 18:17
Luis Torres (+12)

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.


22-Jan-2013 18:48
Antonio Rodrigues

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 ??


23-Jan-2013 00:51
Luis Torres (+12)

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;
 

23-Jan-2013 02:15
Antonio Rodrigues

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 ???    


23-Jan-2013 18:44
Antonio Rodrigues

Ya no hace falta ayuda. Mi problema ya lo he resuelto y gracias por la ayuda.


24-Jan-2013 02:43
Luis Torres (+12)

¿Cómo lo solucionaste?.
Saludos.


24-Jan-2013 09:08
Antonio Rodrigues

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.


25-Jan-2013 22:27
Nacho Cabanes (+32)

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.


26-Jan-2013 00:20
Antonio Rodrigues

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.)