#!/usr/bin/perl -w
#Markus Westphal 09.10.2006
######################################################
# Markus Westphal Swissprot (neu) #
######################################################
use strict;
#use CGI::Carp qw(fatalsToBrowser);
my($rock,$h,$ht,$html,$slz,$wert,$zeilen,$zeile1,$zeile2,$auswert,$sprot,$i,$j,$k,$g,@ar,@outline,@lines,$s,$lesen,$zw,$searchline,@searchlines,$outformat,$vw,$vw2,$sl,$ol,$of,$format,$za,$htm,@posaus);
#Einlesen aus Browserübergabe
#$ENV{'QUERY_STRING'} =~ s/sl=alle//g;
#$ENV{'QUERY_STRING'} =~ s/ol=alle//g;
#$ENV{'QUERY_STRING'} =~ s/%3A/,/g;
#$ENV{'QUERY_STRING'} =~ s/%3B/;/g;
#$ENV{'QUERY_STRING'} =~ s/+/\ \/g;
#@ARGV = split("&",$ENV{'QUERY_STRING'});
#HTML Header
#print HF "Content-type: text/html\n\n";
#HTML Header
#globale Variabeln füllen
$ol = "";
$rock = 0;
$html = 0;
$outformat = 0;
$sl = "";
$za = 0;
$auswert = 0;
$wert="ö";
for($j = -1; $j < $#ARGV; $j++)
{
if($ARGV[$j] =~ /^sl/)
{
($sl, $searchline) = split("=", $ARGV[$j]);
@searchlines = split(",", $searchline);
}
if($ARGV[$j] =~ /^ol/)
{
($ol, $zeilen) = split("=", $ARGV[$j]);
@outline = split(",", $zeilen);
}
if($ARGV[$j] =~ /^se/)
{
($s, $wert) = split("=", $ARGV[$j]);
}
if($ARGV[$j] =~ /^of/)
{
($of, $format) = split("=", $ARGV[$j]);
if($format eq "hor")
{
$outformat = 1;
}
}
if($ARGV[$j] =~ /^html/)
{
($ht, $htm) = split("=", $ARGV[$j]);
if($htm eq "on")
{
$html = 1;
}
}
}
if($html == 1)
{
open(HF, ">ausgabe.htm") || die ("Die Ausgabedatei kann nicht erstellt werden!\n");
print HF '
Auswertung:
';
print HF '';
print HF "Swissparse - Markus Westphal - FH Gießen-Friedberg\n";
print HF "\n";
}
open(TF, ">sp-out.txt") || die ("Die Ausgabedatei kann nicht erstellt werden!\n");
if($ol =~ /ol/)
{
$auswert = 1 ;
}
if($ol =~ /ol/ && $sl =~ /sl/)
{
$auswert = 2;
}
if($wert=~ /ö/)
{
$auswert = 3;
$wert = "KEIN WERT!";
}
#print "$ol\n $sl\n $wert \n $auswert\n";
#eventuell erweitern auf sprot48.dat Zugriff aus Internet
$sprot = "sprot48.dat";
open(F, "<$sprot") || die ("$sprot kann nicht gelesen werden!\n");
$i=0;
if($html == 1){print HF "Suchwert: $wert
";}
#print TF "Suchwert: $wert\n";
while()
{
chomp($_); # Wenn Steuerbefehl am Ende, dann wegschneiden
if ($_ =~ /^ID/i) {$lesen=1;} # ^ -> startet mit ID
if ($lesen == 1)
{
if ($_ =~ /^\/\//) #Einzelteile enden mit // deshalb $lesen=0
{
if (&IsString($ar[$i], $wert) == 1){
$i = $i+1;
$lesen = 0;
}
else {
$ar[$i] = "";
}
}
else
{ #ACHTUNG INTERNETVERSION!
if($html ==1){$h = "
\n";}
else{$h = "\n";}
if($_ =~ /^ /)
{
$_ =~ s/^ /SQ/g;
$ar[$i] .= $_ . $h; #Wird im Array unter dem $i Feld abgelegt
}
else
{
$ar[$i] .= $_ . $h; #Wird im Array unter dem $i Feld abgelegt
}
}
}
}
close (F);
if($html == 1){print HF "$wert wurde in $i Records gefunden! (Suchzeilen nicht beruecksichtigt!)";}
#print TF "$wert wurde in $i Records gefunden! (Suchzeilen nicht beruecksichtigt!)\n";
if($auswert == 3)
{
if($html == 1)
{
print HF "
KEIN SUCHWERT EINGEGEBEN!\n";
print HF "
name.pl?se=Suchwert&sl=Suchzeile&ol=Ausgabezeile&of=Format [hor/ver]\n";
print HF "
Bitte die angegebene Syntax einhalten!\n\n";
}
die ("Lesevorgang abgebrochen!\n");
}
else
{
for($j=0; $j<=$#ar; $j++) # $#ar -> Anzahl Felder in Array
{
if(&IsString($ar[$j], $wert) == 1)
{
if($auswert == 1)
{
&IsZeil($ar[$j]);
}
elsif($auswert == 2)
{
if(&SuchZeil($ar[$j]) == 1)
{
$slz++;
&IsZeil($ar[$j]);
}
}
else
{
&PrintRec($ar[$j]);
}
}
}
}
sub IsString() #erweiter mit NOT
{
my ($a, $b) = @_;
if($a=~ /$b/i)
{
if($a =~ /SUBCELLULAR LOCATION:.*membrane/i)
{
return(0);
}
elsif($a =~ /LOCATION: .*matrix/i)
{
return(0);
}
return(1);
}
return(0);
}
sub PrintRec()
{
my ($a) = @_;
if($html == 1){print HF "$a
\n";}
print TF "$a\n";
}
sub IsZeil()
{
my($z) = @_;
@lines = split( "\n" , $z); #ACHTUNG INTERNETVERSION!
#print ">>$z";
undef($posaus[$i]);
for($k = 0; $k < $#lines; $k++)
{
for($i = 0; $i <= $#outline; $i++)
{
$zw = $outline[$i];
if($lines[$k]=~ /^$zw/)
{
if($outformat == 1)
{
&AusgabeHF($lines[$k],0);
}
else{&PrintRec($lines[$k]);}
}
}
}
if($outformat == 1)
{
&AusgabeHF("",1);
}
else
{
if($html == 1){print HF "---------------------------------------------
\n";}
print TF "/-$rock-/\n";
$rock++;
}
}
sub SuchZeil()
{
my($z) = @_;
@lines = split( "\n" , $z);
for($k = 0; $k < $#lines; $k++)
{
for($i = 0; $i <= $#searchlines; $i++)
{
$zw = $searchlines[$i];
if($lines[$k]=~ /^$zw/)
{
if(&IsString($lines[$k],$wert) == 1){return (1);}
}
}
}
return 0;
}
#Htmlausgabe
sub AusgabeHF()
{
$za = $za+1;
my($t,$line) = @_;
my($st);
if($za == 1)
{
#open(HF, ">ausgabe.htm") || die ("Die Ausgabedatei kann nicht erstellt werden!\n");
print HF '';
print HF "\n";
for($g = 0; $g <= $#outline; $g++)
{
print HF "$outline[$g]\n | ";
}
print HF "
\n";
}
if($line == 0)
{
#Erstellen der Strings für die Anzahl der Felder und zuordnen nach @outline
for($i = 0; $i <= $#outline; $i++)
{
if($t =~ /^$outline[$i]/)
{
$st = substr($t,2,length($t));
$posaus[$i] .= "$st
\n";
}
}
}
elsif($line == 1)
{
printf HF "\n";
for($i = 0; $i <= $#outline; $i++)
{
print HF '',"\n";
print HF "$posaus[$i]";
print HF " | \n";
undef($posaus[$i]);
}
print HF "
\n";
}
}
#Ende Html-Seite
#if($outformat == 1)
#{
if($html == 1)
{
print HF "
";
print HF "\n";
close (HF);
}
else{close(TF);}
#}