PDA

Ver la Versión Completa : Problemas de seguimiento en una sentencia IF


Oibafrufat
26-01-2007, 17:39:59
Buen día

Les comento: trabajo la versión 6 de Delphi y en los últimos días he tenido problemas con en ciertas sentencias IF, las cuales al hacer un seguimiento paso a paso siendo la condición verdadera, ingresa por la misma y una vez termina, sigue por la falsa, agradecería si alguien tiene alguna respuesta lógica al respecto.

if i<ListaPalabras.Count-1 then
pasa aki temp := temp + ' ' + ListaPalabras[i]
else
y pasa x aki break;

Enan0
26-01-2007, 19:15:05
Hola.
Mira esa sentencia IF no tienen nada de raro. al ver el break inmagino que esta dentro de un bucle For, lo cual tambien le da Sentido al I

Estaria bueno si pegas un poco mas de Codigo. porque esa sentecia aparentemente anda perfecto.

tambien estaria bueno que comentes ListaPalabras que tipo de componente es.

Saludos

Oibafrufat
27-01-2007, 00:06:31
Agradezco tu respuesta, tal vez como es mi primera vez, me hace falta ser más dinámico en mis comentarios.... imaginate. tal vez no es la sentencia, sino que delphi en otras sentencias if.... hace su paso por la parte falsa y la verdadera al mismo tiempo, efectivamente esto hace parte de un bucle

while true do
begin
CodEqMzVal := Geo.RetornaCodigoEqMzVal(QGeoVarios,temp,Ciudad);
if CodEqMzVal <> '' then
begin
CodEqMzValOk := CodEqMzVal;
CodMzNivOk := Geo.RetornaNivelYNomMzVal(QGeoVarios,CodEqMzValOk,Ciudad,NomMzVal);
NivelOk := Geo.RetornaNivelMzNiv(QGeoVarios,CodMzNivOk,Ciudad,NombreNivel,SiTabla);
iok := i;
i := i+1;
if i < ListaPalabras.Count-1 then
temp := temp + ' ' + ListaPalabras[i];
else
break;
end
else
begin
i := i+1;
if i < ListaPalabras.Count-1 then
temp := temp + ' ' + ListaPalabras[i]
else
break;
end;
end;

Mira yo le doy vueltas y vueltas y no entiendo xq sucede y no es en la única parte que pasa. hace esto en el primer if y pasa normal por el segundo...

ListaPalabras es un TStringList, en el cual almaceno las palabras de una frase.

Espero haberme hecho entender... gracias...

Lepe
27-01-2007, 02:13:06
Yo no le veo sentido, ¿acaso este código no es el mismo?

while true do
begin
CodEqMzVal := Geo.RetornaCodigoEqMzVal(QGeoVarios,temp,Ciudad);
if CodEqMzVal <> '' then
begin
CodEqMzValOk := CodEqMzVal;
CodMzNivOk := Geo.RetornaNivelYNomMzVal(QGeoVarios,CodEqMzValOk,Ciudad,NomMzVal);
NivelOk := Geo.RetornaNivelMzNiv(QGeoVarios,CodMzNivOk,Ciudad,NombreNivel,SiTabla);
iok := i;
end;
i := i+1;
if i < ListaPalabras.Count-1 then
temp := temp + ' ' + ListaPalabras[i];
else
break;
end;

igual el optimizador de delphi hace algo por el estilo.

Saludos

basti
27-01-2007, 04:33:04
El "While True", sólo lo utilizaría si es estrictamente necesario, y en este caso no lo es, creo que así te quedaría más claro, y evitarías tener que usar un break.

while i < ListaPalabras.Count-1 do
begin
CodEqMzVal := Geo.RetornaCodigoEqMzVal(QGeoVarios,temp,Ciudad);
if CodEqMzVal <> '' then
begin
CodEqMzValOk := CodEqMzVal;
CodMzNivOk := Geo.RetornaNivelYNomMzVal(QGeoVarios,CodEqMzValOk,Ciudad,NomMzVal);
NivelOk := Geo.RetornaNivelMzNiv(QGeoVarios,CodMzNivOk,Ciudad,NombreNivel,SiTabla);
iok := i;
end;
i := i+1;
if i < ListaPalabras.Count-1 then
temp := temp + ' ' + ListaPalabras[i];
end;