APPEND FROM SDF

HMG en Español

Moderator: Rathinagiri

Post Reply
gonsan
Posts: 11
Joined: Tue Mar 02, 2010 4:23 am

APPEND FROM SDF

Post by gonsan » Mon Aug 02, 2010 1:06 am

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

User avatar
mustafa
Posts: 664
Joined: Fri Mar 20, 2009 11:38 am
Location: Alicante - Spain
Been thanked: 70 times

Post by mustafa » Mon Aug 02, 2010 11:04 am

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 ;)

User avatar
esgici
Posts: 4441
Joined: Wed Jul 30, 2008 9:17 pm
DBs Used: DBF
Location: iskenderun / Turkiye
Has thanked: 329 times
Been thanked: 99 times
Contact:

Post by esgici » Mon Aug 02, 2010 1:21 pm

Hola Gonsan
As Mustafa wrote:Files SDF (System Data Format) contain fixed length records with each record completed by a return carriage / line feed (CRLF).
This means your SDF file must have a record format identical to your table.

For example :

If structure of your table is :

Code: Select all

    FIELD1   C    10 0
    FIELD2   C    20 0
    FIELD3   N     5 0
    ...
your .txt (SDF) file must be like this :

Code: Select all

....+....1....+....2....+....3....+     <-- ruler
alfonso   demostrada            123     <CRLF>
do quixot delamancha           1611     <CRLF>
...
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
Viva INTERNATIONAL HMG :D

User avatar
arturo_lopesoria
Posts: 23
Joined: Tue Sep 09, 2008 3:05 am
Location: Mexico

Post by arturo_lopesoria » Sat Sep 08, 2012 2:59 am

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

User avatar
danielmaximiliano
Posts: 2079
Joined: Fri Apr 09, 2010 4:53 pm
Location: Argentina
Has thanked: 114 times
Been thanked: 15 times
Contact:

Post by danielmaximiliano » Sun Sep 09, 2012 12:36 am

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
*´¨)
¸.·´¸.·*´¨) ¸.·*¨)
(¸.·´. (¸.·` *
.·`.HMG : It's magic !
(¸.·``··*

Saludos / Regards
DaNiElMaXiMiLiAnO

Whatsapp. : +54901169026142
Telegram Name : DaNiElMaXiMiLiAnO

User avatar
arturo_lopesoria
Posts: 23
Joined: Tue Sep 09, 2008 3:05 am
Location: Mexico

Post by arturo_lopesoria » Sun Sep 09, 2012 2:44 am

Gracias.
Muy util la informacion
Saludos desdeMexico
Arturo LS

wolfgang.schwarz
Posts: 4
Joined: Wed Dec 06, 2017 4:22 pm
DBs Used: DBF
Has thanked: 1 time

Post by wolfgang.schwarz » Thu Dec 14, 2017 7:01 pm

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.

Jeff Stone
Posts: 35
Joined: Fri Jun 20, 2014 8:41 pm
Been thanked: 1 time

Post by Jeff Stone » Fri Jan 05, 2018 7:29 pm

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

Post Reply