Error en READ DATASET

Colapsar
X
 
  • Tiempo
  • Mostrar
Limpiar Todo
nuevos mensajes
  • karinastolen
    Member
    • mar
    • 60

    #1

    Error en READ DATASET

    Hola!

    Estoy leyendo un archivo xml del servidor, y esta pasando algo raro, solo lee en la primera iteración del ciclo y despues devuelve sy-subrc = 4 la sentencia READ DATASET. Al forzar el código a que continue a pesar del sy-subrc = 4, resulta que si lee y obtengo el resultado esperado. Alguna idea de porque esta devolviendo ese error?

    Este es el código:

    Código:
    v_filename = '\\mxmtysapdf02\sapmnt\trans\xmlfile.xml'.
    
    OPEN DATASET v_filename FOR INPUT IN BINARY MODE.
    
    DATA bandera type i.
    
    IF sy-subrc NE 0.
      WRITE:/ 'invalid file'.
    ELSE.
      DO.
        READ DATASET v_filename INTO g_xml_line.
    
        IF sy-subrc EQ 0." or bandera ne 5.
    
    *      bandera = bandera + 1.
    
          APPEND g_xml_line TO g_xml_table.
    
        ELSE.
          EXIT.
        ENDIF.
      ENDDO.
    
      CLOSE DATASET v_filename.
    
    ENDIF.
    Quitando los comentarios si funciona. Hay otra manera de determinar el final del archivo?

    Gracias anticipadas.
    "Experience is what you get when you didn't get what you wanted." Randy Pausch
  • karinastolen
    Member
    • mar
    • 60

    #2
    Lo he resuelto

    Me respondieron en el foro sdn :

    Esto es debido a que lee "una parte" y otra no de la ultima línea del fichero. Por ejemplo, el fichero es de 420 bytes y la tabla con la que lee es de 80, en la ultima iteración quedarán 20 bytes descolgados (80 * 5 = 400) por lo que leerá 20 bytes bien y 60 vacíos.

    Para solucionarlo declare una variable tipo i para almacenar el lenght de cada registro leído para validar que sea diferente de 0 posteriormente.

    Código:
      
    DO.
        READ DATASET v_filename INTO g_xml_line LENGTH len.
    
        IF sy-subrc EQ 0 OR len NE 0.
    
          APPEND g_xml_line TO g_xml_table.
    
        ELSE.
          EXIT.
        ENDIF.
    ENDDO.
    "Experience is what you get when you didn't get what you wanted." Randy Pausch

    Comentario

    Trabajando...