Schrift
[thread]8520[/thread]

Problem mit Array: Stringvergleich innerhalb eines Arrays



<< >> 6 Einträge, 1 Seite
Gast Gast
 2006-11-22 08:46
#71899 #71899
hallo zusammen, ich habe folgendes Problem, ich habe ein Array, in dem eine x-beliebige Anzahl von Strings steht. Der Aufbu der Strings ist folgender:

XYZD2345.<irgendwas>.<irgendwas>.<irgendwas>.<irgendwas.DA32.rest

Jetzt muss jeder String mit den anderen im Array vorhandenen verglichen werden, damit festgestellt werden kann, ob es an der ersten Stelle eine Übereinstimmung gibt, und wenn ja, ob an der sechsten Stelle einer von zwei gültigen Strings steht.

Dann müssen beide Strings an ein weiteres array übergeben werden, damit diese mit einem anderem Programm verarbeitet werden können.

Mein Lösungsansatz sieht wie folgt aus:
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
45
46
47
48
#!/usr/bin/perl

use strict;
use warnings;
use File::Basename;
my ($pfad)="/pfad/";
my (@dateien1) = glob "$pfad*Filter*.Endung";

my (@dateien2);
my ($datei1, $datei2);
my ($file);
my ($job2);
my ($id1, $id2);
my (@dateinamen);
my (@dateinamen2);
my ($file2);

foreach $datei1 (@dateien1){
$datei1 = basename ($datei1);
if (defined($file)){
$file2 = $file;
my (@zwiarray2) = split /\./, $file2;
$job2 = $zwiarray2[0];
### nachfolgende Zeile geändert, vorher: $zwiarray2[5]
$id2 = $zwiarray2[4];
}
my (@zwiarray) = split /\./, $datei1;
my ($job) = $zwiarray[0];
### nachfolgende Zeile geändert
$id1 = $zwiarray[4];
if ($job eq $job2){
print " $job ist gleich $job2!\n";
push @dateinamen, $file;
push @dateinamen, $datei1;
}else{
print "$job ist nicht gleich $job2!\n";
push @dateinamen2, $datei1;

####hier erfolgt dann die Übergabe der Arrays @dateinamen1/@dateinamen2 an eine
####Subroutine, die ein Programm starten und mit Daten füttern soll.


}
$file = $datei1;
}

print " array1: @dateinamen,\n";
print " array2: @dateinamen2\n";

Aber irgendwie ist dieser Ansatz nicht so ganz das wahre.
Kann mir jemand verraten, wo ich auf dem Weg den Fehler gemacht habe, und wie ich ihn beheben kann?
Dank im voraus, J.
renee
 2006-11-22 10:02
#71900 #71900
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Bitte poste doch mal Beispielstrings und was gültig und was ungültig ist.
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/
Gast Gast
 2006-11-22 10:49
#71901 #71901
Ein Gültiges Paar wäre:
ABC1234.AB1.ABCDEF12.A123.AB12.<rest>.dateiende
ABC1234.AB1.ABCDEF12.A123.CD34.<rest>.dateiende

HINWEIS: Ich habe bereits zwei Fehler im Skript korrigiert, und entsprechend markiert.
renee
 2006-11-22 12:06
#71902 #71902
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Mir ist ehrlich gesagt immer noch nicht so 100%ig klar was Du eigentlich machen willst, aber vielleicht ist das folgende ein kleiner Anfang...

Empfohlene Lektüren für den Code:
perldoc -f grep
perlreftut

Das my %hash; @hash{@array} = () nennt man Hash-Slice...

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#!/usr/bin/perl

use strict;
use warnings;
use Data::Dumper;
use File::Basename;

my %filenames;
my @files = map{[basename($_),(split /\./,basename($_))[0,5]]}glob "$pfad*Filter*.Endung";
my @allowed_strings = qw(AB12 CD34);

for my $file(@files){
my @same_jobs = grep{$_->[1] eq $file->[1] and $file->[0] ne $_->[0]}@files;
@filenames{@same_jobs} = ();
}

print Dumper([keys %filenames]);
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/
Gast Gast
 2006-11-23 09:00
#71903 #71903
Hallo Renee,
danke erst einmal für deine Antwort.
Das Problem hat sich mittlerweile auf einem anderem Weg lösen lassen.
Gruß, J.
renee
 2006-11-23 10:19
#71904 #71904
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Und wie? Es wäre schön, wenn Du Deine Lösung hier skizzieren könntest. Vielleicht such jemand anderes mal nach einer ähnlichen Lösung.
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/
<< >> 6 Einträge, 1 Seite



View all threads created 2006-11-22 08:46.