libsim Versione 8.0.0
vol7d_serialize_csvdba_class.F03
1! Copyright (C) 2010 ARPA-SIM <urpsim@smr.arpa.emr.it>
2! authors:
3! Davide Cesari <dcesari@arpa.emr.it>
4! Paolo Patruno <ppatruno@arpa.emr.it>
5
6! This program is free software; you can redistribute it and/or
7! modify it under the terms of the GNU General Public License as
8! published by the Free Software Foundation; either version 2 of
9! the License, or (at your option) any later version.
10
11! This program is distributed in the hope that it will be useful,
12! but WITHOUT ANY WARRANTY; without even the implied warranty of
13! MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14! GNU General Public License for more details.
15
16! You should have received a copy of the GNU General Public License
17! along with this program. If not, see <http://www.gnu.org/licenses/>.
18MODULE vol7d_serialize_csvdba_class
19use,INTRINSIC :: iso_c_binding
23IMPLICIT NONE
24
25TYPE,EXTENDS(vol7d_serialize) :: vol7d_serialize_csvdba
26 CONTAINS
27 PROCEDURE :: vol7d_serialize_optionparser
28 PROCEDURE :: vol7d_serialize_parse
29 PROCEDURE :: vol7d_serialize_export
30END TYPE vol7d_serialize_csvdba
31
32PRIVATE
33PUBLIC vol7d_serialize_csvdba, vol7d_serialize_csvdba_new
34
35CONTAINS
36
37FUNCTION vol7d_serialize_csvdba_new() RESULT(this)
38TYPE(vol7d_serialize_csvdba) :: this
39
40this%vol7d_serialize = vol7d_serialize_new()
41
42END FUNCTION vol7d_serialize_csvdba_new
43
44
45SUBROUTINE vol7d_serialize_optionparser(this, opt, ext)
46CLASS(vol7d_serialize_csvdba),INTENT(inout) :: this
47TYPE(optionparser),INTENT(inout),OPTIONAL :: opt
48CHARACTER(len=*),INTENT(in),OPTIONAL :: ext
49
50IF (PRESENT(ext)) THEN
51 this%ext = ext
52ELSE
53 this%ext = 'csv'
54ENDIF
55
56! reset unconditionally some parameters
57this%cachedesc = .true.
58this%column = 'ana,network,time,level,timerange,var,value'
59this%loop = 'time,timerange,level,ana,network,var'
60! no options, the rest all set to default
61
62END SUBROUTINE vol7d_serialize_optionparser
63
64
65SUBROUTINE vol7d_serialize_parse(this, category)
66CLASS(vol7d_serialize_csvdba),INTENT(inout) :: this !< object having undorgone the vol7d_serialize_optionparser method
67TYPE(l4f_handle),INTENT(in),OPTIONAL :: category !< log4fortran category for logging error messages
68
69! call the original method
70CALL this%vol7d_serialize%vol7d_serialize_parse(category)
71
72END SUBROUTINE vol7d_serialize_parse
73
74
75SUBROUTINE vol7d_serialize_export(this, iun)
76CLASS(vol7d_serialize_csvdba),INTENT(inout) :: this
77INTEGER,INTENT(in) :: iun
78
79CHARACTER(len=64),TARGET,ALLOCATABLE :: col(:)
80CHARACTER(len=2048),TARGET :: line
81CHARACTER(len=1),POINTER :: pline
82INTEGER :: i
83TYPE(vol7d_serialize_iterline) :: linei
84TYPE(vol7d_serialize_itercol) :: coli
85
86! make csv header and count columns
87i = 0; line = ''
88coli = this%vol7d_serialize_itercol_new()
89DO WHILE(coli%next())
90 i = i + 1
91 IF (i /= 1) THEN
92 line(len_trim(line)+1:) = ','
93 ENDIF
94! use double pointer to avoid ICE on IBM xlf compiler
95 pline => line(len_trim(line)+1:len_trim(line)+1)
96 CALL coli%export(c_loc(pline))
97END DO
98
99WRITE(iun,'(A)')trim(line)
100ALLOCATE(col(i))
101
102! loop over lines
103linei = this%vol7d_serialize_iterline_new()
104DO WHILE(linei%next())
105 i = 0; line = ''
106 coli = linei%vol7d_serialize_itercol_new()
107 DO WHILE(coli%next())
108 i = i + 1
109 IF (i /= 1) THEN
110 line(len_trim(line)+1:) = ','
111 ENDIF
112 CALL coli%export(c_loc(col(i)(1:1)))
113 line(len_trim(line)+1:) = col(i)
114 END DO
115 WRITE(iun,'(A)')trim(line)
116END DO
117
118END SUBROUTINE vol7d_serialize_export
119
120END MODULE vol7d_serialize_csvdba_class
classe per la gestione del logging
Module for parsing command-line optons.
Extension of vol7d_class for serializing the contents of a volume.
Class for serializing a vol7d object.

Generated with Doxygen.