Schrift
[thread]10130[/thread]

PDF Datei im Verzeichnissbaum

Leser: 2


<< >> 8 Einträge, 1 Seite
Gast guest
 2007-08-19 18:31
#98382 #98382
Hallo zusammen,

Das Skript wird auf Suse 9.3 laufen

hier ist mein Problem:

ich habe ein Verzeichnis mit mehreren Unterverzeichnissen, die jeweils
zu einer Rübrik gehört. In den Unterverzeichnissen sind Text- und
PDF-Datei enthalten.

Das Skript soll das Wurzelverveichnis öffnen und alle Unterverzeichnisse
nach PDF-Dateien durchsuchen und anschließend diese Unterveichnisse
in einer HTML-Datei auflisten so dass, wenn eine Rubrik angeklickt wird
nur die zugehörigen PDF-Dateien aufgelistet werden.

Also z.B.:

/home/Auto/Audi/*.pdf
/home/Auto/VW/*txt

/home/PC/Fujitsu-Siemens/*pdf
/home/PC/Dell/*.pdf
...


Auf der HTML-Seite sollte jetzt

Auto
PC
...

Die Dateinamen haben folgendes Format: Rubrik-Unterrubrik-Titel-Jahr.pdf

Bei einem klick auf Auto bekomme ich eine Liste von denen und zugehörige PDF-Dateien bei der Wahl eines Wagens.

Könnte mir jemand beim Algorithmus helfen. Ich bin eine Woche jung Perl Programmierer und bin hiermit überfordert

Vielen Dank im Voraus
murphy
 2007-08-19 19:51
#98385 #98385
User since
2004-07-19
1776 Artikel
HausmeisterIn
[Homepage]
user image
Um einen Verzeichnisbaum zu durchwandern empfiehlt sich ein Modul wie CPAN:File::Find oder CPAN:File::Find::Rule. Hast Du einmal die Dateinamen gesammelt, so kannst Du sie einfach mit regulären Ausdrücken in ihre Bestandteile (Rubrik, etc.) zerlegen.
When C++ is your hammer, every problem looks like your thumb.
Gast guest
 2007-08-24 01:24
#98599 #98599
Hallo zusammen und erstmal Danke murphy für den Tipp.

Hier was ich gemacht habe aber ich bekome eine Fehlermeldung


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

        use strict;
        use File::Find;
        
                @Verzeichnis = ("Subdir1","Subdir12","Subdir3");
                find(\&wanted, @Verzeichnis);
                
                
        
                sub wanted {
                                        
                                        $File::Find::dir  = "/home/james/gbt"
                                        $_ =~ m/pdf/
                                
                                }
                                        
#END                                    


Ehrlich gesagt ich bin mir nicht sicher ob ich die Subroutine richtig habe.

Und hier ist der Fehler:

Scalar found where operator expected at ./test2.pl line 14, near "$_"
(Missing semicolon on previous line?)
Global symbol "@Verzeichnis" requires explicit package name at ./test2.pl line 6.
Global symbol "@Verzeichnis" requires explicit package name at ./test2.pl line 7.
syntax error at ./test2.pl line 14, near "$_ "
Execution of ./test2.pl aborted due to compilation errors.

Danke im Voraus
renee
 2007-08-24 10:25
#98604 #98604
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Bei der Initialisierung von @Verzeichnis musst Du noch ein my davor schreiben. Siehe auch Wiki:diesen Wiki-Artikel.

Und dann fehlt nach $File::Find::dir = "/home/james/gbt" noch ein Semikolon...

Ich habe jetzt nicht darauf geachtet, ob das Programm korrekt ist, sondern nur auf die Fehlermeldungen geschaut...
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 guest
 2007-08-24 13:18
#98612 #98612
Erstmal Danke renee für die Hilfe. Hier ist der Code und er funktioniert auch, wurde mit fin2perl generiert. Bei der Suche nach *-*.pdf ist das erste Feld immer der Rubrikname. Jetzt meine Frage wie kann ich diesen skript verfeinern so dass er für die gefundenen *-*.pdf neue Verzeichnisse erzeugt , die den gleichen Rubriknamen(das erste Feld) haben wie die *-*.pdf Dateien und diese in den zugehörenden Verzeichnissen spreichert und anschlißend die Verzeichnisse in einer HTML-Datei anzeigt.

Zusammenfassung:
Am Ende haben die neuen Verzeichnissen den gleichen Rubriknamen wie die enthaltenen Dateien und sind in einer HTML-Datei zu sehen

Code (perl): (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
#! /usr/bin/perl -w
    eval 'exec /usr/bin/perl -S $0 ${1+"$@"}'
        if 0; #$running_under_some_shell

use strict;
use File::Find ();

# Set the variable $File::Find::dont_use_nlink if you're using AFS,
# since AFS cheats.

# for the convenience of &wanted calls, including -eval statements:
use vars qw/*name *dir *prune/;
*name   = *File::Find::name;
*dir    = *File::Find::dir;
*prune  = *File::Find::prune;

sub wanted;



# Traverse desired filesystems
File::Find::find({wanted => \&wanted}, '/home/james/gbt');
exit;


sub wanted {
    /^.*-.*\.pdf\z/s &&
    print("$name\n");
}


Danke im Voraus
Gast guest
 2007-08-25 01:20
#98648 #98648
Hilfe an alle, mag mir jemand bitte helfen

Danke
renee
 2007-08-25 11:59
#98656 #98656
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Was ist eine Rubrik? Wie sind die PDF-Dateinamen aufgebaut?
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 guest
 2007-08-25 12:47
#98659 #98659
Hallo renee,

Rubrik ist der Name des Themas, z.B. Rubrik: Autos und eine Unterrubrik wäre Audi oder VW usw. Die Namen der PDF-Dateien sind so dass sie immer mit dem Rubriknamen (i.e. Name des Themas).

Hier ein Beispiel: Auto-Audi-Titel-Author-Jahr.pdf

Danke im Voraus
<< >> 8 Einträge, 1 Seite



View all threads created 2007-08-19 18:31.