************************************************************ * * Funcion: ArrayToFile * * Pasa un array a un fichero, similar como hace STRTOFILE * * Parametros: * * taArray - Array o matriz (por referencia) * tcfichero - fichero donde se guarda * * Ejemplos: * * DIMENSION laArray(1) * ADIR(laArray,"C:*.*","D") * llret = ArrayToFile(@laArray,"C:archivo.txt") * * Retorno * .T. Correcto * .F. No se pasó el array por referencia * * Nota * * Se usa en combinacion con FileToArray * * Creación : 10/06/2002 Pablo Roca * Ultima Modificacion: 10/06/2002 Pablo Roca * ************************************************************ FUNCTION ArrayToFile LPARAMETER taArray, tcfichero LOCAL lnRows, lnCols, lnI, lnJ, lvValue, lnarchivo, lcst * matriz no pasada por referencia IF TYPE("taArray[1]") = "U" RETURN .F. ENDIF * tamaño de la matriz lnRows = ALEN(taArray,1) lnCols = MAX(ALEN(taArray,2),1) lnarchivo=FCREATE(tcfichero) FPUTS(lnarchivo,TRANSFORM(lnRows,";@L 999")+"x"+TRANSFORM(lnCols,";@L 999")) FOR lnI = 1 TO lnRows lcst = "" FOR lnJ = 1 TO lnCols IF lnCols = 1 lvValue = taArray(lnI) ELSE lvValue = taArray(lnI,lnJ) ENDIF lcst = lcst+VARTYPE(lvValue)+TRANSFORM(LEN(TRANSFORM(lvValue)),";@L 999")+TRANSFORM(lvValue) ENDFOR FPUTS(lnarchivo,lcst) ENDFOR FCLOSE(lnarchivo) RETURN .T. ************************************************************ * * Funcion: FileToArray * * Pasa un fichero a un array, similar como hace FILETOSTR * * Parametros: * * taArray - Array o matriz (por referencia) * tcfichero - fichero de donde se lee * * Ejemplos: * * DIMENSION laArray(1) * llret = FileToArray(@laArray,"C:archivo.txt") * * Retorno * * .T. Correcto * .F. No se pasó el array por referencia * * Nota * * Se usa en combinacion con ArrayToFile * * Creación : 10/06/2002 Pablo Roca * Ultima Modificacion: 10/06/2002 Pablo Roca * ************************************************************ FUNCTION FileToArray LPARAMETER taArray, tcfichero LOCAL lnRows, lnCols, lnI, lnJ, lvValue LOCAL lnarchivo, lcst, lctipo, lndec, lvValue * matriz no pasada por referencia IF TYPE("taArray[1]") = "U" RETURN .F. ENDIF lnarchivo = FOPEN(tcfichero,10) lcst = FGETS(lnarchivo) * Tamaño de la matriz lnRows = VAL(LEFT(lcst,3)) lnCols = VAL(SUBSTR(lcst,5,3)) DIMENSION taArray(lnRows,lnCols) FOR lnI = 1 TO lnRows lcst = FGETS(lnarchivo,8192) lnpos=1 FOR lnJ = 1 TO lnCols lctipo = SUBSTR(lcst, lnpos,1) lcancho = SUBSTR(lcst, lnpos+1,3) lnancho = VAL(lcancho) lvValue = SUBSTR(lcst, lnpos+4,lnancho) DO CASE CASE lctipo = "N" OR lctipo = "Y" lndec = IIF(AT(SET("POINT"),lvValue)>0,LEN(lvValue)-AT(SET("POINT"),lvValue),0) lvValue = ROUND(VAL(lvValue),lndec) CASE lctipo = "D" lvValue = CTOD(lvValue) CASE lctipo = "L" lvValue = IIF(lvValue=".T.",.T.,.F.) CASE lctipo = "T" lvValue = CTOT(lvValue) ENDCASE lnpos = lnpos + 4 + lnancho IF lnCols = 1 taArray(lnI) = lvValue ELSE taArray(lnI,lnJ) = lvValue ENDIF ENDFOR ENDFOR FCLOSE(lnarchivo) RETURN .T.