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