Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]3509[/thread]

suchen und vergleichen



<< |< 1 2 3 4 ... 13 >| >> 125 Einträge, 13 Seiten
Kathrin
 2004-12-16 16:21
#32653 #32653
User since
2004-12-15
158 Artikel
BenutzerIn
[default_avatar]
hmmm hier mal ein kniffligeres Problem. Auf perl.de konnte man mir leider nicht helfen, deswegen poste ich es mal hier...
Und zwar soll nach unterschiedlichen docnamen bei gleicher identnr gesucht und in doc_vorhanden() übergeben werden, wenn es verschiedene gibt. Wenn es nur eine Art docnamen gibt, dann soll es ganz normal weiterlaufen.
Der gleiche docname kann 1-3 mal unter gleicher identnr gespeichert werden. Also man kann nicht einfach abzählen lassen.
Man muss wirklich die docnamen irgendwie vergleichen...
Hat jemand einen Vorschlag???
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
sub suchen { 
my $db="DBI:mysql:produkte";
my $user="";
my $pass="";
my $dbh = DBI->connect($db,$user,$pass) or die $DBI::errstr;
my $statement_suchen="SELECT * FROM tbl0011990 where ident_nr = '$identnr'";
my $sth_suchen=$dbh->prepare($statement_suchen) or die $DBI::errstr;
$sth_suchen->execute;
my %hash;
while (my @row = $sth_suchen->fetchrow_array()) {
$hash{identnr} = $row[0];
$hash{doctyp} = $row[2];
$hash{docname} = $row[3];
$hash{head_de} = $row[4] if ($row[1] eq 'DE');
$hash{head_en} = $row[4] if ($row[1] eq 'EN');
$hash{head_fr} = $row[4] if ($row[1] eq 'FR');
$hash{deutsch} = $row[5] if ($row[1] eq 'DE');
$hash{englisch} = $row[5] if ($row[1] eq 'EN');
$hash{franz} = $row[5] if ($row[1] eq 'FR');
$hash{ersteller}= $row[7];
$hash{werk} = $row[8];
$hash{check1} = $row[9];
$hash{check2} = $row[10];
$hash{check3} = $row[11];
$hash{check4} = $row[12];
}
such_eintr(\%hash);

$sth_suchen->finish();
$dbh->disconnect();
}


Beispiele für docnamen: 12345_1, 12345_1, 12345_2, 123456, 1003/99, 1234567_1, 1234567_1...
hier sollen dann folgende in der doc_vorhanden() tabelle mit der jeweiligen doctyp und headline aufgelistet werden: 12345_1, 12345_2, 123456, 1003/99, 1234567_1
renee
 2004-12-16 16:37
#32654 #32654
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
sub suchen { 
my $db="DBI:mysql:produkte";
my $user="";
my $pass="";
my $dbh = DBI->connect($db,$user,$pass) or die $DBI::errstr;
my $statement_suchen="SELECT * FROM tbl0011990 where ident_nr = '$identnr'";
my $sth_suchen=$dbh->prepare($statement_suchen) or die $DBI::errstr;
$sth_suchen->execute;
my %hash;
while (my @row = $sth_suchen->fetchrow_array()) {
$hash{identnr} = $row[0];
$hash{doctyp} = $row[2];
$hash{docname} = $row[3];
$hash{head_de} = $row[4] if ($row[1] eq 'DE');
$hash{head_en} = $row[4] if ($row[1] eq 'EN');
$hash{head_fr} = $row[4] if ($row[1] eq 'FR');
$hash{deutsch} = $row[5] if ($row[1] eq 'DE');
$hash{englisch} = $row[5] if ($row[1] eq 'EN');
$hash{franz} = $row[5] if ($row[1] eq 'FR');
$hash{ersteller}= $row[7];
$hash{werk} = $row[8];
$hash{check1} = $row[9];
$hash{check2} = $row[10];
$hash{check3} = $row[11];
$hash{check4} = $row[12];
}

my $stmt_docnames = "SELECT docnames FROM tbl0011990 WHERE ident_nr = ?";
my $sth_docnames = $dbh->prepare($stmt_docnames) or die $dbh->errstr();
$sth_docnames->execute() or die $dbh->errstr();
my %hash_docs;
while(my ($doc) = $sth_docnames->fetchrow_array()){
$hash_docs{$doc}++;
}
if(scalar(keys(%hash_docs)) > 1){
doc_vorhanden(%hash_docs);
}
else{
such_eintr(\%hash);
}

$sth_suchen->finish();
$dbh->disconnect();
}
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Kathrin
 2004-12-16 17:07
#32655 #32655
User since
2004-12-15
158 Artikel
BenutzerIn
[default_avatar]
Das gleiche problem Renee. Kommt immer folgende Meldung Can't use string ("franz") as a HASH ref while "strict refs" in use at /usr/local/httpd/cgi-bin/frontl.cgi line 225.

So viel ich erkennen kann wird zwischen den verschiedenen docnamen nicht unterschieden oder? Hier wird doch nach der Anzahl selektiert?
renee
 2004-12-16 18:29
#32656 #32656
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Ich kann nicht hellsehen (obwohl ich nur im Hellen sehen kann *g*) - was ist die Zeile 225??

Da es ein Hash ist, wird nicht die Anzahl der gefundenen docnames genommen, sondern die Anzahl der unterschiedlichen docnames.
OTRS-Erweiterungen (http://feature-addons.de/)
Frankfurt Perlmongers (http://frankfurt.pm/)
--

Unterlagen OTRS-Workshop 2012: http://otrs.perl-services.de/workshop.html
Perl-Entwicklung: http://perl-services.de/
Crian
 2004-12-16 18:35
#32657 #32657
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=Kathrin,16.12.2004, 15:21]Auf perl.de konnte man mir leider nicht helfen, deswegen poste ich es mal hier...[/quote]
Das ist eine gute Sache ;) aber ich fände es gut, wenn Du den Link auf die dortige Diskussion dazugepackt hättest. Ich such sie gerade mal raus.

http://forum.perl.de/bb/ftopic2200.html\n\n

<!--EDIT|Crian|1103215094-->
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Gast Gast
 2004-12-20 10:03
#32658 #32658
Guten Morgen Forum,
sorry renee kann ich natürlich auch nicht von dir erwarten, hellzusehen ;-)

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
sub such_eintr {
       my ($param)=@_;
       print "<HTML>\n";
       print "<HEAD><TITLE>FORMULAR</TITLE>";
       print "</HEAD>\n<BODY>\n";
       if ($suchen){              #### Zeile 225
               print '<span style="font-size:20pt"><center><b>Dokumententyp:'.$param->{doctyp}.'</
b></center></span>';
               }
       elsif ($eintragen) {
               print '<span style="font-size:20pt"><center><b>Dokumententyp: '.$doctyp.'</b></center></span>';
               }
       print '<form method="POST" action="/cgi-bin/frontl.cgi">';
       print "<p>Ident-Nummer:";
       print '<INPUT name="identnr" size="20" maxlength="15" value='.$identnr.'>&nbsp';
       if ($suchen) {
               print '<INPUT name="suchen" TYPE="submit" VALUE="Suchen">';
               }
       print "<p>DE:<br>";
       print '<input name="head_de" type="text" size="50" value='.$param->{head_de}.'><br>';
       if ($doctyp eq 'EI') {
            print '<textarea name="deutsch" cols="50" rows="5">'.$param->{deutsch}.'</textarea>';
               }
       print "<p>EN:<br>";
       print '<input name="head_en" type="text" size="50" value='.$param->{head_en}.'><br>';
       if ($doctyp eq 'EI') {
           print '<textarea name="englisch" cols="50" rows="5">'.$param->{englisch}.'</textarea>';
               }
       print "<p>FR:<br>";
       print '<input name="head_fr" type="text" size="50" value='.$param->{head_fr}.'><br>';
       if ($doctyp eq 'EI') {
           print '<textarea name="franz" cols="50"  rows="5">'.$param->{franz}.'</textarea>';        ###$franz
               }

In der Fehlermeldung wird zwar auf den Parameter "$franz" gezeigt, doch er kommt erst in den folgenden Zeilen vor.
Strat
 2004-12-20 11:21
#32659 #32659
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
da sehe ich nichts, was auf diese fehlermeldung hindeutet. das einzige, was mir auffaellt ist, dass die Variable $suchen offenbar eine globale Variable sein muss, und es vielleicht hilfreich sein koennte, deren Weg mal nachzuvollziehen.

Nebenbei: anstelle von
Code: (dl )
1
2
print '<span style="font-size:20pt"><center><b>Dokumententyp:'.$param->{doctyp}.'</
b></center></span>';

arbeite ich gerne mit qq~....~ (entspricht "..."), damit ich mir einiges an tipperei sparen kann:
Code: (dl )
print qq~<span style="font-size:20pt"><center><b>Dokumententyp:$param->{doctyp}</b></center></span>~;

~ verwende ich am liebsten als trennzeichen, weil es im text nur selten vorkommt, aber es gehen auch andere, z.B. qq(...) qq{...} qq|...| qq<...> qq#...# qq/.../ (das trennzeichen darf halt nicht im text vorkommen)
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Relais
 2004-12-20 11:35
#32660 #32660
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
[quote=Strat,20.12.2004, 10:21]gerne mit qq[/quote]
hah, /me too.
Quote
es gehen auch andere, z.B. qq(...) qq{...} qq|...| qq<...> qq#...# qq/.../ (das trennzeichen darf halt nicht im text vorkommen)

die symmetrischen Zeichen qq(...), qq{...}, qq[...], qq<...> erlauben es auch, daß die Trennzeichen im Text vorkommen, solange sie es wiederum symmetrisch und gewichtet tun.
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
Gast Gast
 2004-12-20 12:18
#32661 #32661
Du hast recht qq ist natürlich sinnvoller...

Ja die Variable $suchen ist global. Nur daran liegt es nicht. Keine Ahnung woran es liegen könnte????
Crian
 2004-12-20 15:36
#32662 #32662
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
[quote=Relais,20.12.2004, 10:35]die symmetrischen Zeichen qq(...), qq{...}, qq[...], qq<...> erlauben es auch, daß die Trennzeichen im Text vorkommen, solange sie es wiederum symmetrisch und gewichtet tun.[/quote]
was bedeutet hier "gewichtet"?
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
<< |< 1 2 3 4 ... 13 >| >> 125 Einträge, 13 Seiten



View all threads created 2004-12-16 16:21.