#!perl -w # Outputs the distribution of line lengths, for use in wrap.pl # Copyright 2015 Ken Takusagawa # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . while(<>){ if(/^INSERT INTO cable \(id, date, refid, classification, origin, destination, header, content\) VALUES /){ &process($l); $l=$_; } else { $l.=$_; } } &process($l); print STDERR "count $count bytes $bytes\n"; &end(); sub process { my $s=shift; $bytes+= length$s; return if ($s =~ /^--\n-- PostgreSQL database dump\n--/s); $count++; my @m; die unless (@m = $s =~ /^INSERT INTO cable \(id, date, refid, classification, origin, destination, header, content\) VALUES \((\d+), '(([^']|'')*?)', '(([^']|'')*?)', '(([^']|'')*?)', '(([^']|'')*?)', '(([^']|'')*?)', '(([^']|'')*?)', '(.*)'\);\n(?:$|.*-- PostgreSQL database dump complete)/s); my @d; push @d,shift@m; while(@m){ push @d,shift@m; shift@m; }; die unless @d==8; #for(0..$#d){ print "item $_ $d[$_]\n"; } print "\n"; for$i(2..5){ die $d[$i] unless &single_line($d[$i]); } do_work(@d); }; sub single_line { my $s=shift; $s =~/^[ -~]*$/; } sub do_work { die unless @_==8; &line_lengths($_) for(@_); } sub just_print { die unless @_==8; print "INSERT INTO cable (id, date, refid, classification, origin, destination, header, content) VALUES ($_[0], '$_[1]', '$_[2]', '$_[3]', '$_[4]', '$_[5]', '"; multiline_print($_[6]); print "', '"; multiline_print($_[7]); print "');\n"; } sub multiline_print { my @F=split /^/,$_[0]; print for (@F); } sub line_lengths { my$a=shift; $a =~ s/''/'/g; $a =~ s/\\\\/\\/g; my @F=split /^/,$a; for(@F){ $ls{length$_}++; } } sub end { &end_line_lengths(); } sub end_line_lengths { for(keys %ls){ print "$_ $ls{$_}\n"; } print STDERR "done\n"; }