Importar archivo txt en synoptique pcvue
Sabrina
-
cyrilM -
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
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
-
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