comparison hmdb/lib/csv.pm @ 0:9583f9772198 draft

Init and uploaded
author fgiacomoni
date Thu, 28 Jan 2016 10:52:26 -0500
parents
children
comparison
equal deleted inserted replaced
-1:000000000000 0:9583f9772198
1 package lib::csv ;
2
3 use strict;
4 use warnings ;
5 use Exporter ;
6 use Carp ;
7
8 use Text::CSV ;
9
10 use Data::Dumper ;
11
12 use vars qw($VERSION @ISA @EXPORT %EXPORT_TAGS);
13
14 our $VERSION = "1.0";
15 our @ISA = qw(Exporter);
16 our @EXPORT = qw( get_csv_object get_value_from_csv_multi_header );
17 our %EXPORT_TAGS = ( ALL => [qw( get_csv_object get_value_from_csv_multi_header )] );
18
19 =head1 NAME
20
21 My::Module - An example module
22
23 =head1 SYNOPSIS
24
25 use My::Module;
26 my $object = My::Module->new();
27 print $object->as_string;
28
29 =head1 DESCRIPTION
30
31 This module does not really exist, it
32 was made for the sole purpose of
33 demonstrating how POD works.
34
35 =head1 METHODS
36
37 Methods are :
38
39 =head2 METHOD new
40
41 ## Description : new
42 ## Input : $self
43 ## Ouput : bless $self ;
44 ## Usage : new() ;
45
46 =cut
47
48 sub new {
49 ## Variables
50 my $self={};
51 bless($self) ;
52 return $self ;
53 }
54 ### END of SUB
55
56 =head2 METHOD get_csv_object
57
58 ## Description : builds a csv object and etablishes format
59 ## Input : $separator
60 ## Output : $csv
61 ## Usage : my ( $csv ) = get_csv_object( $separator ) ;
62
63 =cut
64 ## START of SUB
65 sub get_csv_object {
66 ## Retrieve Values
67 my $self = shift ;
68 my ( $separator ) = @_ ;
69
70 # my $csv = Text::CSV->new({'sep_char' => "$separator"});
71 my $csv = Text::CSV->new ( {'sep_char' => "$separator", binary => 1 } ) # should set binary attribute.
72 or die "Cannot use CSV: ".Text::CSV->error_diag ();
73
74 return($csv) ;
75 }
76 ## END of SUB
77
78 =head2 METHOD get_value_from_csv_multi_header
79
80 ## Description : extract a targeted column in a csv file
81 ## Input : $csv, $file, $column, $is_header, $nb_header
82 ## Output : $value
83 ## Usage : my ( $value ) = get_value_from_csv_multi_header( $csv, $file, $column, $is_header, $nb_header ) ;
84
85 =cut
86 ## START of SUB
87 sub get_value_from_csv_multi_header {
88 ## Retrieve Values
89 my $self = shift ;
90 my ( $csv, $file, $column, $is_header, $nb_header ) = @_ ;
91
92 my @value = () ;
93
94 ## Adapte the number of the colunm : (nb of column to position in array)
95 $column = $column - 1 ;
96
97 open (CSV, "<", $file) or die $! ;
98
99 my $line = 0 ;
100
101 while (<CSV>) {
102 $line++ ;
103 chomp $_ ;
104 # file has a header
105 if ( defined $is_header and $is_header eq 'yes') { if ($line <= $nb_header) { next ; } }
106 # parsing the targeted column
107 if ( $csv->parse($_) ) {
108 my @columns = $csv->fields();
109 push ( @value, $columns[$column] ) ;
110 }
111 else {
112 my $err = $csv->error_input;
113 die "Failed to parse line: $err";
114 }
115 }
116 close CSV;
117 return(\@value) ;
118 }
119 ## END of SUB
120
121 =head2 METHOD parse_csv_object
122
123 ## Description : parse_all csv object and return a array of rows
124 ## Input : $csv, $file
125 ## Output : $csv_matrix
126 ## Usage : my ( $csv_matrix ) = parse_csv_object( $csv, $file ) ;
127
128 =cut
129 ## START of SUB
130 sub parse_csv_object {
131 ## Retrieve Values
132 my $self = shift ;
133 my ( $csv, $file ) = @_ ;
134
135 my @csv_matrix = () ;
136
137 open my $fh, "<:encoding(utf8)", $$file or die "Can't open csv file $$file: $!";
138
139 while ( my $row = $csv->getline( $fh ) ) {
140 push @csv_matrix, $row;
141 }
142 $csv->eof or $csv->error_diag();
143 close $fh;
144
145 return(\@csv_matrix) ;
146 }
147 ## END of SUB
148
149 =head2 METHOD parse_allcsv_object
150
151 ## Description : parse_all csv object and return a array of rows with or without header
152 ## Input : $csv, $file, $keep_header
153 ## Output : $csv_matrix
154 ## Usage : my ( $csv_matrix ) = parse_csv_object( $csv, $file, $keep_header ) ;
155
156 =cut
157 ## START of SUB
158 sub parse_allcsv_object {
159 ## Retrieve Values
160 my $self = shift ;
161 my ( $csv, $file, $keep_header ) = @_ ;
162
163 my @csv_matrix = () ;
164 my $line = 1 ;
165
166 open my $fh, "<:encoding(utf8)", $$file or die "Can't open csv file $$file: $!";
167
168 while ( my $row = $csv->getline( $fh ) ) {
169 if ( ( $keep_header eq 'n' ) and ($line == 1) ) { }
170 else { push @csv_matrix, $row; }
171 $line ++ ;
172 }
173 my $status = $csv->eof or $csv->error_diag();
174 close $fh;
175
176 return(\@csv_matrix, $status) ;
177 }
178 ## END of SUB
179
180
181 =head2 METHOD write_csv_from_arrays
182
183 ## Description : write a csv file from list of rows
184 ## Input : $csv, $file_name, $rows
185 ## Output : $csv_file
186 ## Usage : my ( $csv_file ) = write_csv_from_arrays( $csv, $file_name, $rows ) ;
187
188 =cut
189 ## START of SUB
190 sub write_csv_from_arrays {
191 ## Retrieve Values
192 my $self = shift ;
193 my ( $csv, $file_name, $rows ) = @_ ;
194
195 my $fh = undef ;
196 $csv->eol ("\n"); ## end-of-line string to add to rows
197 open $fh, ">:encoding(utf8)", "$file_name" or die "$file_name: $!";
198
199 my $status = $csv->print ($fh, $_) for @{$rows};
200 close $fh or die "$file_name: $!";
201
202 return(\$file_name) ;
203 }
204 ## END of SUB
205
206 1 ;
207
208
209 __END__
210
211 =head1 SUPPORT
212
213 You can find documentation for this module with the perldoc command.
214
215 perldoc csv.pm
216
217 =head1 Exports
218
219 =over 4
220
221 =item :ALL is get_csv_object, get_value_from_csv_multi_header
222
223 =back
224
225 =head1 AUTHOR
226
227 Franck Giacomoni E<lt>franck.giacomoni@clermont.inra.frE<gt>
228
229 =head1 LICENSE
230
231 This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself.
232
233 =head1 VERSION
234
235 version 1 : 23 / 10 / 2013
236
237 version 2 : ??
238
239 =cut