Schrift
[thread]7918[/thread]

Ordnerstruktur in Array



<< |< 1 2 >| >> 12 Einträge, 2 Seiten
Matze
 2006-04-23 18:01
#65246 #65246
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich versuche gerade eine Ordnerstruktur, angefangen mit einem
festgelegten Startverzeichnis in ein Array einzulesen, bis zum
Ordner X.

Da die Ordnerstruktur aber unendlich lang/verschachtelt sein kann,
habe ich keine Vorstellung davon, wie ich soetwas hinbekommen
könnte.
In dem Array, das die Ordnernamen enthällt sollten dazu auch
noch möglichst vollständige Pfade enthalten sein.

Könnt ihr mir vielleicht ein bisschen dabei helfen ?
Vielleicht einen Wink, wie man das so ungefähr machen könnte ?

MfG. Matze
Mit freundlichen Grüßen: Matze
Strat
 2006-04-23 18:23
#65247 #65247
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
CPAN:File::Find oder CPAN:File::Find::Rule ?
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Matze
 2006-04-23 18:31
#65248 #65248
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
Danke Strat, aber:
Wie könnte ich denn anhand von einem Startverzeichnis und dem
aktuellen den gesamten Pfad bis zum aktuellen Verzeichnis mit
einem der Module herausbekommen ?
In der Doku habe ich nichts darüber gelesen, oder habe ich was
übersehen ?

Gibt es vielleicht auch sowas wie Dir::Find ?
Oder kann Cwd mir auch schon den vollständigen Pfad bis zum
aktuellen Verzeichnis aus dem Start- und dem aktuellen Verzeichnis
heraussuchen ?

Wäre für eure Hilfe dankbar:
MfG. Matze
Mit freundlichen Grüßen: Matze
renee
 2006-04-23 18:49
#65249 #65249
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Den absoluten Pfad zum aktuellen Verzeichnis:
Code: (dl )
1
2
C:\Dokumente und Einstellungen\Renee>perl -MCwd -e "print Cwd::realpath('.')"
C:/Dokumente und Einstellungen/Renee


Den absoluten Pfad zum Skript:
Code: (dl )
1
2
3
C:\Dokumente und Einstellungen\Renee>perl -MFindBin -e "print $FindBin::RealBin"

C:/Dokumente und Einstellungen/Renee


Ich muss aber zugeben, dass ich Deine Fragestellung etwas verwirrend finde. Kannst Du vielleicht versuchen, die Frage etwas umzuformulieren? Vielleicht auch mit einem kleinen Beispiel??
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/
Matze
 2006-04-23 19:01
#65250 #65250
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
OK!
Also, ich würde gerne eine Ordnerstruktur in ein Array einlesen.
Das soll dann am Ende so aussehen:
Code: (dl )
1
2
3
4
5
6
7
@ordner =
qw(Ordnername1 0
   Ordnername2 0
   Ordnername3 1
   Ordnername4 1
   Ordnername5 0
   ...)

Die geraden Indices des Arrays geben die vollständigen
Ordnernamen an.
Die ungeraden Indices des Arrays jeweils auf welcher Stelle
sich der Ordner in der Ordnerstruktur befindet.
Aber das ist erstmal egal.
Erstmal brauche ich nur alle Ordnernamen einer Ordnerstruktur.
Und diese Ordnernamen im Array müssen vollständig sein, dazu
suche ich gerade ein Modul was mir aus einem festen Startverzeichnis
und dem aktuellen Verzeichnis den vollständigen Pfad zurückgibt.
Beispiel:
Code: (dl )
1
2
3
4
5
$s_dir = "C:/";
$a_dir = "Eigene Dateien";

# gesucht:
$a_dir = vollstaendiger_pfad_zum_ordner("$s_dir","*","$a_dir");


MfG. Matze

EDIT: vorherigen zugeordnet = Stelle in Ordnerstruktur\n\n

<!--EDIT|Matze|1145804737-->
Mit freundlichen Grüßen: Matze
renee
 2006-04-23 19:16
#65251 #65251
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das könnte mit CPAN:File::Find::Rule funktionieren:
Code: (dl )
1
2
3
  use File::Find::Rule;
# find all the subdirectories of a given directory
my ($subdir) = File::Find::Rule->directory->in( $s_dir )->name("$a_dir\$");


oder

Code: (dl )
1
2
3
4
 my $rule = File::Find::Rule->file->name("Eigene Dateien\$")->start( $s_dir );
while ( my $dir = $rule->match ) {
...
}


Das ist jetzt nur was, das ich aus der Doku ableite - also keine Garantie!
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/
Matze
 2006-04-24 17:21
#65252 #65252
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
Kannst du mir vielleicht sagen ob du weißt wo ich es mit ppm
insatllieren kann ?
Oder muss ich es mit nmake machen ?

Zwischenzeitig habe ich es so versucht, aber da stimmt noch was nicht:
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
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
sub _dirs {
  # Startverzeichnis wird geholt,
  # und dann ist es nutzlos,
  # weil ich leider den Fehler nicht finde
# weshalb er immer nur das Startverzeichnis
# durchgeht.

  my $adir = shift;
  my $ad = $adir;
  my $r = 1;
  my $pos = 0;
  my @dirs;

  $adir = "..";

  DL:
  opendir(DIR,"$ad") or goto R;
    my @dl = grep { $_ !~ /\./ } readdir DIR;
  close DIR;

  if ($#dl < 0) {
    goto R;
  }

  my $dl = join ";.ZAHL.;",@dl;
  $dl .= ";.ZAHL.;";
  $dl =~ s/\.ZAHL\./$r/g;

  @dl = split ";",$dl;
  splice(@dirs,$pos,0,@dl);

  $r++;

  foreach (@dl) {
    chdir("$adir\/$_") or goto R;

    my $aad = "$ad\/$_";

    opendir(DIR,"$aad");
      my @adl = grep { $_ !~ /\./ } readdir DIR;
    closedir DIR;

    if ($#adl >= 0) {
my $adl = join ";.ZAHL.;",@adl;
$adl .= ";.ZAHL.;";
$adl =~ s/\.ZAHL\./$r/g;

@adl = split ";",$adl;
splice(@dirs,$pos,0,@adl);

$pos += $#adl;
    }
  }

  # Sehr unschön, aber was anderes
  # ist mir nicht eingefallen.
  # das ganze mit den hässlichen Labels...

  goto DL;

  R:
  chdir($adir);
  return @dirs;
}

Ausserdem finde ich es nicht sehr schön, :( hoffentlich krieg ich
das auch noch besser hin...

MfG. Matze
Mit freundlichen Grüßen: Matze
renee
 2006-04-24 17:47
#65253 #65253
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das müsstest Du ganz normal mit PPM installieren können. Es ist auf jeden Fall im Repository von ActiveState vorhanden. Allerdings ist es eine etwas veraltete Version, weswegen ich Dir dazu raten würde, das Archiv von CPAN zu holen und dann manuell zu installieren (perl Makefile.PL
nmake
nmake test
nmake install
)...
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
 2006-04-24 17:50
#65254 #65254
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Das mit Deinen 0en und 1en finde ich noch etwas verwirrend.

Nehmen wir mal an, Du hast folgende Struktur:
Code: (dl )
1
2
3
4
5
6
7
8
9
C:/
+- Dokumente und Einstellungen
| |
| +- Matze
+- Programme
+- Perl
+- MeineTools
|
+- PDFTools


Du bist in C:/Programme, was möchtest Du jetzt im Array haben?
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/
Matze
 2006-04-25 18:19
#65255 #65255
User since
2005-08-29
222 Artikel
BenutzerIn
[Homepage] [default_avatar]
Ich werds mal mit nmake versuchen...
Im Array sollte dann folgendes stehen:
Code: (dl )
1
2
3
4
5
@array =
qw(C:/Programme 0
   C:/Programme/Perl 1
   C:/Programme/MeineTools 1
   C:/Programme/MeineTools/PDFTools 2);

Das hab ich auch etwas schlecht erklärt...
Die Zahlen dahinter geben mir nähmlich dann später an, wie
weit das ganze eingerückt werden soll.
Z.B.:0 * "  ", 1 * "  " oder 2 * "  ".

'Dokumente und Einstellungen' interessieren nicht, wenn das
root Verzeichnis wie in diesem Fall 'C:/Programme' wäre.
Das ist nur wichtig, wenn 'C:/' das root Verzeichnis wäre.

MfG. Matze

Edit: C:/Programme\n\n

<!--EDIT|Matze|1145974883-->
Mit freundlichen Grüßen: Matze
<< |< 1 2 >| >> 12 Einträge, 2 Seiten



View all threads created 2006-04-23 18:01.