libsim Versione 7.2.1
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
22IMPLICIT NONE
23
24TYPE,EXTENDS(vol7d_serialize) :: vol7d_serialize_csvdba
25 CONTAINS
26 PROCEDURE :: vol7d_serialize_optionparser
27 PROCEDURE :: vol7d_serialize_parse
28 PROCEDURE :: vol7d_serialize_export
29END TYPE vol7d_serialize_csvdba
30
31PRIVATE
32PUBLIC vol7d_serialize_csvdba, vol7d_serialize_csvdba_new
33
34CONTAINS
35
36FUNCTION vol7d_serialize_csvdba_new() RESULT(this)
37TYPE(vol7d_serialize_csvdba) :: this
38
39this%vol7d_serialize = vol7d_serialize_new()
40
41END FUNCTION vol7d_serialize_csvdba_new
42
43
44SUBROUTINE vol7d_serialize_optionparser(this, opt, ext)
45CLASS(vol7d_serialize_csvdba),INTENT(inout) :: this
46TYPE(optionparser),INTENT(inout),OPTIONAL :: opt
47CHARACTER(len=*),INTENT(in),OPTIONAL :: ext
48
49IF (PRESENT(ext)) THEN
50 this%ext = ext
51ELSE
52 this%ext = 'csv'
53ENDIF
54
55! reset unconditionally some parameters
56this%cachedesc = .true.
57this%column = 'ana,network,time,level,timerange,var,value'
58this%loop = 'time,timerange,level,ana,network,var'
59! no options, the rest all set to default
60
61END SUBROUTINE vol7d_serialize_optionparser
62
63
64SUBROUTINE vol7d_serialize_parse(this, category)
65CLASS(vol7d_serialize_csvdba),INTENT(inout) :: this
66INTEGER,INTENT(in),OPTIONAL :: category
67
68! call the original method
69CALL this%vol7d_serialize%vol7d_serialize_parse(category)
70
71END SUBROUTINE vol7d_serialize_parse
72
73
74SUBROUTINE vol7d_serialize_export(this, iun)
75CLASS(vol7d_serialize_csvdba),INTENT(inout) :: this
76INTEGER,INTENT(in) :: iun
77
78CHARACTER(len=64),TARGET,ALLOCATABLE :: col(:)
79CHARACTER(len=2048),TARGET :: line
80CHARACTER(len=1),POINTER :: pline
81INTEGER :: i
82TYPE(vol7d_serialize_iterline) :: linei
83TYPE(vol7d_serialize_itercol) :: coli
84
85! make csv header and count columns
86i = 0; line = ''
87coli = this%vol7d_serialize_itercol_new()
88DO WHILE(coli%next())
89 i = i + 1
90 IF (i /= 1) THEN
91 line(len_trim(line)+1:) = ','
92 ENDIF
93! use double pointer to avoid ICE on IBM xlf compiler
94 pline => line(len_trim(line)+1:len_trim(line)+1)
95 CALL coli%export(c_loc(pline))
96END DO
97
98WRITE(iun,'(A)')trim(line)
99ALLOCATE(col(i))
100
101! loop over lines
102linei = this%vol7d_serialize_iterline_new()
103DO WHILE(linei%next())
104 i = 0; line = ''
105 coli = linei%vol7d_serialize_itercol_new()
106 DO WHILE(coli%next())
107 i = i + 1
108 IF (i /= 1) THEN
109 line(len_trim(line)+1:) = ','
110 ENDIF
111 CALL coli%export(c_loc(col(i)(1:1)))
112 line(len_trim(line)+1:) = col(i)
113 END DO
114 WRITE(iun,'(A)')trim(line)
115END DO
116
117END SUBROUTINE vol7d_serialize_export
118
119END MODULE vol7d_serialize_csvdba_class
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.