Hola
Os explico cómo lo estoy probando y parece que sale bien.
-Creo un fichero con un sólo campo de longitud igual a la del fichero 
correspondiente que voy a traspasar desde las IFS, eso por cada tipo de 
fichero diferente,( que son unos pocos, por eso no quiero hacer un 
programa con definición interna de ficheros para cada tipo de traspaso)
-copio el archivo de las IFS con CPYFRMSTMF
-luego con el fichero de un campo hago un cpyf *nochk al de base de datos 
que le corresponda.
Funcionar,funciona, pero si alguien tiene una opción más directa, se lo 
agradeceria.
La duda que me queda es: para qué sirve la opción FLDDFNFILE del 
CPYFRMIMPF???
Gracias





"Javier Mora" <[EMAIL PROTECTED]> 
Enviado por: [EMAIL PROTECTED]
13/07/2007 12:00
Por favor, responda a
"forum.help400" <[email protected]>


Para
"forum.help400" <[email protected]>
cc

Asunto
RE: CPYFRMIMPF






Bueno, es un caso complicado de resolver. Ese churro de registro (al 
estilo de DSPPFM) tiene varios inconvenientes:
 
1. Los signos.
2. Los campos empaquetados.
3. Las fechas.
4. Los campos nulos.
 
En estos casos yo opto por un programa de conversión que toma los datos 
del IFS, directamente utilizando APIs o a través de mandatos CPYFRMSTMF. 
El programa RPG valida que los tipos de datos concuerdan y los va 
traspasando uno a uno todos los registros.
 
Siempre que he intentado algún traspaso directo siempre me he encontrado 
con problemas, sobre todo de incompatibilidades.
 
En un entorno más controlado, es decir, yo genero el archivo de texto y 
estoy seguro de cada campo lo que es y su tipo. Este archivo siempre lo 
genero separado por comas (*.CSV) y a través de CPYFRMIMPF lo traspaso. 
Hay que tener en cuenta los siguientes parámetros:
 
- STMFLEN(*TOFILE)
- RCDDLM(*CRLF) = identifica el fin de registro por CR+LF. Si fuera un 
Linux/Unix entonces LF.
- DTAFMT(*DLM) = campos delimitados
- STRDLM(*DBLQUOTE) = delimitador de serie, la doble comilla (por ejemplo)
- FLDDLM(',') = delimitador de campos, la coma (por ejemplo)
 
Con esta fórmula evito muchos de los problemas que he tenido siempre 
utilizando herramientas como: peticiones de transferencias, ftp, archivos 
de texto con registros con todo en un "churro", etc.
 
 

De: [EMAIL PROTECTED] 
[mailto:[EMAIL PROTECTED] En nombre de 
[EMAIL PROTECTED]
Enviado el: viernes, 13 de julio de 2007 10:24
Para: forum.help400
Asunto: RE: CPYFRMIMPF


Hola 
Estoy en V5R3 
Los archivos me los envian directamente por FTP desde un UNIX y en  ASCII 
con lo cual queda toda la butifarra de caracteres que corresponde a una 
definicion de fichero, igual que si haces un DSPPFM. Mi intencion es poder 
importar en un sólo paso y no tener que hacer un programa de importación 
con definicion intrerna de ficheros para cada archivo que voy a recibir, 
que son unos cuantos... 



"Javier Mora" <[EMAIL PROTECTED]> 
Enviado por: [EMAIL PROTECTED] 
13/07/2007 10:08 

Por favor, responda a
"forum.help400" <[email protected]>



Para
"forum.help400" <[email protected]> 
cc

Asunto
RE: CPYFRMIMPF








Hola Alberto: 
  
¿En que versión del S.O. estás? Dependiendo de la versión el mandato tiene 
comportamientos distintos. 
  
¿En qué formato está el archivo en el IFS? 
  
Yo, en V5R4 y con archivos separados por comas (CSV) estoy traspasando 
datos a un archivo de base de datos. No he utilizado nunca el parámetro 
FLDDFNFILE. 
  
Si me das algo más de información, a lo mejor, puedo ayudarte. 
 
Un saludo, 
Javier Mora 

De: [EMAIL PROTECTED] 
[mailto:[EMAIL PROTECTED] En nombre de 
[EMAIL PROTECTED]
Enviado el: viernes, 13 de julio de 2007 9:34
Para: forum.help400
Asunto: CPYFRMIMPF


Hola. 
A ver si alguien hace servir habitualmente el comando CPYFRMIMPF para 
copiar ficheros de las IFS a base de datos. 
El tema es que estoy intentando copiar un *.txt con estructura de base de 
datos y no me deja. He hecho la prueba de copiar yo mismo este fichero 
desde la base de datos a las carpetas con CPYTOIMPF y luego recuperarlo 
con CPYFRMIMPF y no me lo recupera, me dice que 
  10 - Los datos del archivo de definición de campos no son correctos para 
 TOFILE. 
como archivo de definicion( el parámetro FLDDFNFILE) le he puesto el 
miembro que contiene las DDS de este archivo. 
Si esto no lo pongo, me obliga a poner  DTAFMT como *DLM y tampoco copia 
nada porque me da un error de correlación de datos en el miembro. 
===> CPYFRMIMPF FROMSTMF('/home/albert/fitxeftp.txt') 
TOFILE(ALBERT/FITXEFTP) RCDDLM(*CRLF) DTAFMT(*FIXED) 
FLDDFNFILE(ALBERT/QDDSSRC FITXEFTP) 

PD: es la primera vez que utilizo este mandato para copiar datos en un 
archivo de base de datos con más de un campo.Siempre lo habia hecho con un 
sólo campo igual a la longitud de registro.             
Gracias.                                                           
__________________________________________________
Forum.HELP400 es un servicio m&amp;#225;s de NEWS/400.
&amp;#169; Publicaciones Help400, S.L. - Todos los derechos reservados
http://www.help400.es
_____________________________________________________

Para darte de baja visita la siguente URL:
http://listas.combios.es/mailman/listinfo/forum.help400 
__________________________________________________
Forum.HELP400 es un servicio m&amp;#225;s de NEWS/400.
&amp;#169; Publicaciones Help400, S.L. - Todos los derechos reservados
http://www.help400.es
_____________________________________________________

Para darte de baja visita la siguente URL:
http://listas.combios.es/mailman/listinfo/forum.help400
__________________________________________________
Forum.HELP400 es un servicio m&amp;#225;s de NEWS/400.
&amp;#169; Publicaciones Help400, S.L. - Todos los derechos reservados
http://www.help400.es
_____________________________________________________

Para darte de baja visita la siguente URL:
http://listas.combios.es/mailman/listinfo/forum.help400

Responder a