HMG 3.1.1
Moderator: Rathinagiri
Re: HMG 3.1.1
hi all, again with a question.
searching and investigating folders in 3.0.46 version, i found AUTOFILL sample and it has been very usefull to me. comes to me the idea to save new entries (which are not in "countries.lst") in the moment, without the user noticing. can someone help me?
hola a todos y nuevamente con una pregunta.
navegando por los folders de la version 3.0.46, encontre el ejemplo de AUTOFILL en el folder "hmg\hfcl\samples\autofill" y ha sido de gran utilidad para mi. se pueden grabar las nuevas entradas que no existen en el archivo "countries.lst" en el momento de la edicion sin que el usuario se de cuenta?
de antemano, gracias por su ayuda.
searching and investigating folders in 3.0.46 version, i found AUTOFILL sample and it has been very usefull to me. comes to me the idea to save new entries (which are not in "countries.lst") in the moment, without the user noticing. can someone help me?
hola a todos y nuevamente con una pregunta.
navegando por los folders de la version 3.0.46, encontre el ejemplo de AUTOFILL en el folder "hmg\hfcl\samples\autofill" y ha sido de gran utilidad para mi. se pueden grabar las nuevas entradas que no existen en el archivo "countries.lst" en el momento de la edicion sin que el usuario se de cuenta?
de antemano, gracias por su ayuda.
Todo en el Nombre de Jesus / All in the name of Jesus
Carlos RD
Carlos RD
- esgici
- Posts: 4543
- Joined: Wed Jul 30, 2008 9:17 pm
- DBs Used: DBF
- Location: iskenderun / Turkiye
- Contact:
Re: HMG 3.1.1
Hola Carlos
I hope it give an idea
Salodus
Please look at here.CarlosRD wrote:searching and investigating folders in 3.0.46 version, i found AUTOFILL sample and it has been very usefull to me. comes to me the idea to save new entries (which are not in "countries.lst") in the moment, without the user noticing. can someone help me?.
I hope it give an idea
Salodus
Last edited by esgici on Tue Feb 12, 2013 10:33 pm, edited 1 time in total.
Viva INTERNATIONAL HMG
- danielmaximiliano
- Posts: 2612
- Joined: Fri Apr 09, 2010 4:53 pm
- Location: Argentina
- Contact:
Re: HMG 3.1.1
dentro de la misma carpeta HCFL se encuentra el archivo que necesitas
C:\hmg.3.1.1\hfcl\Samples\ComboSearchBox\countries.lst
C:\hmg.3.1.1\hfcl\Samples\ComboSearchBox\countries.lst
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*
Saludos / Regards
DaNiElMaXiMiLiAnO
Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*
Saludos / Regards
DaNiElMaXiMiLiAnO
Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
Re: HMG 3.1.1
maybe I did not explain well.esgici wrote:Hola Carlos
Please look at here.CarlosRD wrote:searching and investigating folders in 3.0.46 version, i found AUTOFILL sample and it has been very usefull to me. comes to me the idea to save new entries (which are not in "countries.lst") in the moment, without the user noticing. can someone help me?.
I hope it give an idea
Salodus
my aplication works with tires models and marks, see that in "tires.lst" i have "Goodyear and Hankook". If in a new entry i type "Continental", the file "tires.lst" get a moditication and now it has "Goodyear, Hankook and Continental". That is what i want, could you help me?
Todo en el Nombre de Jesus / All in the name of Jesus
Carlos RD
Carlos RD
Re: HMG 3.1.1
daniel, buenas tardes:
tengo algunos problemas con el manejo de array. he buscado en todos lo ejemplos y no encuentro como grabar los datos de un array en un archivo texto. puedes ayudarme?
estoy tratando de implementar en mi aplicacion el AUTOFILL, ya logre adicionar nuevos valores direfentes al array con el procedimiento abajo mencionado, pero ahora quiero grabar el array modificado en el mismo archivo de texto.
ejemplo:
para adicionar datos a un arreglo, se que es el aadd()
para ordenarlo, el asort()
para grabarlo nuevamente, ????????
te agrego el codigo que implemente y ojala pudieras ayudarme. gracias
onenter add_data() esta es una nueva instruccion al textbox
procedure add_data()
i=1
encontrado=.f.
newdata=frmAFTest.txbCountry.value
do while i<len(acountries)+1
datain:=acountries
if datain = newdata
encontrado=.t.
endif
i++
enddo
if !encontrado
aadd ( acountries,newdata )
endif
return
tengo algunos problemas con el manejo de array. he buscado en todos lo ejemplos y no encuentro como grabar los datos de un array en un archivo texto. puedes ayudarme?
estoy tratando de implementar en mi aplicacion el AUTOFILL, ya logre adicionar nuevos valores direfentes al array con el procedimiento abajo mencionado, pero ahora quiero grabar el array modificado en el mismo archivo de texto.
ejemplo:
para adicionar datos a un arreglo, se que es el aadd()
para ordenarlo, el asort()
para grabarlo nuevamente, ????????
te agrego el codigo que implemente y ojala pudieras ayudarme. gracias
onenter add_data() esta es una nueva instruccion al textbox
procedure add_data()
i=1
encontrado=.f.
newdata=frmAFTest.txbCountry.value
do while i<len(acountries)+1
datain:=acountries
if datain = newdata
encontrado=.t.
endif
i++
enddo
if !encontrado
aadd ( acountries,newdata )
endif
return
danielmaximiliano wrote:dentro de la misma carpeta HCFL se encuentra el archivo que necesitas
C:\hmg.3.1.1\hfcl\Samples\ComboSearchBox\countries.lst
[attachment=0]TextCrawler_2013-02-12_19-31-42.jpg[/attachment]
Todo en el Nombre de Jesus / All in the name of Jesus
Carlos RD
Carlos RD
Re: HMG 3.1.1
bingo.... resuelto
utilice un dbf, del cual obtengo mi array y listo. gracias daniel de todas formas. gracias esgici por la molestia.
utilice un dbf, del cual obtengo mi array y listo. gracias daniel de todas formas. gracias esgici por la molestia.
CarlosRD wrote:daniel, buenas tardes:
tengo algunos problemas con el manejo de array. he buscado en todos lo ejemplos y no encuentro como grabar los datos de un array en un archivo texto. puedes ayudarme?
estoy tratando de implementar en mi aplicacion el AUTOFILL, ya logre adicionar nuevos valores direfentes al array con el procedimiento abajo mencionado, pero ahora quiero grabar el array modificado en el mismo archivo de texto.
ejemplo:
para adicionar datos a un arreglo, se que es el aadd()
para ordenarlo, el asort()
para grabarlo nuevamente, ????????
te agrego el codigo que implemente y ojala pudieras ayudarme. gracias
onenter add_data() esta es una nueva instruccion al textbox
procedure add_data()
i=1
encontrado=.f.
newdata=frmAFTest.txbCountry.value
do while i<len(acountries)+1
datain:=acountries
if datain = newdata
encontrado=.t.
endif
i++
enddo
if !encontrado
aadd ( acountries,newdata )
endif
return
danielmaximiliano wrote:dentro de la misma carpeta HCFL se encuentra el archivo que necesitas
C:\hmg.3.1.1\hfcl\Samples\ComboSearchBox\countries.lst
[attachment=0]TextCrawler_2013-02-12_19-31-42.jpg[/attachment]
Todo en el Nombre de Jesus / All in the name of Jesus
Carlos RD
Carlos RD
- danielmaximiliano
- Posts: 2612
- Joined: Fri Apr 09, 2010 4:53 pm
- Location: Argentina
- Contact:
Re: HMG 3.1.1
Carlos : para crear un archivo de texto necesitas utilizar primeroCarlosRD wrote:daniel, buenas tardes:
tengo algunos problemas con el manejo de array. he buscado en todos lo ejemplos y no encuentro como grabar los datos de un array en un archivo texto. puedes ayudarme?
Code: Select all
FCREATE(<cFile>, [<nAttribute>]) --> nHandle
Arguments
<cFile> is the name of the file to create. If the file already
exists, its length is truncated to zero without warning.
<nAttribute> is one of the binary file attributes shown in the table
below. If this argument is omitted, the default value is zero.
Binary File Attributes
------------------------------------------------------------------------
Value Fileio.ch Attribute Description
------------------------------------------------------------------------
0 FC_NORMAL Normal Create normal read/write file (default)
1 FC_READONLY Read-only Create read-only file
2 FC_HIDDEN Hidden Create hidden file
4 FC_SYSTEM System Create system file
------------------------------------------------------------------------
nOutfile := FCREATE("Newfile.txt", FC_NORMAL)
Code: Select all
FWRITE()
Write to an open binary file
------------------------------------------------------------------------------
Syntax
FWRITE(<nHandle>, <cBuffer>, [<nBytes>])
--> nBytesWritten
Arguments
<nHandle> is the file handle obtained from FOPEN(), FCREATE(), or
predefined by DOS.
<cBuffer> is the character string to write to the specified file.
<nBytes> indicates the number of bytes to write beginning at the
current file pointer position. If omitted, the entire content of
<cBuffer> is written.
nOutfile := FCREATE("Newfile.txt", FC_NORMAL)
IF FWRITE(nOutfile, cBuffer ) > 0
? "Write Ok"
ELSE
? "Write fail"
ENDIF
FCLOSE(nOutfile)
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*
Saludos / Regards
DaNiElMaXiMiLiAnO
Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. Harbour/HMG : It's magic !
(¸.·``··*
Saludos / Regards
DaNiElMaXiMiLiAnO
Whatsapp. := +54901169026142
Telegram Name := DaNiElMaXiMiLiAnO
-
- Posts: 388
- Joined: Wed Nov 21, 2012 7:14 pm
- Location: México
Re: HMG 3.1.1
Hola Carlos y DanielMaximiliano y todos los del Foro!!!
Aquí tengo una rutina que me ayuda mucho al Grabar Arrays a Ficheros y recuperarlos...
Espero que sea de su utilidad....
/ * * *
* SAVE_ARR.CH *
* Fichero de cabecera para grabar/restaurar arrays
*
*/
// En las siguientes macros fh es un handle de fichero
// Escribir elemento carácter:
// C<5 dígitos de longitudxvalor del carácter>
#define SAVE_CHAR(fh, cv) ;
FWrite(fh, "C" + Str(Len(cv), 5) + cv)
// Escribir elemento fecha: D<cadena de fecha>
#define SAVE_DATE(fh, dv) FWrite(fh, "D" + Dtoc(dv))
// Escribir elemento lógico: L<carácter T or F>
#define SAVE_LOG(fh, lv);
FWrite(fh, "L" + Iif(lv, "T", "F"))
// Escribir elemento numérico:
// N<longitud de 2 dígitos>
// <número formateado como una cadena>
#define SAVE_NUM(fh, nv) ;
FWrite(fh, "N" + Str(Len(Str(nv)),2) + ;
Str(nv))
// Escribir cabecera del array:
// A<longitud del array de 4 dígitos>
#define WRITE_AHD(fh, av) FWrite(fh, "A" + Str(Len(av), 4))
// Leer un tipo
#define GET_TYPE(fh) FReadStr(fh, 1)
// Leer tamaño del array
#define GET_AR_SIZE(fh) Val(FReadStr(fh, 4))
// Leer un elemento carácter
#define GET_CHAR(fh) FReadStr(fh, Val(FReadStr(fh, 5)))
// Leer un elemento de fecha
#define GET_DATE(fh) Ctod(FReadStr(fh, 8))
// Leer un elemento lógico
#define GET_LOG(fh) FReadStr(fh, 1) == "T"
// Leer un elemento numérico
#define GET_NUM(fh) Val(FReadStr(fh, Val(FReadStr(fh, 2))))
/ * * *
* SAVE_ARR.PRG *
* Fichero de programa que contiene las funciones SaveArray()
* y RestArray() para grabar y restaurar arrays a / desde
* disco
*/
#include "Save_arr.ch"
I * * *
* SaveArray(aArray, cFileName) *
* aArray[] - -Array a grabar
* cFileName - -Fichero en el que se grabará el array
*/
FUNCTION SaveArray(aArray, cFileName)
LOCAL fHandle := FCreate(cFileName)
SaveArr(fHandle, aArray)
FClose(fHandle)
RETURN NIL
STATIC FUNCTION SaveArr(fHandle, aArray)
LOCAL LenArray, ElemType, i
// Escribir la cabecera del array WRITE_AHD(fHandle, aArray) LenArray := Len(aArray)
// Escribir cada elemento en el array
FOR i := 1 TO LenArray
ElemType := ValType(aArray)
DO CASE
CASE ElemType == "A"
//A subarray, recurse ~EL
SaveArr(fHandle, aArray)
CASE ElemType == "B"
// Error fatal - no podemos escribir los code blocks ? "ERROR: NO SE PUEDE GRABAR UN CODE BLOCK
InKey(0)
CASE ElemType == "C"
// Grabar un elemento de tipo carácter SAVE_CHAR(fHandle, aArray)
CASE ElemType == "D"
// Grabar un elemento de tipo fecha SAVE_DATE(fHandle, aArray)
CASE ElemType == "L"
// Grabar un elemento de tipo lógico SAVE_LOG(fHandle, aArray)
CASE ElemType == "N"
// grabar un elemento de tipo numérico
SAVE_NUM(fHandle, aArray)
ENDCASE
NEXT
RETURN NIL
/ * * *
* RestArray(cFileName) *
* cFileName - -Fichero desde el que se recuperará el array
*/
FUNCTION RestArray(cFileName)
LOCAL aRestArr, fHandle := FOpen(cFileName)
GET_TYPE(fHandle)
aRestArr := RestArr(fHandle)
FClose(fHandle)
RETURN aRestArr
FUNCTION RestArr(fHandle)
LOCAL LenArray, i, ElemType, aArray
// Determinar el tamaño del array
LenArray := GET_AR_SIZE(fHandle)
aArray := Array(LenArray)
// Restaurar cada elemento
FOR i := 1 TO LenArray
// Determinar su tipo
ElemType := GET_TYPE(fHandle)
DO CASE
CASE ElemType == "A"
// Si se trata de otro array usamos recursividad
aArray := RestArr(fHandle)
CASE ElemType == "B"
// Error fatal - No se grabó
CASE ElemType == "C"
aArray := GET_CHAR(fHandle)
CASE ElemType == “D”
aArray := GET_DATE(fHandle)
CASE ElemType == “L”
aArray := GET_LOG(fHandle)
CASE ElemType == “N”
aArray[i] := GET_NUM(fHandle)
ENDCASE
NEXT
RETURN aArray
/*************************************************************************
*Tenemos que hacer dos ficheros con la información arriba descrita
*1.- Save_arr.ch // que va a ser un archivo de cabecera y
*2.- SAVE_ARR.PRG // que va a tener las funciones para grabar y restaurar arrays a disco.
*/
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
*Y con solo poner en tu código:
#include <hmg.ch>
#include "Fileio.ch"
#include "Dbstruct.ch"
#include "SAVE_ARR.CH "
SaveArray(aMiArray,GuardaMiArray.txt) //Graba en el disco el fichero que contiene la información del array.
*y con:
aMiArray := RestArray(GuardaMiArray.txt) //Carga el array con los valores que guardo mi archivo *.txt
#include "SAVE_ARR.PRG "
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Espero que haya sido claro.
Saludos
Polo
Aquí tengo una rutina que me ayuda mucho al Grabar Arrays a Ficheros y recuperarlos...
Espero que sea de su utilidad....
/ * * *
* SAVE_ARR.CH *
* Fichero de cabecera para grabar/restaurar arrays
*
*/
// En las siguientes macros fh es un handle de fichero
// Escribir elemento carácter:
// C<5 dígitos de longitudxvalor del carácter>
#define SAVE_CHAR(fh, cv) ;
FWrite(fh, "C" + Str(Len(cv), 5) + cv)
// Escribir elemento fecha: D<cadena de fecha>
#define SAVE_DATE(fh, dv) FWrite(fh, "D" + Dtoc(dv))
// Escribir elemento lógico: L<carácter T or F>
#define SAVE_LOG(fh, lv);
FWrite(fh, "L" + Iif(lv, "T", "F"))
// Escribir elemento numérico:
// N<longitud de 2 dígitos>
// <número formateado como una cadena>
#define SAVE_NUM(fh, nv) ;
FWrite(fh, "N" + Str(Len(Str(nv)),2) + ;
Str(nv))
// Escribir cabecera del array:
// A<longitud del array de 4 dígitos>
#define WRITE_AHD(fh, av) FWrite(fh, "A" + Str(Len(av), 4))
// Leer un tipo
#define GET_TYPE(fh) FReadStr(fh, 1)
// Leer tamaño del array
#define GET_AR_SIZE(fh) Val(FReadStr(fh, 4))
// Leer un elemento carácter
#define GET_CHAR(fh) FReadStr(fh, Val(FReadStr(fh, 5)))
// Leer un elemento de fecha
#define GET_DATE(fh) Ctod(FReadStr(fh, 8))
// Leer un elemento lógico
#define GET_LOG(fh) FReadStr(fh, 1) == "T"
// Leer un elemento numérico
#define GET_NUM(fh) Val(FReadStr(fh, Val(FReadStr(fh, 2))))
/ * * *
* SAVE_ARR.PRG *
* Fichero de programa que contiene las funciones SaveArray()
* y RestArray() para grabar y restaurar arrays a / desde
* disco
*/
#include "Save_arr.ch"
I * * *
* SaveArray(aArray, cFileName) *
* aArray[] - -Array a grabar
* cFileName - -Fichero en el que se grabará el array
*/
FUNCTION SaveArray(aArray, cFileName)
LOCAL fHandle := FCreate(cFileName)
SaveArr(fHandle, aArray)
FClose(fHandle)
RETURN NIL
STATIC FUNCTION SaveArr(fHandle, aArray)
LOCAL LenArray, ElemType, i
// Escribir la cabecera del array WRITE_AHD(fHandle, aArray) LenArray := Len(aArray)
// Escribir cada elemento en el array
FOR i := 1 TO LenArray
ElemType := ValType(aArray)
DO CASE
CASE ElemType == "A"
//A subarray, recurse ~EL
SaveArr(fHandle, aArray)
CASE ElemType == "B"
// Error fatal - no podemos escribir los code blocks ? "ERROR: NO SE PUEDE GRABAR UN CODE BLOCK
InKey(0)
CASE ElemType == "C"
// Grabar un elemento de tipo carácter SAVE_CHAR(fHandle, aArray)
CASE ElemType == "D"
// Grabar un elemento de tipo fecha SAVE_DATE(fHandle, aArray)
CASE ElemType == "L"
// Grabar un elemento de tipo lógico SAVE_LOG(fHandle, aArray)
CASE ElemType == "N"
// grabar un elemento de tipo numérico
SAVE_NUM(fHandle, aArray)
ENDCASE
NEXT
RETURN NIL
/ * * *
* RestArray(cFileName) *
* cFileName - -Fichero desde el que se recuperará el array
*/
FUNCTION RestArray(cFileName)
LOCAL aRestArr, fHandle := FOpen(cFileName)
GET_TYPE(fHandle)
aRestArr := RestArr(fHandle)
FClose(fHandle)
RETURN aRestArr
FUNCTION RestArr(fHandle)
LOCAL LenArray, i, ElemType, aArray
// Determinar el tamaño del array
LenArray := GET_AR_SIZE(fHandle)
aArray := Array(LenArray)
// Restaurar cada elemento
FOR i := 1 TO LenArray
// Determinar su tipo
ElemType := GET_TYPE(fHandle)
DO CASE
CASE ElemType == "A"
// Si se trata de otro array usamos recursividad
aArray := RestArr(fHandle)
CASE ElemType == "B"
// Error fatal - No se grabó
CASE ElemType == "C"
aArray := GET_CHAR(fHandle)
CASE ElemType == “D”
aArray := GET_DATE(fHandle)
CASE ElemType == “L”
aArray := GET_LOG(fHandle)
CASE ElemType == “N”
aArray[i] := GET_NUM(fHandle)
ENDCASE
NEXT
RETURN aArray
/*************************************************************************
*Tenemos que hacer dos ficheros con la información arriba descrita
*1.- Save_arr.ch // que va a ser un archivo de cabecera y
*2.- SAVE_ARR.PRG // que va a tener las funciones para grabar y restaurar arrays a disco.
*/
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
*Y con solo poner en tu código:
#include <hmg.ch>
#include "Fileio.ch"
#include "Dbstruct.ch"
#include "SAVE_ARR.CH "
SaveArray(aMiArray,GuardaMiArray.txt) //Graba en el disco el fichero que contiene la información del array.
*y con:
aMiArray := RestArray(GuardaMiArray.txt) //Carga el array con los valores que guardo mi archivo *.txt
#include "SAVE_ARR.PRG "
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
Espero que haya sido claro.
Saludos
Polo
-
- Posts: 388
- Joined: Wed Nov 21, 2012 7:14 pm
- Location: México
Re: HMG 3.1.1
Hola...
Por ahi hay una "I" al inicio de una linea debe de ser "/"
Saludos
Polo
Por ahi hay una "I" al inicio de una linea debe de ser "/"
Saludos
Polo