Importar archivo txt en synoptique pcvue

Sabrina -  
 cyrilM -
Hola,
Quiero importar un archivo txt y mostrarlo en una listbox de un synoptique pcvue, estoy intentando hacerlo con un script VBA pero no lo logro.. ¿Alguien podría decirme cómo hacerlo????

Gracias de antemano.

Configuración: Windows XP / Internet Explorer 8.0

1 respuesta

  1. cyrilM
     
    Hola no sé si esto puede ayudarte, pero a partir de un archivo en PCVUE tengo un ejemplo para crear un archivo Excel *.CSV

    'Versión 1
    '************************************************************************
    'Este programa permite obtener informes diarios y mensuales
    ' en formato csv directamente explotables bajo EXCEL .
    '************************************************************************

    ' ** Uso ** :

    'Este programa lee para cada informe un archivo que contiene la lista de variables .
    ' Un archivo opcional puede contener el título del informe .
    'Estos archivos estarán en el directorio TP del proyecto .
    'Se pueden modificar dinámicamente en tiempo de ejecución.

    'Por ejemplo el archivo report1 contendrá los nombres de variables:
    'DATE
    'TIME
    'MOTEUR1.TEMPS
    'MOTEUR2.TEMPS

    'El archivo opcional Report1_Title contendría por ejemplo
    'los títulos de cada columna :
    'Date;Heure;Temps Moteur1;Temps Moteur2
    'No olvidar hacer un salto de línea al final de este archivo.

    'Se obtendrá automáticamente una copia de ambos archivos ejecutando el main( )
    'con una variable creation_option igual a 1 .

    'En salida para el informe report1 por ejemplo se obtendrán los siguientes archivos:
    ' un diario report1_Jour_Mois_Annee_D.csv
    ' un mensual report1_Mois_Annee_M.csv
    'El nombre de estos archivos es configurable modificando las variables Day_Format y
    'Month_Format
    'Estos estarán en el directorio TP del proyecto pero se podrá cambiar la ruta
    'en modificando la variable Path_reports del programa.

    'Lanzamiento:

    'El programa Report.prg podría lanzarse usando la instrucción
    'PROGRAM ("START","/UTILITIES/Report_v1.prg" , "");
    'Pero hay que adaptarlo y copiarlo en el directorio P de tu proyecto.
    'La instrucción se convertiría en:
    'PROGRAM ("START","Report_v1.prg" , "");

    'Hay que modificar la función main añadiendo una llamada Add_report para cada informe deseado.
    'Por ejemplo para obtener dos informes report1 y report2 la función deberá contener
    ' Add_report( "report1" ) ;
    ' Add_report( "report2" ) ;

    'Ejecución :

    'Cada llamada de la función write_reports( ) se traducirá en un nuevo registro
    ' de las variables.

    '************************************************************************
    '************************************************************************
    '************************************************************************

    const Type_Bit=1 ;
    const Type_Register=2;
    const Type_Text=4 ;
    const Type_Alarm=8 ;
    const MAX_REPORTS=64 ;
    Dim Number_reports as integer ;
    Dim list_report[64] as str ;
    dim Path_reports as str; 'Ruta de los informes
    dim separator as str; 'separador
    Dim Day_Format as str; 'Formato configurable del archivo diario del informe
    Dim Month_Format as str; 'Formato configurable del archivo mensual del informe
    Dim title_extension as str; 'extensión para el archivo de título
    Dim creation_option as integer ; ' Opción para crear archivos de muestra =1 crear
    Dim main_executed as integer; ' (=0 programa principal no ejecutado) (=1 ejecutado )

    '*************************************************************

    '-------------------------------------------------------------------------------------------------------------------------------

    sub main ( )

    main_executed =1 ; 'El programa principal se ha ejecutado una vez

    '*************************************************************
    '**********Variables locales que se pueden modificar ******
    '*************************************************************
    ' ruta para los archivos generados
    ' Path_reports ="d:\\Reports\\" ; 'para almacenar en d:\reports por ejemplo

    Path_reports =" " ; 'Por defecto dentro del directorio TP del proyecto

    Path_reports ="D:\\IMP_MEASURE\\" ; 'para almacenar en d:\reports por ejemplo

    separator =";" ; 'separator entre valores
    Title_extension ="_title" ; 'extensión para obtener el título del informe

    'para el significado de los caracteres # consultar la instrucción scada basic datetimestring
    Day_Format ="_#D_#M_###Y_Jour.csv" ; 'Formato para los informes diarios
    Month_Format ="_#M_###Y_Mois.csv" ; 'Formato para los informes mensuales

    creation_option =1; ' si 1 se creará automáticamente un ejemplo .

    '*************************************************************

    Add_report( "CAR1" ) ;
    Add_report( "CAR2" ) ;
    Add_report( "CAR3" ) ;
    Add_report( "CAR4" ) ;
    Add_report( "CAR5" ) ;
    Add_report( "DEGREMONT AA 6" ) ;
    Add_report( "DEGREMONT AD 7" ) ;
    Add_report( "DEGREMONT BX 9" ) ;
    Add_report( "DEGREMONT BZ 10" ) ;
    Add_report( "DEGREMONT CZ 11" ) ;
    Add_report( "DEGREMONT DC 12" ) ;
    Add_report( "DEGREMONT DX 13" ) ;
    Add_report( "DEGREMONT DZ 14" ) ;
    Add_report( "DEGREMONT EN 15" ) ;
    Add_report( "DEGREMONT EZ 16" ) ;
    Add_report( "DEGREMONT FE 17" ) ;
    Add_report( "DEGREMONT FZ 18" ) ;
    Add_report( "DEGREMONT GW 19" ) ;
    Add_report( "CAR6" ) ;

    '*************************************************************
    ' Example para programar un scheduler para escribir los informes cada hora
    ' Crontab ("ADDPROG","EACH_HOUR","", "00","Report_v1.prg","", "write_reports");

    end sub

    sub write_reports ( )
    dim i_report as integer; ' esta función debe llamarse para escribir un nuevo registro dentro de los diferentes informes
    'por ejemplo puedes usar una acción programada con una frecuencia de cada hora :

    if ( main_executed ==0 ) then 'seguridad
    main ( ); ' Ejecutar el programa principal porque no fue ejecutado
    end if
    for ( i_report = 0 ; i_report < Number_reports ; i_report++ )
    'print ( i_report , " " , List_report[ i_report] );
    Write_record ( List_report[ i_report] ) ;
    next
    end sub

    '-------------------------------------------------------------------------------------------------------------------------------

    sub Add_report (which_report)
    ' Esta función añade un nuevo informe a la lista

    dim ret as integer;
    dim sample_title as str;
    dim report_title_file as str;

    fclose(which_report );
    ret=fopen (which_report, "r") ;
    fclose(which_report );
    if (ret ==0 ) then 'el informe no existe
    if ( creation_option ) then 'Crear un archivo de muestra para el informe
    ' crear un archivo de muestra variable
    create_file (which_report , "DATE\nTIME\n\SYSTEM.STATION_NUMBER") ;
    ' crear un archivo de título de muestra
    sample_title = concat("Example title ", which_report,";time;Number of the station\n") ;

    report_title_file=addstring (which_report,Title_extension) ;
    create_file (report_title_file,sample_title ) ;
    else
    print ("Unknown report file " , which_report );
    return ( 0) ;
    end if
    end if
    ' añadir a la lista
    if (Number_reports < MAX_REPORTS ) then
    List_report[Number_reports]=which_report ;
    Number_reports=Number_reports +1 ;
    'print (Number_reports , " reports " ,which_report );
    else
    print (Number_reports , " Too many reports for " ,which_report );
    end if
    end sub

    '-------------------------------------------------------------------------------------------------------------------------------

    sub Write_record (which_report)
    ' Esta función añade un nuevo registro al informe llamado which_report

    dim j_nbvar as integer;
    dim info as str;
    dim Value_Register as single; 'Registro de valor
    dim Value_Bit as integer; 'Valor de bit
    dim Value_Text as str; 'Valor de texto
    dim report_title_file as str ; 'Título del informe
    dim model_buffer as long;
    dim eof as integer;
    dim variable_name as str; 'nombre de la variable
    dim Destination_File as str;
    dim Day_file as str;
    dim Month_file as str;
    dim File_Format as str;
    dim ret as integer;
    dim Type as integer; 'tipo de variable
    j_nbvar=0; ' índice de variable

    fclose(which_report );
    ret=fopen (which_report, "r") ;
    if (ret ==0 ) then 'archivo no existe
    print ("Unknown file " , which_report );
    return ( 0 );
    end if

    Destination_File=addstring(Path_reports ,which_report ); 'añade la ruta

    File_Format=datetimestring (datetimevalue ( ), Day_Format );
    Day_file=addstring (Destination_File,File_Format); 'Nombre del archivo diario
    File_Format=datetimestring (datetimevalue ( ), Month_Format );
    Month_file=addstring (Destination_File,File_Format); 'Nombre del archivo mensual

    report_title_file=addstring(which_report,Title_extension) ;
    model_buffer=0;
    model_buffer=filetobuf(report_title_file);
    if ( model_buffer ) then 'hay un archivo de título
    ' Copiar el modelo en Day_file ;
    Copy_model ( model_buffer,Day_file ) ; 'copia un modelo en Day_file
    Copy_model ( model_buffer,Month_file ) ; 'copia un modelo en Month_file
    free_buffer (model_buffer); 'liberar el buffer asignado
    end if

    'fclose (Day_file);
    'fclose (Month_file);
    'fopen ( Day_file , "a" ); 'abrir para escribir al final (modo append)
    'fopen ( Month_file , "a" ); 'abrir para escribir al final (modo append)

    'print (" files ", Day_file, " ", Month_file);
    eof=0;
    while (eof==0)
    variable_name=fgets( which_report, 128);
    variable_name=ltrim( rtrim ( variable_name)); 'eliminar espacios
    variable_name=ucase(variable_name) ; 'mayúsculas
    eof=feof( which_report);

    if ( variable("STATUS",variable_name,"exist") )then
    Type=variable("GET_TYPE",variable_name);
    if (Type==Type_Register )then

    if ( cmpstring (right(variable_name,4),".CTM" )==0 ) then
    Value_Register=(?variable_name/3600); 'valor de registro con conversión
    else
    Value_Register=?variable_name; 'valor de registro
    end if
    info=toc(Value_Register);

    else
    if (Type==Type_Bit || Type==Type_Alarm )then
    Value_Bit=?variable_name; 'valor de bit
    info=toc(Value_Bit);
    else
    if (Type==Type_Text )then
    info=?variable_name; 'valor de texto
    end if
    end if
    end if
    end if

    if ( variable("STATUS",variable_name,"VALID" ) ==0) then
    info="?";
    end if
    else 'la variable no existe
    if ( cmpstring ( variable_name, "" )==0) then
    info=""; 'variable reservada
    else
    info=addstring("???? unexisting variable " ,variable_name);
    print ( "???? unexisting variable " ,variable_name );
    end if
    end if
    if ( j_nbvar ) then
    info=addstring(separator ,info );
    end if
    'fputs ( Day_file,info);
    'fputs ( Month_file,info);
    j_nbvar++;
    ' print ( j_nbvar," variable " ,variable_name , " " , Type );

    wend

    'fputs ( Day_file,"\n"); ' añade un CRLF (salto de línea)
    'fputs ( Month_file,"\n"); ' añade un CRLF (salto de línea)

    fclose ( which_report);
    'fclose (Day_file);
    'fclose (Month_file);

    end sub

    '-------------------------------------------------------------------------------------------------------------------------------

    sub Copy_model ( model_file, file )
    'Esta función copiará un archivo de modelo en un archivo vacío
    fclose (file );
    if (fopen ( file, "r" )==0 ) then ' nuevo archivo copia el modelo si existe
    buftofile ( model_file,file); 'copiar el modelo de título
    end if
    fclose (file);

    end sub

    '-------------------------------------------------------------------------------------------------------------------------------

    sub concat ( str1,str2,str3 )
    ' Esta función devuelve una cadena igual a str1+str2+str3
    dim ch as str;
    ch=addstring( str1,str2) ;
    ch=addstring( ch,str3) ;
    return ( ch );
    end sub

    '-------------------------------------------------------------------------------------------------------------------------------

    sub create_file ( file , content

    -1