APPEND FROM SDF
Moderator: Rathinagiri
APPEND FROM SDF
Estimados,
Quiero hacer un append from un archivo txt que tiene varios registros con la siguiente instrucción
APPEND FROM AAA.TXT SDF
Como resultado me da de alta un solo registro.
Cómo lo soluciono ?
Gracias de antemano
Quiero hacer un append from un archivo txt que tiene varios registros con la siguiente instrucción
APPEND FROM AAA.TXT SDF
Como resultado me da de alta un solo registro.
Cómo lo soluciono ?
Gracias de antemano
- mustafa
- Posts: 1160
- Joined: Fri Mar 20, 2009 11:38 am
- DBs Used: DBF
- Location: Alicante - Spain
- Contact:
Re: APPEND FROM SDF
Hola
Mira haber si te puede servir esto:
APPEND FROM
Propósito Añade registros de otro archivo de datos o archivo de texto al final del archivo de datos seleccionado.
Sintaxis APPEND FROM nomarchivo [ámbito] [FOR expL] [[TYPE] SDF | {DELIMITED [WITH [BLANK | constante]}]
Argumentos nomarchivo Nombre del archivo cuyos registros/texto desea añadir. Incluya la vía si el archivo no está en el directorio activo.
ámbito Cláusula de ámbito usada para la selección del registro. El ámbito por defecto es todos (ALL).
FOR expL Expresión lógica usada para determinar los registros que van a seleccionarse. Sólo se incluyen los registros que cumplen la
condición FOR.
TYPE SDF | {DELIMITED [WITH BLANK | constante]}. Use esta cláusula cuando añada registros o texto de un archivo de texto delimitado.
Los archivos SDF (Formato de Datos del Sistema) contienen registros de longitud fija, con cada registro finalizado por un retorno de
carro/salto de línea (CRLF). Los campos de un archivo delimitado (valores separados por comas o CSV) están separados por comas y
cada registro se termina con un CRLF. Los campos no numéricos de un archivo CSV deben ir entre comillas dobles. Si se especifica
BLANK, los registros están delimitados por un solo espacio. Si usa el argumento constante en su lugar, debe especificar un solo carácter
delimitador entre comillas. Por ejemplo, el texto DELIMITED WITH '+' indica que los campos del archivo seleccionado se delimitan con un
signo más.
Uso Si las estructuras de los dos archivos no coinciden, sólo se copian los campos cuyo nombre y tipo sean iguales (los demás se dejan en
blanco).
En los dos formatos, SDF y delimitado (DELIMITED), la adición de registros se interrumpe en la marca de final de archivo (EOF). Los
campos memo no pueden añadirse desde un archivo SDF o delimitado; sólo puede hacerse desde otro archivo de datos.
Si añade desde un archivo SDF, asegúrese de que la longitud de los campos del archivo de datos de destino sea la misma que la del
archivo fuente. De lo contrario, cada campo se desplaza por la diferencia. Tenga en cuenta que no debe utilizar el parámetro FOR junto con
TYPE DELIMITED.
Puede utilizar un delimitador diferente a las comas (delimitador por defecto) en un archivo CSV especificando el delimitador como parte del
mandato APPEND FROM. Por ejemplo, la sentencia siguiente indica a CA-dBFast que el delimitador del archivo CSV es una barra:
APPEND FROM miarchivo DELIMITED WITH '/'
Ejemplo El ejemplo siguiente añade registros seleccionados del archivo denominado archanti al archivo denominado empleado (tenga en cuenta
que la expresión FOR sólo copia registros que contengan campos NUMEMP con valores menores de 300).
USE emPleado
APPEND FROM archanti FOR numemp < 300
En el ejemplo siguiente se copian los registros seleccionados de ARCHANTI en un archivo denominado TEMP.TXT y después se añaden
los registros de temp al archivo de datos EMPLEADO:
USE archanti
COPY TO temp.txt DELIMITED FOR numemp < 300
USE empleado
APPEND FROM temp.txt TYPE DELIMITED
Un Saludo
Mustafa
Mira haber si te puede servir esto:
APPEND FROM
Propósito Añade registros de otro archivo de datos o archivo de texto al final del archivo de datos seleccionado.
Sintaxis APPEND FROM nomarchivo [ámbito] [FOR expL] [[TYPE] SDF | {DELIMITED [WITH [BLANK | constante]}]
Argumentos nomarchivo Nombre del archivo cuyos registros/texto desea añadir. Incluya la vía si el archivo no está en el directorio activo.
ámbito Cláusula de ámbito usada para la selección del registro. El ámbito por defecto es todos (ALL).
FOR expL Expresión lógica usada para determinar los registros que van a seleccionarse. Sólo se incluyen los registros que cumplen la
condición FOR.
TYPE SDF | {DELIMITED [WITH BLANK | constante]}. Use esta cláusula cuando añada registros o texto de un archivo de texto delimitado.
Los archivos SDF (Formato de Datos del Sistema) contienen registros de longitud fija, con cada registro finalizado por un retorno de
carro/salto de línea (CRLF). Los campos de un archivo delimitado (valores separados por comas o CSV) están separados por comas y
cada registro se termina con un CRLF. Los campos no numéricos de un archivo CSV deben ir entre comillas dobles. Si se especifica
BLANK, los registros están delimitados por un solo espacio. Si usa el argumento constante en su lugar, debe especificar un solo carácter
delimitador entre comillas. Por ejemplo, el texto DELIMITED WITH '+' indica que los campos del archivo seleccionado se delimitan con un
signo más.
Uso Si las estructuras de los dos archivos no coinciden, sólo se copian los campos cuyo nombre y tipo sean iguales (los demás se dejan en
blanco).
En los dos formatos, SDF y delimitado (DELIMITED), la adición de registros se interrumpe en la marca de final de archivo (EOF). Los
campos memo no pueden añadirse desde un archivo SDF o delimitado; sólo puede hacerse desde otro archivo de datos.
Si añade desde un archivo SDF, asegúrese de que la longitud de los campos del archivo de datos de destino sea la misma que la del
archivo fuente. De lo contrario, cada campo se desplaza por la diferencia. Tenga en cuenta que no debe utilizar el parámetro FOR junto con
TYPE DELIMITED.
Puede utilizar un delimitador diferente a las comas (delimitador por defecto) en un archivo CSV especificando el delimitador como parte del
mandato APPEND FROM. Por ejemplo, la sentencia siguiente indica a CA-dBFast que el delimitador del archivo CSV es una barra:
APPEND FROM miarchivo DELIMITED WITH '/'
Ejemplo El ejemplo siguiente añade registros seleccionados del archivo denominado archanti al archivo denominado empleado (tenga en cuenta
que la expresión FOR sólo copia registros que contengan campos NUMEMP con valores menores de 300).
USE emPleado
APPEND FROM archanti FOR numemp < 300
En el ejemplo siguiente se copian los registros seleccionados de ARCHANTI en un archivo denominado TEMP.TXT y después se añaden
los registros de temp al archivo de datos EMPLEADO:
USE archanti
COPY TO temp.txt DELIMITED FOR numemp < 300
USE empleado
APPEND FROM temp.txt TYPE DELIMITED
Un Saludo
Mustafa
- esgici
- Posts: 4543
- Joined: Wed Jul 30, 2008 9:17 pm
- DBs Used: DBF
- Location: iskenderun / Turkiye
- Contact:
Re: APPEND FROM SDF
Hola Gonsan
For example :
If structure of your table is :
your .txt (SDF) file must be like this :
I guess that your AAA.TXT file doesn't have such structure (it's. not a SDF)
If you send a few line from this file I hope that we could help you.
Saludos
--
Esgici
This means your SDF file must have a record format identical to your table.As Mustafa wrote:Files SDF (System Data Format) contain fixed length records with each record completed by a return carriage / line feed (CRLF).
For example :
If structure of your table is :
Code: Select all
FIELD1 C 10 0
FIELD2 C 20 0
FIELD3 N 5 0
...
Code: Select all
....+....1....+....2....+....3....+ <-- ruler
alfonso demostrada 123 <CRLF>
do quixot delamancha 1611 <CRLF>
...
If you send a few line from this file I hope that we could help you.
Saludos
--
Esgici
Viva INTERNATIONAL HMG
- arturo_lopesoria
- Posts: 31
- Joined: Tue Sep 09, 2008 3:05 am
- Location: Mexico
Re: APPEND FROM SDF
Yo he tratado sin exito de importar desde un archivo delimitado con Pipe
esto es muy util cuando los datos contieen comas como parte del valor de un campo,por ejemplo, una descripcion
Al parecer a opcion DELIMITED WITH '|' no esta bien implementada en harbour,
pareciera como si unicamente soporta delimited with ','lo cual es exactamente igual a delimited
estoy usando hmg v3.0.25
C:\hmg.3.0.25\HARBOUR\bin>harbour
Harbour 2.0.0 (Rev. 13372)
Copyright (c) 1999-2010, http://www.harbour-project.org/
Saludos
Arturo
esto es muy util cuando los datos contieen comas como parte del valor de un campo,por ejemplo, una descripcion
Al parecer a opcion DELIMITED WITH '|' no esta bien implementada en harbour,
pareciera como si unicamente soporta delimited with ','lo cual es exactamente igual a delimited
estoy usando hmg v3.0.25
C:\hmg.3.0.25\HARBOUR\bin>harbour
Harbour 2.0.0 (Rev. 13372)
Copyright (c) 1999-2010, http://www.harbour-project.org/
Saludos
Arturo
- danielmaximiliano
- Posts: 2612
- Joined: Fri Apr 09, 2010 4:53 pm
- Location: Argentina
- Contact:
Re: APPEND FROM SDF
Hola a Todos :
Siempre es muy bueno preguntar sobre Harbour, tenemos mucha gente dispuesta a dar un mano o parte de sus conocimientos.
en mi aplicacion GS1, deje un ejemplo http://hmgforum.com/viewtopic.php?f=15&t=2439, utilizo esto : http://www.olszynka.pl/harbour/hbdoc/__dbsdf.htm
pero tenia la posibilidad de utilzar APPEND FROM me puse a buscar si habia mas metodos y me encontre que tambie se puede usar
__dbDelim() es igual que __dbSDF() pero se puede indicar el DELIMITADOR, a esto se debe que no se haya modificado APPEN FROM y
dejarlo como es "Original".
puede ud mirar la documentacion original que se encuentra en su SVN Harbour : C:\Harbour\doc\en\dbdelim.txt
o aqui http://www.olszynka.pl/harbour/hbdoc/__dbdelim.htm
Siempre es muy bueno preguntar sobre Harbour, tenemos mucha gente dispuesta a dar un mano o parte de sus conocimientos.
en mi aplicacion GS1, deje un ejemplo http://hmgforum.com/viewtopic.php?f=15&t=2439, utilizo esto : http://www.olszynka.pl/harbour/hbdoc/__dbsdf.htm
pero tenia la posibilidad de utilzar APPEND FROM me puse a buscar si habia mas metodos y me encontre que tambie se puede usar
__dbDelim() es igual que __dbSDF() pero se puede indicar el DELIMITADOR, a esto se debe que no se haya modificado APPEN FROM y
dejarlo como es "Original".
puede ud mirar la documentacion original que se encuentra en su SVN Harbour : C:\Harbour\doc\en\dbdelim.txt
o aqui http://www.olszynka.pl/harbour/hbdoc/__dbdelim.htm
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`. 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
- arturo_lopesoria
- Posts: 31
- Joined: Tue Sep 09, 2008 3:05 am
- Location: Mexico
Re: APPEND FROM SDF
Gracias.
Muy util la informacion
Saludos desdeMexico
Arturo LS
Muy util la informacion
Saludos desdeMexico
Arturo LS
-
- Posts: 4
- Joined: Wed Dec 06, 2017 4:22 pm
- DBs Used: DBF
Re: APPEND FROM SDF
Thanks for the information on this way I did not even think.
The next problem will be the adoption of the text / CSV format. I am already looking for it in the documents of Open Office. Only the translation does not work properly.
The next problem will be the adoption of the text / CSV format. I am already looking for it in the documents of Open Office. Only the translation does not work properly.
-
- Posts: 44
- Joined: Fri Jun 20, 2014 8:41 pm
Re: APPEND FROM SDF
If it's of any help, below is code to append from and copy to .csv files.
Regards,
Jeff
*****************************
**Routine to create a csv file for HBR
**It adds the header record that COPY To ... DELIMITED omits
procedure make_csv()
parameter csvfilename
local x, xhdr, xtemp, WshShell
xtemp = "temp1.dat"
xhdr = ""
FOR x := 1 to FCOUNT()
xhdr = xhdr + '"'+rtrim(FieldName(x))+'",'
NEXT
fhandle = fcreate(xtemp, 0)
if fhandle < 0
eti_msgbox("Error creating error file: "+ xtemp)
wait
quit
endif
writelen = fwrite(fhandle, xhdr)
if writelen <> len(xhdr)
eti_msgbox("Error writing to "+ xtemp)
quit
endif
fclose(fhandle)
copy to temp2.dat delimited
WshShell = win_OleCreateObject("WScript.Shell")
run_command = 'copy temp1.dat + temp2.dat '+csvfilename+' & del temp1.dat & del temp2.dat & exit'
WshShell:Run("cmd /K "+run_command, 0, 1)
return
*************************************************************************************
***Rountine to append from a CSV file for HBR
***It deletes the header record that APPEND FROM ... DELIMITED does not expect
procedure append_from_csv()
parameter csvfile
local curr_rec, x, y
count to x for deleted()
if x > 0
y = messagebox(0,"Trying to execure csv append to dbf with "+alias()+" which has deleted records."+chr(13)+chr(10)+;
"If you continue, deleted records will be removed.", 1, "ALERT")
endif
if y = 2
quit
return
endif
curr_rec = reccount()
append from &csvfile delimited
go curr_rec + 1
delete next 1
pack
return
Regards,
Jeff
*****************************
**Routine to create a csv file for HBR
**It adds the header record that COPY To ... DELIMITED omits
procedure make_csv()
parameter csvfilename
local x, xhdr, xtemp, WshShell
xtemp = "temp1.dat"
xhdr = ""
FOR x := 1 to FCOUNT()
xhdr = xhdr + '"'+rtrim(FieldName(x))+'",'
NEXT
fhandle = fcreate(xtemp, 0)
if fhandle < 0
eti_msgbox("Error creating error file: "+ xtemp)
wait
quit
endif
writelen = fwrite(fhandle, xhdr)
if writelen <> len(xhdr)
eti_msgbox("Error writing to "+ xtemp)
quit
endif
fclose(fhandle)
copy to temp2.dat delimited
WshShell = win_OleCreateObject("WScript.Shell")
run_command = 'copy temp1.dat + temp2.dat '+csvfilename+' & del temp1.dat & del temp2.dat & exit'
WshShell:Run("cmd /K "+run_command, 0, 1)
return
*************************************************************************************
***Rountine to append from a CSV file for HBR
***It deletes the header record that APPEND FROM ... DELIMITED does not expect
procedure append_from_csv()
parameter csvfile
local curr_rec, x, y
count to x for deleted()
if x > 0
y = messagebox(0,"Trying to execure csv append to dbf with "+alias()+" which has deleted records."+chr(13)+chr(10)+;
"If you continue, deleted records will be removed.", 1, "ALERT")
endif
if y = 2
quit
return
endif
curr_rec = reccount()
append from &csvfile delimited
go curr_rec + 1
delete next 1
pack
return