Pascal/Turbo Pascal - convertir to a mayúsculas

 
Vista:

convertir to a mayúsculas

Publicado por Javi (15 intervenciones) el 01/05/2003 21:09:31
Tengo un problema para convertir todo un fichero de texto a mayúsculas, con el upcase lo convierte pero las letras con acento y las que tengan diéresis no las convierte claro. He probao una forma cutre que es con un conjunto y con varios ifs (una chapuza vamos..xDD) pero es q ni asi funciona, alguien me pue ayudar a resolverlo?
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:convertir to a mayúsculas

Publicado por Diego Romero (786 intervenciones) el 02/05/2003 01:06:45
Lamentablemente no hay otra manera de hacerlo sino es comparando caracter a caracter. Para acelerar el proceso podrías intentar el reemplazo solo en aquellos caracteres que el UpCase no cambió, por ejemplo:

1
2
3
4
5
6
7
8
9
A:=UpCase(B);
if A = B then
begin
Case B of
:':A:='Á';
:A:='É';
{ y así }
end; { case }
end; { if }
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir to a mayúsculas

Publicado por elespa (40 intervenciones) el 02/05/2003 10:16:51
Mirate la funcion StrUpper que tienen las cadenas de caracteres y que se encuentra implementada en la unit que tendras por defecto con el compilador Strings.tpu
La verdad es que no te va a solucionar el problema de la diéresis ni caracteres especiales como la Ñ, pero desde luego si que es más rápida que el Upcase. Un saludo.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir to a mayúsculas

Publicado por César Augusto Navarro Gómez (182 intervenciones) el 02/05/2003 16:17:53
Puedes eliminar las comparaciones haciendo un par de arreglos, uno con las mayúsculas y otro con las minúsculas de tal manera que harías un WHILE para encontrar la letra

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
i:=0;
while letra<>ArregloMin[i] and i<CantCarEnArreglo do
inc(i)
 
if letra=ArregloMin[i] then
   letra=ArregloMay[i]
else
    {no es letra}
end
Una manera más elegante y rápida de hacerlo es restarle 32 al código ASCII por ej.
Y creo que es lo más fácil
 
if letra in ['a',b','c',...,'z','á','é,'í',...'ñ','ü'] then
   letra=chr(ord(letra-32);
end


Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir to a mayúsculas

Publicado por javi (15 intervenciones) el 03/05/2003 17:59:16
Gracias, lo he probao y eso de restarle 32 al ordinal funciona pero para las letras minúsculas, para las acentuadas no, lo he hecho con ifs y funciona pero no funciona cuando está leyendo de un archivo de texto que no consigo poner todas las letras a mayúsculas y quitar los signos de puntuacion y demas, se os ocurre como?
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:convertir to a mayúsculas

Publicado por César Augusto (2 intervenciones) el 05/05/2003 16:39:05
Porque no escribes tu código porque yo chequé los códigos ASCII en un editorsito que tengo aquí y restándole 32 funciona con las acentuadas, al menos según la tabla de códigos que tiene (a menos que esté mal)
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

convertir to a mayúsculas

Publicado por jefferson olarte (2 intervenciones) el 12/02/2013 22:05:38
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
program mayus;
uses
crt;
var
cadena1,d1:string;
 
procedure entrada(var cadena:string);
begin
writeln('escriba  una cadena');
readln(cadena);
end;
 
procedure cambiar(cadena:string;var d:string);
var
e:string;
i:integer;
 
begin
d:=' ';
for i:=1 to length(cadena) do
begin
if cadena[i]<>''  then
e:=chr(ord(cadena[i])-32);
d:=d+e;
end;
writeln('la cadena nueva es: ',d,' ');
end;
 
begin {principal}
clrscr;
entrada(cadena1);
cambiar(cadena1,d1);
readkey;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

convertir to a mayúsculas

Publicado por ramon (2158 intervenciones) el 22/02/2013 19:16:52
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
{O con esta variante}
 
program mayus;
uses
crt;
var
cadena1,d1:string;
 
procedure entrada(var cadena:string);
begin
writeln('escriba  una cadena');
readln(cadena);
end;
 
procedure cambiar(cadena:string;var d:string);
var
e:string;
i:integer;
 
begin
d:=' ';
for i:=1 to length(cadena) do
begin
   d[i] := upcase(cadena[i]);
   d[0] := chr(i);
end;
writeln('la cadena nueva es: ',d,' ');
end;
 
begin {principal}
clrscr;
entrada(cadena1);
cambiar(cadena1,d1);
readkey;
end.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar