Schrift
[thread]6615[/thread]

Eindeutige Abkürzungen identifizieren



<< |< 1 2 >| >> 17 Einträge, 2 Seiten
mordur
 2005-01-07 14:09
#50618 #50618
User since
2003-09-25
182 Artikel
BenutzerIn
[Homepage] [default_avatar]
moins,

ich habe ein Hash.
Code: (dl )
my %hash=("A"=>"Ambiente","Bed"=>"Bediener","Bl"=>"Blumen","K"=>"Kellner","Bel"=>"Beleuchtung");


Dem Prog wird jetzt ein Wort übergeben oder eine Abkürzung des Wortes.
Die Keys des Hashes sind dabei die eindeutigen Abkürzungen der dazugehörigen Werte.
Das Programm soll falsche Wörter(z.B. "Luft") oder falsche Abkürzungen(z.B. "Ar") oder nicht eindeutige Abkürzungen ( z.B. "Be" oder "B" ), die ihm übergeben werden ,die es aber nicht irgendeinem Key oder Wert aus dem Hash zuordnen kann, als Fehler ausgeben. Wird jedoch eine korrekte Abkürzung(z.B. "K"), ein korrektes Wort(z.B."Ambiente") oder eine eindeutige Abkürzung ( z.B. "Bedien") übergeben, soll der entsprechende Wert aus dem Hash geprinted werden.

hab da grad kein plan... :(
renee
 2005-01-07 14:21
#50619 #50619
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
was verstehst Du denn unter eindeutige Abkürzung?
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/
format_c
 2005-01-07 14:34
#50620 #50620
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Hä so?
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
format_c@server:~/perl_scripts> cat test.pl && perl test.pl Be
use strict;

my %hash=("A"=>"Ambiente","Bed"=>"Bediener","Bl"=>"Blumen","K"=>"Kellner","Bel"=>"Beleuchtung");

chomp (my $eingabe = shift);

if (exists $hash{$eingabe}) {
print "Abkuerzung $eingabe => $hash{$eingabe}\n";
}
else {
die "Keine gueltige Abkuerzung\n";
}

Keine gueltige Abkuerzung
format_c@server:~/perl_scripts>


Beschreib mal genauer wenns nicht passt.

Gruß Alex
mordur
 2005-01-07 14:40
#50621 #50621
User since
2003-09-25
182 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich hab ja das Hash. Wenn ich dem Prog "Bedien" übergebe ist das eine eindeutige Abkürzung von "Bediener", da "Bedien" ja weder "Blumen" noch "Beleuchtung" bedeuten kann. Wenn ich dem Prog jedoch "Be" übergebe ist das nicht eindeutig, weil das sowohl "Beleuchtung" als auch "Bediener" abkürzen könnte. Nehme ich nur "B" könnten sogar alle drei Werte die mit B beginnen gemeint sein. Das Prog darf nur die eindeutigen Abkürzungen oder die genauen Entsprechungen der Values verarbeiten. Wird ihm z.B. "Kakao" übergeben muss es einen Fehler melden. Wird ihm "K" übergeben, kennt es nur ein Wort mit "K" also meldet es "Kellner". Wird ihm "Kellner" übergeben meldet es Kellner". Wird ihm "Kell" übergeben meldet es "Kellner" etc.. Wird ihm jedoch "Kelle" übergeben muss es einen Fehler melden.

@format_c
Nein leider passt das Skript so nicht, da es nur die Keys mit dem übergebenen String vergleicht.\n\n

<!--EDIT|mordur|1105101903-->
renee
 2005-01-07 14:47
#50622 #50622
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
@format_c: "Bedien" soll aber offenbar gültig sein.

Im Prinzip könnte das hier funktionieren:
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
#! /usr/bin/perl

use strict;
use warnings;

my %hash=("A"=>"Ambiente","Bed"=>"Bediener","Bl"=>"Blumen","K"=>"Kellner","Bel"=>"Beleuchtung");

chomp (my $eingabe = shift);

if (exists $hash{$eingabe}) {
print "Abkuerzung $eingabe => $hash{$eingabe}\n";
}
else {
my @possible_hits;
foreach(values(%hash)){
push(@possible_hits,$_) if(substr($_,0,length($eingabe)) eq $eingabe);
}

if(scalar(@possible_hits) == 1){
print $eingabe," => ",$possible_hits[0];
}
else{
print "ungültig";
}
}
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/
renee
 2005-01-07 14:51
#50623 #50623
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
tests:
Quote
~/entwicklung 22> perl abkuerz.pl Be
ungültig
~/entwicklung 23> perl abkuerz.pl Ke
Ke => Kellner
~/entwicklung 24> perl abkuerz.pl Kell
Kell => Kellner
~/entwicklung 25> perl abkuerz.pl Kelle
ungültig
~/entwicklung 26> perl abkuerz.pl Bedien
Bedien => Bediener
~/entwicklung 27>
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/
format_c
 2005-01-07 14:53
#50624 #50624
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Achso. Dann würde brauchst du doch eigentlich kein Hash. Oder wenn du es vorgegeben hast geht auch values %hash

Ich habe mir mal erlaub ein Array draus zu machen:

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
format_c@server:~/perl_scripts> cat test.pl && perl test.pl Be
use strict;

my @array=("Ambiente","Bediener","Blumen","Kellner","Beleuchtung");

chomp (my $eingabe = shift);


if (scalar(my ($wert)=grep(/$eingabe/,@array)) == 1) {
print "Abkuerzung $eingabe => $wert\n";
}
else {
die "Keine gueltige Abkuerzung\n";
}

Keine gueltige Abkuerzung
format_c@server:~/perl_scripts>

Jetzt?

Gruß Alex
renee
 2005-01-07 15:05
#50625 #50625
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
müsste dann aber /^$eingabe/ heißen und vielleicht noch \Q und \E\n\n

<!--EDIT|renee|1105103133-->
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/
format_c
 2005-01-07 15:06
#50626 #50626
User since
2003-08-04
1706 Artikel
HausmeisterIn
[Homepage] [default_avatar]
Stimmt

Gruß Alex
mordur
 2005-01-07 16:01
#50627 #50627
User since
2003-09-25
182 Artikel
BenutzerIn
[Homepage] [default_avatar]
thats it's thanks.
<< |< 1 2 >| >> 17 Einträge, 2 Seiten



View all threads created 2005-01-07 14:09.