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

Responder a