libsim  Versione8.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/>.
18 MODULE vol7d_serialize_csvdba_class
19 use,INTRINSIC :: iso_c_binding
20 USE log4fortran
23 IMPLICIT NONE
24 
25 TYPE,EXTENDS(vol7d_serialize) :: vol7d_serialize_csvdba
26  CONTAINS
27  PROCEDURE :: vol7d_serialize_optionparser
28  PROCEDURE :: vol7d_serialize_parse
29  PROCEDURE :: vol7d_serialize_export
30 END TYPE vol7d_serialize_csvdba
31 
32 PRIVATE
33 PUBLIC vol7d_serialize_csvdba, vol7d_serialize_csvdba_new
34 
35 CONTAINS
36 
37 FUNCTION vol7d_serialize_csvdba_new() RESULT(this)
38 TYPE(vol7d_serialize_csvdba) :: this
39 
40 this%vol7d_serialize = vol7d_serialize_new()
41 
42 END FUNCTION vol7d_serialize_csvdba_new
43 
44 
45 SUBROUTINE vol7d_serialize_optionparser(this, opt, ext)
46 CLASS(vol7d_serialize_csvdba),INTENT(inout) :: this
47 TYPE(optionparser),INTENT(inout),OPTIONAL :: opt
48 CHARACTER(len=*),INTENT(in),OPTIONAL :: ext
49 
50 IF (PRESENT(ext)) THEN
51  this%ext = ext
52 ELSE
53  this%ext = 'csv'
54 ENDIF
55 
56 ! reset unconditionally some parameters
57 this%cachedesc = .true.
58 this%column = 'ana,network,time,level,timerange,var,value'
59 this%loop = 'time,timerange,level,ana,network,var'
60 ! no options, the rest all set to default
61 
62 END SUBROUTINE vol7d_serialize_optionparser
63 
64 
65 SUBROUTINE vol7d_serialize_parse(this, category)
66 CLASS(vol7d_serialize_csvdba),INTENT(inout) :: this
67 TYPE(l4f_handle),INTENT(in),OPTIONAL :: category
68 
69 ! call the original method
70 CALL this%vol7d_serialize%vol7d_serialize_parse(category)
71 
72 END SUBROUTINE vol7d_serialize_parse
73 
74 
75 SUBROUTINE vol7d_serialize_export(this, iun)
76 CLASS(vol7d_serialize_csvdba),INTENT(inout) :: this
77 INTEGER,INTENT(in) :: iun
78 
79 CHARACTER(len=64),TARGET,ALLOCATABLE :: col(:)
80 CHARACTER(len=2048),TARGET :: line
81 CHARACTER(len=1),POINTER :: pline
82 INTEGER :: i
83 TYPE(vol7d_serialize_iterline) :: linei
84 TYPE(vol7d_serialize_itercol) :: coli
85 
86 ! make csv header and count columns
87 i = 0; line = ''
88 coli = this%vol7d_serialize_itercol_new()
89 DO 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))
97 END DO
98 
99 WRITE(iun,'(A)')trim(line)
100 ALLOCATE(col(i))
101 
102 ! loop over lines
103 linei = this%vol7d_serialize_iterline_new()
104 DO 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)
116 END DO
117 
118 END SUBROUTINE vol7d_serialize_export
119 
120 END MODULE vol7d_serialize_csvdba_class
Extension of vol7d_class for serializing the contents of a volume.
Module for parsing command-line optons.
Class for serializing a vol7d object.
classe per la gestione del logging

Generated with Doxygen.