自己第一个perl 脚本
时间:2007-02-15 来源:ilovedebian
在工作中实际遇上的问题需要把debian的源导入数据库中
#!/usr/bin/perl
##!/usr/bin/perl -w
# Written by John Yu <[email protected]>
# for Packages translate database(PostgreSQL) to help web team
# This perl script 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.
# 2006.6.9
use strict;
#use warnings;
#my $filename="test.txt";
my $filename = "Packages.1";
#my $filename = "/var/lib/dpkg/available";
my $TableName="tab_up";
my %Length_hash;
my %Max_Length;
my %field_hash;
my $line;
my @Desc_array;
my $Index = 0;
my $SumDesc;
open IN_FILE, "<$filename" or die ("Could not open Packages file");
open OUT_FILE, ">sql.txt" or die ("Could not create sql.txt");
print OUT_FILE "\nSET client_encoding = 'UTF-8';\n";
print OUT_FILE "SET check_function_bodies = false;\n";
print OUT_FILE "SET client_min_messages = warning;\n";
print OUT_FILE "SET search_path = public, pg_catalog;\n";
print OUT_FILE "SET default_tablespace = '';\n";
print OUT_FILE "SET default_with_oids = false;\n\n";
print OUT_FILE "CREATE TABLE $TableName (\n";
print OUT_FILE "Id serial NOT NULL,\n";
print OUT_FILE "Package character varying(50),\n";
print OUT_FILE "Priority character varying(10),\n";
print OUT_FILE "Section character varying(15),\n";
print OUT_FILE "InstalledSize character varying(10),\n";
print OUT_FILE "Maintainer character varying(80),\n";
print OUT_FILE "Architecture character varying(5),\n";
print OUT_FILE "Source character varying(52),\n";
print OUT_FILE "Version character varying(53),\n";
print OUT_FILE "Replaces character varying(550),\n";
print OUT_FILE "Recommends character varying(1300),\n";
print OUT_FILE "Provides character varying(400),\n";
print OUT_FILE "Depends character varying(1600),\n";
print OUT_FILE "Predepends character varying(150),\n";
print OUT_FILE "Conflicts character varying(1300),\n";
print OUT_FILE "Filename character varying(150),\n";
print OUT_FILE "Size character varying(10),\n";
print OUT_FILE "Md5sum character varying(35),\n";
print OUT_FILE "Description character varying(5500)\n";
print OUT_FILE ");\n\n";
while ($line = <IN_FILE>) {
last if not defined $line;
$line =~ s/\\/\\\\/g;
$line =~ s/'/\\'/g; # when dump PostgreSQL must transform
if ($line =~ /^\s+/) { # Description
$Index++;
$Desc_array[$Index] = $line;
}
chomp ($line);
my @array= split /: +/, $line;
if ($line =~ /^Package/) {
$field_hash{Package} = $array[1];
if($Length_hash{Package} <= length($array[1])){
$Length_hash{Package} = (length($array[1]));
}
next;
}
if ($line =~ /^Priority/) {
$field_hash{Priority} = $array[1];
if ($Length_hash{Priority} <= length($array[1])){
$Length_hash{Priority} = length($array[1]);
}
next;
}
if ($line =~ /^Section/) {
$field_hash{Section} = $array[1];
if ($Length_hash{Section} <= length($array[1])){
$Length_hash{Section} = length($array[1])
}
next;
}
if ($line =~ /^Installed-Size/) {
$field_hash{InstalledSize} = $array[1];
if($Length_hash{InstalledSize} <= length($array[1])){
$Length_hash{InstalledSize} = length($array[1]);
}
next;
}
if ($line =~ /^Maintainer/)
{
$field_hash{Maintainer} = $array[1];
if ($Length_hash{Maintainer} <= length($array[1])){
$Length_hash{Maintainer} = length($array[1]);
}
next;
}
if ($line =~ /^Architecture/)
{
$field_hash{Architecture} = $array[1];
if ( $Length_hash{Architecture} <= length($array[1])){
$Length_hash{Architecture} = length($array[1]);
}
next;
}
if ($line =~ /^Source/){
$field_hash{Source} = $array[1];
if($Length_hash{Source}<= length($array[1])){
$Length_hash{Source} = length($array[1]);
}
next;
if ($line =~ /^Version/){
$field_hash{version} = $array[1];
if($Length_hash{Version} <= length($array[1])){
$Length_hash{Version} = length($array[1]);
}
next;
}
if ($line =~ /^Replaces/){
$field_hash{Replaces} = $array[1];
if($Length_hash{Replaces} <= length($array[1])){
$Length_hash{Replaces} = length($array[1]);
}
next;
}
if ($line =~ /^Recommends/){
$field_hash{Recommends} = $array[1];
if($Length_hash{Recommends} <= length($array[1])){
$Length_hash{Recommends} = length($array[1]);
}
next;
}
if ($line =~ /^Provides/){
$field_hash{Provides} = $array[1];
if ($Length_hash{Provides} <= length($array[1])){
$Length_hash{Provides} = (length($array[1]));
}
next;
}
if ($line =~ /^Depends/){ $field_hash{Depends} = $array[1];
if($Length_hash{Depends} <= length($array[1])){
$Length_hash{Depends} = length($array[1]);
}
next;
}
if ($line =~ /^Pre-Depends/) {
$field_hash{Predepends} = $array[1];
if($Length_hash{Predepends} <= length($array[1])){
$Length_hash{Predepends} = length($array[1]);
}
next;
}
if ($line =~ /^Recommends/) {
$field_hash{Recommends}=$array[1];
if($Length_hash{Recommends} <= length($array[1])){
$Length_hash{Recommends}= length($array[1]);
}
next;
}
if ($line =~ /^Conflicts/) {
$field_hash{Conflicts}=$array[1];
if($Length_hash{Conflicts} <= length($array[1])){
$Length_hash{Conflicts}= length($array[1]);
}
next;
}
if ($line =~ /^Filename/) {
$field_hash{Filename}=$array[1];
if($Length_hash{Filename} <= length($array[1])){
$Length_hash{Filename} = length($array[1]);
}
next;
}
if ($line =~ /^Size/){
$field_hash{Size}=$array[1];
if($Length_hash{Size}= length($array[1])){
$Length_hash{Size}= length($array[1]);
}
next;
}
if ($line =~ /^MD5sum/){
$field_hash{MD5sum}=$array[1];
if ($Length_hash{MD5sum}= length($array[1])){
$Length_hash{MD5sum}= length($array[1]);
}
next;
}
if ($line =~ /^Description/){
$field_hash{Description} = $array[1];
if($Length_hash{Description1} <= length($array[1])){
$Length_hash{Description1} = length($array[1]);
}
next;
}
if ($line =~ /^\s*$/) { # Blank line
chomp (@Desc_array);
$SumDesc = join ("", @Desc_array);
# print "$SumDesc\n"; #testing ...
if ( $Length_hash{Description} <= length($SumDesc)){
$Length_hash{Description}= length($SumDesc);
}
print OUT_FILE "INSERT INTO $TableName (Package, Priority, Section, InstalledSize, Maintainer, Architecture, Source, Version, Replaces, Recommends, Provides, Depends,Predepends, Conflicts ,Filename, Size, MD5sum, Description) ";
print OUT_FILE "VALUES ('$field_hash{Package}','$field_hash{Priority}','$field_hash{Section}','$field_hash{Installed_Size}',";
print OUT_FILE "'$field_hash{Maintainer}','$field_hash{Architecture}', '$field_hash{Source}','$field_hash{Version}', '$field_hash{Replaces}','$field_hash{Recommends}','$field_hash{Provides}',";
print OUT_FILE "'$field_hash{Depends}','$field_hash{Predepends}','$field_hash{Conflicts}','$field_hash{Filename}',";
print OUT_FILE "'$field_hash{Size}','$field_hash{MD5sum}','$field_hash{Description}$SumDesc');\n";
%field_hash = undef; # clear array
@Desc_array = undef;
}
}
close (IN_FILE);
close (OUT_FILE);
print"Package=$Length_hash{Package}\n";
print"Priority=$Length_hash{Priority}\n";
print"Section=$Length_hash{Section}\n";
print"InstalledSize=$Length_hash{InstalledSize}\n";
print"Maintainer=$Length_hash{Maintainer}\n";
print"Architecture=$Length_hash{Architecture}\n";
print"Source=$Length_hash{Source}\n";
print"Version=$Length_hash{Version}\n";
print"Replaces=$Length_hash{Replaces}\n";
print"Recommends=$Length_hash{Recommends}\n";
print"Provides=$Length_hash{Provides}\n";
print"Depends=$Length_hash{Depends}\n";
print"Predepends=$Length_hash{Predepends}\n";
print"Conflicts=$Length_hash{Conflicts}\n";
print"Filename=$Length_hash{Filename}\n";
print"Size=$Length_hash{Size}\n";
print"MD5sum=$Length_hash{MD5sum}\n";
$Length_hash{Description}=$Length_hash{Description} + $Length_hash{Description1} ;
print"Description=$Length_hash{Description}\n";
system("/usr/bin/iconv -f ISO-8859-1 -t utf8 sql.txt -o sql.txt.utf8");
#!/usr/bin/perl
##!/usr/bin/perl -w
# Written by John Yu <[email protected]>
# for Packages translate database(PostgreSQL) to help web team
# This perl script 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.
# 2006.6.9
use strict;
#use warnings;
#my $filename="test.txt";
my $filename = "Packages.1";
#my $filename = "/var/lib/dpkg/available";
my $TableName="tab_up";
my %Length_hash;
my %Max_Length;
my %field_hash;
my $line;
my @Desc_array;
my $Index = 0;
my $SumDesc;
open IN_FILE, "<$filename" or die ("Could not open Packages file");
open OUT_FILE, ">sql.txt" or die ("Could not create sql.txt");
print OUT_FILE "\nSET client_encoding = 'UTF-8';\n";
print OUT_FILE "SET check_function_bodies = false;\n";
print OUT_FILE "SET client_min_messages = warning;\n";
print OUT_FILE "SET search_path = public, pg_catalog;\n";
print OUT_FILE "SET default_tablespace = '';\n";
print OUT_FILE "SET default_with_oids = false;\n\n";
print OUT_FILE "CREATE TABLE $TableName (\n";
print OUT_FILE "Id serial NOT NULL,\n";
print OUT_FILE "Package character varying(50),\n";
print OUT_FILE "Priority character varying(10),\n";
print OUT_FILE "Section character varying(15),\n";
print OUT_FILE "InstalledSize character varying(10),\n";
print OUT_FILE "Maintainer character varying(80),\n";
print OUT_FILE "Architecture character varying(5),\n";
print OUT_FILE "Source character varying(52),\n";
print OUT_FILE "Version character varying(53),\n";
print OUT_FILE "Replaces character varying(550),\n";
print OUT_FILE "Recommends character varying(1300),\n";
print OUT_FILE "Provides character varying(400),\n";
print OUT_FILE "Depends character varying(1600),\n";
print OUT_FILE "Predepends character varying(150),\n";
print OUT_FILE "Conflicts character varying(1300),\n";
print OUT_FILE "Filename character varying(150),\n";
print OUT_FILE "Size character varying(10),\n";
print OUT_FILE "Md5sum character varying(35),\n";
print OUT_FILE "Description character varying(5500)\n";
print OUT_FILE ");\n\n";
while ($line = <IN_FILE>) {
last if not defined $line;
$line =~ s/\\/\\\\/g;
$line =~ s/'/\\'/g; # when dump PostgreSQL must transform
if ($line =~ /^\s+/) { # Description
$Index++;
$Desc_array[$Index] = $line;
}
chomp ($line);
my @array= split /: +/, $line;
if ($line =~ /^Package/) {
$field_hash{Package} = $array[1];
if($Length_hash{Package} <= length($array[1])){
$Length_hash{Package} = (length($array[1]));
}
next;
}
if ($line =~ /^Priority/) {
$field_hash{Priority} = $array[1];
if ($Length_hash{Priority} <= length($array[1])){
$Length_hash{Priority} = length($array[1]);
}
next;
}
if ($line =~ /^Section/) {
$field_hash{Section} = $array[1];
if ($Length_hash{Section} <= length($array[1])){
$Length_hash{Section} = length($array[1])
}
next;
}
if ($line =~ /^Installed-Size/) {
$field_hash{InstalledSize} = $array[1];
if($Length_hash{InstalledSize} <= length($array[1])){
$Length_hash{InstalledSize} = length($array[1]);
}
next;
}
if ($line =~ /^Maintainer/)
{
$field_hash{Maintainer} = $array[1];
if ($Length_hash{Maintainer} <= length($array[1])){
$Length_hash{Maintainer} = length($array[1]);
}
next;
}
if ($line =~ /^Architecture/)
{
$field_hash{Architecture} = $array[1];
if ( $Length_hash{Architecture} <= length($array[1])){
$Length_hash{Architecture} = length($array[1]);
}
next;
}
if ($line =~ /^Source/){
$field_hash{Source} = $array[1];
if($Length_hash{Source}<= length($array[1])){
$Length_hash{Source} = length($array[1]);
}
next;
if ($line =~ /^Version/){
$field_hash{version} = $array[1];
if($Length_hash{Version} <= length($array[1])){
$Length_hash{Version} = length($array[1]);
}
next;
}
if ($line =~ /^Replaces/){
$field_hash{Replaces} = $array[1];
if($Length_hash{Replaces} <= length($array[1])){
$Length_hash{Replaces} = length($array[1]);
}
next;
}
if ($line =~ /^Recommends/){
$field_hash{Recommends} = $array[1];
if($Length_hash{Recommends} <= length($array[1])){
$Length_hash{Recommends} = length($array[1]);
}
next;
}
if ($line =~ /^Provides/){
$field_hash{Provides} = $array[1];
if ($Length_hash{Provides} <= length($array[1])){
$Length_hash{Provides} = (length($array[1]));
}
next;
}
if ($line =~ /^Depends/){ $field_hash{Depends} = $array[1];
if($Length_hash{Depends} <= length($array[1])){
$Length_hash{Depends} = length($array[1]);
}
next;
}
if ($line =~ /^Pre-Depends/) {
$field_hash{Predepends} = $array[1];
if($Length_hash{Predepends} <= length($array[1])){
$Length_hash{Predepends} = length($array[1]);
}
next;
}
if ($line =~ /^Recommends/) {
$field_hash{Recommends}=$array[1];
if($Length_hash{Recommends} <= length($array[1])){
$Length_hash{Recommends}= length($array[1]);
}
next;
}
if ($line =~ /^Conflicts/) {
$field_hash{Conflicts}=$array[1];
if($Length_hash{Conflicts} <= length($array[1])){
$Length_hash{Conflicts}= length($array[1]);
}
next;
}
if ($line =~ /^Filename/) {
$field_hash{Filename}=$array[1];
if($Length_hash{Filename} <= length($array[1])){
$Length_hash{Filename} = length($array[1]);
}
next;
}
if ($line =~ /^Size/){
$field_hash{Size}=$array[1];
if($Length_hash{Size}= length($array[1])){
$Length_hash{Size}= length($array[1]);
}
next;
}
if ($line =~ /^MD5sum/){
$field_hash{MD5sum}=$array[1];
if ($Length_hash{MD5sum}= length($array[1])){
$Length_hash{MD5sum}= length($array[1]);
}
next;
}
if ($line =~ /^Description/){
$field_hash{Description} = $array[1];
if($Length_hash{Description1} <= length($array[1])){
$Length_hash{Description1} = length($array[1]);
}
next;
}
if ($line =~ /^\s*$/) { # Blank line
chomp (@Desc_array);
$SumDesc = join ("", @Desc_array);
# print "$SumDesc\n"; #testing ...
if ( $Length_hash{Description} <= length($SumDesc)){
$Length_hash{Description}= length($SumDesc);
}
print OUT_FILE "INSERT INTO $TableName (Package, Priority, Section, InstalledSize, Maintainer, Architecture, Source, Version, Replaces, Recommends, Provides, Depends,Predepends, Conflicts ,Filename, Size, MD5sum, Description) ";
print OUT_FILE "VALUES ('$field_hash{Package}','$field_hash{Priority}','$field_hash{Section}','$field_hash{Installed_Size}',";
print OUT_FILE "'$field_hash{Maintainer}','$field_hash{Architecture}', '$field_hash{Source}','$field_hash{Version}', '$field_hash{Replaces}','$field_hash{Recommends}','$field_hash{Provides}',";
print OUT_FILE "'$field_hash{Depends}','$field_hash{Predepends}','$field_hash{Conflicts}','$field_hash{Filename}',";
print OUT_FILE "'$field_hash{Size}','$field_hash{MD5sum}','$field_hash{Description}$SumDesc');\n";
%field_hash = undef; # clear array
@Desc_array = undef;
}
}
close (IN_FILE);
close (OUT_FILE);
print"Package=$Length_hash{Package}\n";
print"Priority=$Length_hash{Priority}\n";
print"Section=$Length_hash{Section}\n";
print"InstalledSize=$Length_hash{InstalledSize}\n";
print"Maintainer=$Length_hash{Maintainer}\n";
print"Architecture=$Length_hash{Architecture}\n";
print"Source=$Length_hash{Source}\n";
print"Version=$Length_hash{Version}\n";
print"Replaces=$Length_hash{Replaces}\n";
print"Recommends=$Length_hash{Recommends}\n";
print"Provides=$Length_hash{Provides}\n";
print"Depends=$Length_hash{Depends}\n";
print"Predepends=$Length_hash{Predepends}\n";
print"Conflicts=$Length_hash{Conflicts}\n";
print"Filename=$Length_hash{Filename}\n";
print"Size=$Length_hash{Size}\n";
print"MD5sum=$Length_hash{MD5sum}\n";
$Length_hash{Description}=$Length_hash{Description} + $Length_hash{Description1} ;
print"Description=$Length_hash{Description}\n";
system("/usr/bin/iconv -f ISO-8859-1 -t utf8 sql.txt -o sql.txt.utf8");
相关阅读 更多 +