1 - Buenas tardes, tengo una rutina desarrollada por Víctor, quien me ayudó mucho y es partícipe de esta comunidad, ya que todavía soy un principiante en foxpro. En esta rutina, tomo la primera línea del archivo 1 y busco en todas las líneas del archivo 2, tanto en texto como para encontrar la cantidad deseada igual entre ellas. Lo que me gustaría hacer ahora es, cuando encuentre la línea con la cantidad deseada en el archivo 2, que registre lo que encontró en archivo 3, esto ya está hecho, pero ahora necesito la rutina para borrar esta línea encontrada del archivo 2, para que luego, al regresar al archivo 1 y tomar la segunda línea que contará en el archivo 2, no cuente esa misma línea ya grabada, ya que fue borrada previamente en la rutina.
2 - Trabajar con la base de datos .dbf sin perder la rutina del programa con BITTEST como se muestra a continuación.
Nota: Me gustaría que enseñara en la rutina cómo hacer estos cambios.
----------------------------------------LA RUTINA-----------------------------------------
CLEAR
CLEAR ALL
CLOSE ALL
#Define CUANTOS 15
#Define CUANTOS_OK 7
Local lcLin1 As String, ;
lcLin2 As String, ;
llT1 As Boolean, ;
lnArq1 As Number, ;
lnArq2 As Number, ;
lnArq3 As Number, ;
lnLin1 As Number, ;
lnLin2 As Number, ;
lnMatriz As Number, ;
lnNro As Number, ;
lnRepetidos As Number, ;
lnDistintos As Number, ;
lnSecFin As Number, ;
lnSecIni As Number, ;
lnValTmp As Number
lnSecIni = Seconds()
lnArq1 = Fopen("arquivo1.txt", 0)
lnArq2 = Fopen("arquivo2.txt", 0)
If File("arquivo3.txt")
Delete File arquivo3.txt
Endif
lnArq3 = Fcreate("arquivo3.txt", 0)
lnLin1 = 0
lnLin2 = 0
Do While Not Feof(m.lnArq1)
lnLin1 = m.lnLin1 + 1
vlin = TRANSFORM(lnLin1,'99999')
lcLin1 = Fgets(m.lnArq1)
lnMatriz = 0
For lnNro = 1 To CUANTOS
lnValTmp = Val(Substr(m.lcLin1, ((m.lnNro - 1) * 3) + 1, 3))
lnMatriz = m.lnMatriz + 2 ^ (m.lnValTmp - 1)
Endfor
llT1 = .T.
Do While Not Feof(m.lnArq2)
lnLin2 = m.lnLin2 + 1
lcLin2 = Fgets(m.lnArq2)
lnRepetidos = 0
lnDistintos = 0
For lnNro = 1 To CUANTOS
lnValTmp = Val(Substr(m.lcLin2, ((m.lnNro - 1) * 3) + 1, 3))
If Bittest(m.lnMatriz, m.lnValTmp - 1)
lnRepetidos = m.lnRepetidos + 1
Else
lnDistintos = m.lnDistintos + 1
If m.lnDistintos > (CUANTOS - CUANTOS_OK)
Exit
Endif
Endif
ENDFOR
If m.lnRepetidos >= CUANTOS_OK
If m.llT1
llT1 = .F.
Endif
Fputs(m.lnArq3, m.lcLin2)
***************************** Grabado en archivo 3, ahora, elimine esa línea del archivo 2 para que las otras líneas del archivo 1 ya no la cuenten**********************
Endif
Enddo
Fseek(m.lnArq2, 0, 0)
Enddo
SET BELL TO ("c:\windows\media\Alarm01.wav")
?? CHR(7)
SET BELL TO
lnSecFin = Seconds()
Messagebox(Transform(m.lnSecFin - m.lnSecIni))
Fclose(m.lnArq1)
Fclose(m.lnArq2)
Fclose(m.lnArq3)
**************************Ahora, abajo, la misma rutina pero para la base de datos, que no tengo idea de cómo hacerlo*******************************