Schrift
[thread]8684[/thread]

mehrere Zahlen vergleichn mit Häufigkeit



<< >> 6 Einträge, 1 Seite
Gast Gast
 2007-01-25 19:04
#73606 #73606
Hallo Leute,

ich habe eine Frage, und zwar habe ich ein Program, mit welchem ich 13 stellige isbn zahlen einlese (per eingabe). Diese speichere ich in ein Array und sortiere dieses Array! Die Ausgabe erfolgt logischerweise ebenfalls sortiert.

Nun möchte ich aber die eingegeben Zahlen prüfen, wieviele isbn-nummern an den stellen (5 bis 8 --> Verlagsnummer) gleich sind und welche Verlagsnummer das ist.

Kann mir da jemand helfen?

Vielen Dank im Vorraus!
Mike
renee
 2007-01-25 19:19
#73607 #73607
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
#!/usr/bin/perl

use strict;
use warnings;

my @isbns = ('0-596-10092-2','3-97003-615-X');
@isbns = map{$_ =~ s/-//g;$_}@isbns;

my $check = '0092';

my @treffer = grep{index($_,$check) == 5}@isbns;

print $_,"\n" for @treffer;
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/
pq
 2007-01-26 11:53
#73608 #73608
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
effizienter wäre statt
my @treffer = grep{index($_,$check) == 5}@isbns;

my @treffer = grep { substr($_, 5, 4) eq $check } @isbns;

und statt
@isbns = map{$_ =~ s/-//g;$_}@isbns;

tr/-//d for @isbns;
Always code as if the guy who ends up maintaining your code will be a violent psychopath who knows where you live. -- Damian Conway in "Perl Best Practices"
lesen: Wiki:Wie frage ich & perlintro Wiki:brian's Leitfaden für jedes Perl-Problem
GwenDragon
 2007-01-26 13:35
#73609 #73609
User since
2005-01-17
14757 Artikel
Admin1
[Homepage]
user image
Ganz "böse Programmier- und Denkfaule" nehmen irgendein ISBN-Modul von CPAN ;)
Na ja, mag jetzt vielleicht zu viel sein, aber wenn das Programm später mehr können soll.

Es sei denn, die Frage oben ist jetzt nur zwecks des Lerneffekts wegen.\n\n

<!--EDIT|GwenDragon|1169811448-->
renee
 2007-01-26 13:42
#73610 #73610
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Die ISBN-Module helfen aber nicht bei der substr-Sache... (jedenfalls habe ich keins gesehen, dass das kann).
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/
Dubu
 2007-01-27 03:37
#73611 #73611
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Eigentlich sollte doch nicht nach bestimmten Verlagsnummern gesucht werden, sondern vielleicht sortiert nach Verlagsnummern ausgegeben werden, die eben auch mehrfach vorkommen, oder?

Eventuell in der Art:
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
#!/usr/bin/perl
use strict;
use warnings;

# Diverse ISBN-13 ("Bookland"-EAN-Format)
my @isbns = qw/
   978-1-56592-243-3
   978-0-596-00173-5
   978-3-8273-1812-1
   978-3-89721-109-4
   978-3-8272-6153-3
   978-3-89721-142-1
   /;

# Dies wird ein Hash of Arrays mit den ISBNs nach Verlag
my %isbns_by_publisher;

for my $isbn (@isbns) {
   # Kopiere ISBN und loesche in der Kopie alles, was keine Ziffer ist
   (my $clean_isbn = $isbn) =~ tr/0-9//cd;
   # Check auf korrekte Laenge
   if (length $clean_isbn != 13) {
       warn "not a valid ISBN-13: $isbn\n";
       next;
   } else {
       # ISBN dem zugehoerigen Array im Hash hinzufuegen.
       # Schluessel ist der Code des entsprechenden Verlags,
       # Verlag ist in den Ziffern 5-8 der ISBN-13
       push @{$isbns_by_publisher{substr $clean_isbn, 4, 4}}, $isbn;
   }
}

for my $key (sort keys %isbns_by_publisher) {
   print "Verlagsschluessel $key:\n";
   print "$_\n" for @{$isbns_by_publisher{$key}};
   print "\n";
}

Ausgabe:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Verlagsschluessel 5659:
978-1-56592-243-3

Verlagsschluessel 5960:
978-0-596-00173-5

Verlagsschluessel 8272:
978-3-8272-6153-3

Verlagsschluessel 8273:
978-3-8273-1812-1

Verlagsschluessel 8972:
978-3-89721-109-4
978-3-89721-142-1
<< >> 6 Einträge, 1 Seite



View all threads created 2007-01-25 19:04.