Zum Inhalt springen

Empfohlene Beiträge

Geschrieben (bearbeitet)

Hi

ich bin ziehmlich neu in dem Thema Perl :)

brauche mal eure hilfe.

ich will ein verzeichnis öffnen und dort dann die ersten 5 stellen des dateinamens rausfiltern. Dann soll im Anschluss gecheckt werden ob es noch eine 2. Datei in dem Ordner gibt,die die selbe 5 stellige ID hat und dann natürlich ausgeben.

also ich bin jetzt soweit:

#!/usr/bin/perl -w

$ordner="/var/tmp/test";

opendir(DIR, $ordner );

@files = readdir(DIR);

closedir(DIR);

foreach (@files){

$vierzeichen=substr($_,0,5);

print $vierzeichen;

}

Er gibt jetzt zwar alle dateinamen wieder ( auch nur die ersten 5 stellen der datei ) aber er prüft noch nicht ob es doppelte gibt.

könnt ihr mir da helfen ?

ich hab da so ein ansatz gesehen aber ich denk da bin ich vollkommen falsch ( eq )

foreach (@files){

$vierzeichen=substr($_,0,5);

push (@doppelt,$_) if (substr($_,0,5) eq $vierzeichen);

print @doppelt;

}

Bearbeitet von Hyäne
Geschrieben

ich bin jetzt nicht der perlcrack, aber ich denke die methodik mittels push könnte funktionieren. allerdings wird hier zuerst gepusht und anschliessend geprüft, ob dein subtring übereinstimmt. was passiert denn, wenn du den ansatz mittels push umsetzt?

s'Amstel

Geschrieben

da gibt er alle dateien aus.....ist ja irgendwie auch logisch weil er schaut ja einfach nur ob es nach dem muster eine datei gibt und JA es gibt ja eine...

Geschrieben

Hi,

damit löscht du alle doppelten Einträge aus dem Array @files und weist sie @files_new zu.

Ungetestet!

sub del_double 

{ 

my %all; 

$all{$_}=0 for @_; 

return (keys %all); 

} 


my @files_new=&del_double(@files);

Ob du vorher noch @files so modifizierst, dass nur die ersten 5 Stellen berücksichtig werden, kannst ja selber entscheiden.

ciao,

vic

Geschrieben

diese methode hatte ich auch schon gefunden aber der vergleicht da ja nur wieder den Hash-Wert. Er soll ja nach der Dateibezeichnung schauen und dann die doppelten ausspucken.

Geschrieben

Dann lässt danach noch ...


@union = @isect = @diff = ();

%count = ();

foreach $e (@files, @files_new) { $count{$e}++ }


foreach $e (keys %count) {

    push(@union, $e);

    if ($count{$e} == 2) {

        push @isect, $e;

    } else {

        push @diff, $e;

    }

}

... laufen. Somit hast alles mögliche in verschiedenen Arrays.

Oder hast du ein Problem damit, in @files die Dateinamen zu modifizieren?

ciao,

vic

Geschrieben

so da ich der absolute noob in perl bin hab ich den überblick verloren :)

kannste mir mal den die einzelnen elemente erläutern ? da sind jetzt soviele variablen...

in welcher variablen werden jetzt z.b. die doppelten gespeichert? also welche muss ich mir anschauen ?

kannst du evtl. auch noch einmal den kompletten quellcode jetzt zusammen schnippseln ?

danke

Geschrieben

hatte auch schon überlegt mit shell zu arbeiten aber ich wollte mich ja eigentlich mit perl ein wenig für die zukunft beschäftigen :)

naja wie gesagt ich hab überhaupt noch nicht den durchblick wegen den ganzen varialben und funktionen....perl hebt sich doch ein wenig von anderen sprachen ab wie ich finde....

das hab ich bisher ja gehabt....dort gibt es die ersten 5 stellen der dateien aus die in dem ordner sind.

überprüft aber halt noch nicht die doppelten....hatte es mit deinen hinweisen getestet aber nciht hinbekommen. er hatte immer nur eine zahl ausgegeben aber die war wirklich nur "einmal" vorhanden und nicht doppelt....vielleicht kannst du das ja mal ergänzen und ein wenig mit kommis verziehren.

vielen lieben dank

#!/usr/bin/perl -w

$ordner="/var/tmp/test";

opendir(DIR, $ordner );

@files = readdir(DIR);

closedir(DIR);

foreach (@files){

$vierzeichen=substr($_,0,5);

print $vierzeichen;

}

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...