Schrift
[thread]7106[/thread]

Dateien aus Verzeichnissen ...: finden, die bestimmte Eigenschaften habe



<< |< 1 2 >| >> 15 Einträge, 2 Seiten
Maddy
 2005-07-05 11:41
#55996 #55996
User since
2005-07-05
2 Artikel
BenutzerIn
[default_avatar]
Hi,

Ich möchte aus einem gegebenen Verzeichnis alle Dateien auslesen, die die Dateiendung .txt haben und mit jeder dieser Dateien die gleiche Aktion ausführen.
Als Ergebnis dieser Aktion entstehen Dateien mit der Endung .sql, die ich ebenfalls wieder alle brauche, um damit noch etwas zu machen. Die Dateinamen selbst sind dabei aber gleich, d.h. aus der Datei test1.txt wird die Datei test1.sql erzeugt.

Die Anzahl und die Namen der Dateien sind variabel, eine feste Liste aufzuschreiben bringt es also nicht.

Kann mir da jemand helfen?
Grüsse Maddy
renee
 2005-07-05 12:04
#55997 #55997
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
my $dir = '/verzeichnis/das/du/auslesen/moechtest/';
opendir(DIR,$dir) or die $!; # Verzeichnis "öffnen"
# grep filtert mir die .txt-Dateien aus einer Liste (perldoc -f grep)
# readdir liest den Verzeichnisinhalt und liefert die Liste an grep
my @txt_files = grep{$_ =~ /\.txt$/}readdir(DIR);
closedir DIR;

for my $file(@txt_files){
$path_to_file = $dir.'/'.$file;
# mach was mit $path_to_file
}
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/
lichtkind
 2005-07-05 12:17
#55998 #55998
User since
2004-03-22
5679 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
hm schritt 1 nimm mal esskars code der alle dateien eines verzeichnisses öffnet:

http://board.perl-community.de/cgi-bin....8;#idx2

das print <$file> nimm raus weil du ja nichts ausgeben willst und da du ja nur die txt dateien willst füge dazu:

next unless $filename =~ m!\.txt$!;

jetzt kannst cor dem close mit jeder deiner dateien deine magische operation machen mit einer ähnlichen regex kannst du dann auch den neues dateinamen erzeugen:

$filename =~ s!\.txt\z!\.sql!;
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
lichtkind
 2005-07-05 12:19
#55999 #55999
User since
2004-03-22
5679 Artikel
ModeratorIn + EditorIn
[Homepage]
user image
seh jetzt renees lösung ja so geht es auch Tim ist heute
Wiki:Tutorien in der Wiki, mein zeug:
kephra, baumhaus, garten, gezwitscher

Es beginnt immer mit einer Entscheidung.
Crian
 2005-07-05 13:01
#56000 #56000
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
ich würd ja die Textdateien einfach globben:

Code: (dl )
1
2
my @txt = glob(*.txt);
my @sql = map {$a=$_;$a=~s~\.txt$~.sql~;$a} @txt;
s--Pevna-;s.([a-z]).chr((ord($1)-84)%26+97).gee; s^([A-Z])^chr((ord($1)-52)%26+65)^gee;print;

use strict; use warnings; Link zu meiner Perlseite
Maddy
 2005-07-05 13:26
#56001 #56001
User since
2005-07-05
2 Artikel
BenutzerIn
[default_avatar]
ich danke herzlich für Eure Bemühungen, gleich die erste Version hat gemacht was sie sollte und nun funzt das alles.

Dankeschön
Gruss Maddy:D
Dubu
 2005-07-05 20:15
#56002 #56002
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=Crian,05.07.2005, 11:01]ich würd ja die Textdateien einfach globben:
[/quote]
Ja, das wuerde ich auch.

Quote
Code: (dl )
1
2
my @txt = glob(*.txt);
my @sql = map {$a=$_;$a=~s~\.txt$~.sql~;$a} @txt;


Das map{} erscheint mir hier etwas holprig. Ich wuerde eine for-Schleife der Uebersichtlichkeit halber bevorzugen, auch wenn's wahrscheinlich etwas laenger dauert (erst kopieren, dann ersetzen):
Code: (dl )
1
2
3
my @txt = glob('*.txt');
my @sql = @txt;
s~\.txt$~.sql~ for @txt;
pKai
 2005-07-06 01:12
#56003 #56003
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Für das Problem "Brauche das Ergebnis von s/// (nicht den Rückgabewert) im map-Zusammenhang" suche ich auch noch nach einer eleganten Lösung.
I sense a soul in search of answers.
pq
 2005-07-06 11:57
#56004 #56004
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=pKai,05.07.2005, 23:12]Für das Problem "Brauche das Ergebnis von s/// (nicht den Rückgabewert) im map-Zusammenhang" suche ich auch noch nach einer eleganten Lösung.[/quote]
hmm. sowas?
Code: (dl )
1
2
3
4
5
6
# beläßt original so wie es ist
sub cmap (&@) {
 map { local $_ = $_; $_[0]->(); $_ } @_[1..$#_];
}

my @copy = cmap { s/a/b/ } @array;


edit: umbenannt, $_[0]->() statt $_[0]->($_)\n\n

<!--EDIT|pq|1120741872-->
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
pKai
 2005-07-07 02:09
#56005 #56005
User since
2005-02-18
357 Artikel
BenutzerIn
[default_avatar]
Mit einer eigenen Prototyp-sub zu arbeiten wäre 'ne Idee (an die ich bisher noch nicht gedacht hatte).
Mal schauen wie's sich macht, wenn ich das nächste mal sowas brauche.
Danke
I sense a soul in search of answers.
<< |< 1 2 >| >> 15 Einträge, 2 Seiten



View all threads created 2005-07-05 11:41.