文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>自己第一个perl 脚本

自己第一个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");                              
相关阅读 更多 +
排行榜 更多 +
方块枪战战场安卓版

方块枪战战场安卓版

飞行射击 下载
战斗火力射击安卓版

战斗火力射击安卓版

飞行射击 下载
空中防御战安卓版

空中防御战安卓版

飞行射击 下载