FoxPro/Visual FoxPro - Ayuda con un ciclo Scan/Do While

   
Vista:

Ayuda con un ciclo Scan/Do While

Publicado por Manuel Raygoza (5 intervenciones) el 23/07/2008 21:09:12
Que tal. Tengo un problema con un ciclo.
Tengo una tabla con ciertos datos. Muchos registros son identicos a otros dentro de la misma tabla. Necesito identificar dos tipos de grupos dentro de la tabla de acuerdo a ciertas condiciones

Primeramente selecciono todos los registros de la tabla original y los guardo en un cursor
Posteriormente hago el procedimiento.

El problema esta en que solo asigna la letra A o S solo al primer registro del grupo identico
Ejemplo

Item - Programa - Unidad - Estado - Ambito - Status
1 12541 25 458 44 A
2 12541 25 458 44
3 12541 25 458 44
4 54565 18 221 72 A
5 54565 18 221 72
6 54565 18 221 72
7 12589 47 375 88 S
8 12589 47 375 88

Solo asigna la letra 'A' o 'S' al primer registro de los datos duplicados. Lo que necesito es que lo asigne a todos los registros y no solo al primer registro de los datos duplicados.
Mi codigo es el siguiente:

Select * ;
From &PcTabla ;
Into Cursor S1

Select S1
Go Top
Do While !Eof()
cActividad = S1.Programa
fUnidad = S1.Unidad
fEstado = S1.Estado
fAmbito = S1.Ambito
fMunicipio = S1.Municipio
fTipo = S1.TipoPlan
fNivel = S1.Nivel
fRango = S1.Rango
fIdPuesto = S1.IdPuesto
Select &PcTabla
Seek (cActividad + fUnidad + fEstado + fAmbito + fMunicipio + fTipo + fNivel +fRango + fIdPuesto)
If (cActividad = '11P07' and fUnidad = '101') or Inlist(AllTrim(cActividad),'01O01','02M01')
Replace Status with 'A' && Adjetivas
EndIf
If (cActividad = '11P07' and fUnidad <> '101') or InList(AllTrim(cActividad),'11R03','11R05','11K27','11R06','11R09')
Replace Status with 'S' && Sustantivas
EndIf
EndDo

Necesito de Su ayuda. Gracias.
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
Imágen de perfil de Mauricio

Ayuda con un ciclo Scan/Do While

Publicado por Mauricio (1368 intervenciones) el 23/07/2008 22:33:11
Prueba algo como esto:
CLOSE TABLE ALL
USE pc_tabla IN 0 ALIAS S1
*---
SELE S1
GO TOP
DO WHILE !EOF()
IF (cActividad = '11P07')
IF fUnidad = '101'
REPLACE status WITH 'A'
ELSE
REPLACE status WITH 'S'
ENDIF
ENDIF
SKIP
ENDDO
CLOSE TABLE ALL
*
Espero te funcione, solo tienes que incorporar otras cosas que vienen en tu nota, pero facilmente puedes incorporar. Suerte!!!!!!!!!!!!!!!1
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:Ayuda con un ciclo Scan/Do While

Publicado por ruben (1 intervención) el 01/12/2010 23:26:35
lo que le falta es Skip +1 para que se pueda mover al siguiente registro o puedes usar Scan ...endscan
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