* Se crea un método de usuario en el formulario, llamado "GetArchivo"
* Podría ser un procedure de PRG. o un método en una clase custom, etc.
* Llamada al método
thisform.text1.Value=thisform.getarchivo( , 4 , 5 ,CHR(45))
* ----------------------------------
* -------- metodo -------------------
*PROCEDURE getArchivo
LPARAMETERS pcFile,pnFirst,pnLast,pcSeparator
LOCAL lnHand,lnCount,LcGet,LcSTring,;
lcFile,lnFirst,lnLast,lcSeparator
STORE 0 TO lnCount
STORE "" TO lcString
lnFirst=IIF(!EMPTY(pnFirst) and VARTYPE(pnFirst)="N",pnfirst,4)
lnLast=IIF(!EMPTY(pnLast) AND VARTYPE(pnLast)="N",pnLast,5)
lcSeparator=IIF(!EMPTY(pcSeparator) and VARTYPE(pcSeparator)="C",pcSEparator,CHR(45))
lcFile=pcFile
*<Obtiene el nombre de archivo (o es un parámetro)
IF VARTYPE(lcFile)#"C" OR EMPTY(lcFile)
lcfile=GETFILE("txt")
IF EMPTY(lcFile)
RETURN ""
ENDIF
ENDIF
*<Intenta abrir archivo>
lnHand=FOPEN(lcfile,0)
IF m.lnHand<0
MESSAGEBOX("No se pudo abrir el archivo "+lcFile)
RETURN ""
ENDIF
*<Recorrer el archivo abierto>
FSEEK(m.lnHand,0,0)
DO WHILE !FEOF(m.lnHand)
lcGet=FGETS(m.lnHand,2048)
lnCount = m.lnCount + 1
IF BETWEEN(m.lnCount,m.lnFirst,m.lnLast)
* Se toma el valor sin espacios delante y detrás
* El archivo puede tener tabuladores (chr(9) que se eliminan
lcString=m.lcString ;
+ ALLTRIM(CHRTRAN(m.lcGet,CHR(9),"")) ;
+ m.lcSeparator
ENDIF
ENDDO
=FCLOSE(m.lnHand)
*<Evaluar resultados>
IF EMPTY(lcString)
MESSAGEBOX("No se encontró contenido")
RETURN ""
ENDIF
*<Publicar resultados>
RETURN LEFT(m.lcSTring,LEN(m.lcString)-1)
*ENDPROC
*!* <Nota>
*!* Si los renglones a leer no son contiguos, se puede
*!* definir un Array que contenga los números de líneas.
*!* También se puede identificar un inicio de área de
*!* lectura (determinar tags).
*!* Por ejemplo, este texto tiene etiquetas tipo xml
*!* <PICTURE>imaarenaaten31.bmp</PICTURE>
*!* <TITLE>Mercaderías Transportadas</TITLE>
*!* <ICON>c:\theodore\graphics\fibona5inv.ico</ICON>
*!* <BACKCOLOR>RGB(184,201,197)</BACKCOLOR>
*!* <METOD>PICTURE</METOD>
*!* </Nota