Graph-Reader-TGF-CSV

 view release on metacpan or  search on metacpan

CSV.pm  view on Meta::CPAN

package Graph::Reader::TGF::CSV;

use base qw(Graph::Reader::TGF);
use strict;
use warnings;

use Error::Pure qw(err);
use Text::CSV;

our $VERSION = 0.03;

# Edge callback.
sub _edge_callback {
	my ($self, $graph, $id1, $id2, $edge_label) = @_;
	my $status = $self->{'_csv'}->parse($edge_label);
	if (! $status) {
		err 'Cannot parse edge label.',
			'Error', $self->{'_csv'}->error_input,
			'String', $edge_label;
	}
	my %params = map { split m/=/ms, $_ } $self->{'_csv'}->fields;
	foreach my $key (keys %params) {
		$graph->set_edge_attribute($id1, $id2, $key, $params{$key});
	}
	return;
}

# Initialization.
sub _init {
	my ($self, $param_hr) = @_;
	$self->SUPER::_init();
	$self->{'_csv'} = Text::CSV->new({'binary' => 1});
	if (! $self->{'_csv'}) {
		err 'Cannot create Text::CSV object.',
			'Error', Text::CSV->error_diag;
	}
	return;
}

# Vertex callback.
sub _vertex_callback {
	my ($self, $graph, $id, $vertex_label) = @_;
	my $status = $self->{'_csv'}->parse($vertex_label);
	if (! $status) {
		err 'Cannot parse vertex label.',
			'Error', $self->{'_csv'}->error_input,
			'String', $vertex_label;
	}
	my %params = map { split m/=/ms, $_ } $self->{'_csv'}->fields;
	foreach my $key (keys %params) {
		$graph->set_vertex_attribute($id, $key, $params{$key});
	}
	return;
}

1;

__END__

=pod

=encoding utf8

=head1 NAME

Graph::Reader::TGF::CSV - Perl class for reading a graph from TGF format with CSV labeling.

=head1 SYNOPSIS

 use Graph::Reader::TGF::CSV;

 my $obj = Graph::Reader::TGF::CSV->new;
 my $graph = $obj->read_graph($tgf_csv_file);

=head1 METHODS

=over 8

=item C<new()>

 Constructor.
 This doesn't take any arguments.
 Returns Graph::Reader::TGF::CSV object.

=item C<read_graph($tgf_csv_file)>

 Read a graph from the specified file.
 The argument can either be a filename, or a filehandle for a previously opened file.
 Returns Graph object.

=back

=head1 TGF WITH CSV LABELING FILE FORMAT

 TGF = Trivial Graph Format
 TGF file format is described on L<English Wikipedia - Trivial Graph Format|https://en.wikipedia.org/wiki/Trivial_Graph_Format>
 Example with CSV labeling:
 1 label=First node,color=red
 2 label=Second node,color=cyan
 #
 1 2 label=Edge between the two,color=green

=head1 ERRORS

 new():
         Cannot create Text::CSV object.
                 Error: %s
         Cannot parse edge label.
                 Error: %s



( run in 0.702 second using v1.01-cache-2.11-cpan-71847e10f99 )