Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]7633[/thread]

files a nach files b kopieren



<< >> 9 Einträge, 1 Seite
Rambo
 2006-01-18 17:26
#62028 #62028
User since
2003-08-14
803 Artikel
BenutzerIn

user image
hallo zusammen,

leider habe auch ich ein problem mit copy :-(
ich habe viele dateien die ich folgender massen kopieren möchte:
von
25FEB2005_2359_.TXT
nach
25FEB2006_2359_.TXT

also aus allen 2005 dateien wird 2006.

als ansatz habe ich folgendes versucht

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
use strict;
use warnings;
use File::Copy;
use Cwd;

my $home_dir = getcwd;
$home_dir = "$home_dir/files";

opendir DIR, $home_dir;
my @org_files = grep "$home_dir/$_",readdir DIR;
closedir DIR;

for my $new_files(@org_files)
  {
   $new_files =~ s/2005/2006/g;
   print $new_files,"\n";
  }

das umsetzen von 2005 auf 2006 geht aber ich weis nicht
wie ich den copy befehl einbauen soll.

sorry komm leider nicht weiter.

habt ihr ein tip für mich?

merci
rambo
Relais
 2006-01-18 17:41
#62029 #62029
User since
2003-08-06
2244 Artikel
ModeratorIn
[Homepage] [default_avatar]
so?
Code: (dl )
1
2
3
$old = $new_files;
$new_files =~ s/2005/2006/g;
copy( $old, $new_files ) or die "Copy failed: $!";
Erst denken, dann posten --
26. Deutscher Perl- u. Raku -Workshop 15. bis 17.04.2024 in Frankfurt/M.

Winter is Coming
Strat
 2006-01-18 17:52
#62030 #62030
User since
2003-08-04
5246 Artikel
ModeratorIn
[Homepage] [default_avatar]
das gibt probleme, weil
1. readdir auch verzeichnisse zurueckgibt, und die kann man mit File::Copy nicht so einfach kopieren, sondern muss sie - wenn gewuenscht - explizit anlegen
2. es im beispiel egal zu sein scheint, ob der kopiervorgang erfolgreich war oder fehlgeschlagen ist.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
use File::Copy;
my home_dir = getcwd . "/files";

opendir (my $DIR, $home_dir) or die "Error: couldn't open dir $home_dir: $!\n";
FILE:
while (my $file = "$home_dir/" . readdir($DIR) ) {

# ueberspringe verzeichnisse, links, ... nur wirkliche dateien nicht
next FILE unless -f $file;

# ersetze das erste vorkommen von 2005 durch 2006
(my $newFile = $oldFile) =~ s/2005/2006/;

# versuche zu kopieren
copy($oldFile, $newFile) or
die "Error: couldn't copy '$oldFile' => '$newFile': $!\n";

} # while
closedir $DIR;

nicht getestet
perl -le "s::*erlco'unaty.'.dk':e,y;*kn:ai;penmic;;print"
http://www.fabiani.net/
Rambo
 2006-01-18 18:00
#62031 #62031
User since
2003-08-14
803 Artikel
BenutzerIn

user image
jep vielen dank,
noch min. änderungen und es funktionierte

fürti remo
Rambo
 2006-01-18 18:04
#62032 #62032
User since
2003-08-14
803 Artikel
BenutzerIn

user image
@strat, werde deins nach her auch noch probieren ich habe
es jetzt auf die schnelle so gemacht
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
use strict;
use warnings;
use File::Copy;
use Cwd;

my $home_dir = getcwd;
$home_dir = "$home_dir/tangosimu";

opendir(DIR,$home_dir) or die $!;
while (my $filename = readdir DIR)
{
my $new_files = $home_dir . '/' . $filename;
next unless -f $new_files;
my $old = $new_files;
$new_files =~ s/2005/2006/g;
if ($old eq $new_files) {
}
else {
copy("$old", "$new_files") or die "Copy failed: $!";
}

}
closedir DIR;


habe dabei aus dem beitrag von esskar geklaut.
@esskar ich gelobe besserung


vielen dank

rambo
renee
 2006-01-18 23:03
#62033 #62033
User since
2003-08-04
14371 Artikel
ModeratorIn
[Homepage] [default_avatar]
Hier hast Du etwas ueberfluessiges drin:
Code: (dl )
1
2
3
4
5
      if ($old eq $new_files) {
}
else {
copy("$old", "$new_files") or die "Copy failed: $!";
}


Da sagst Du besser:
Code: (dl )
1
2
3
      if ($old ne $new_files) {
copy("$old", "$new_files") or die "Copy failed: $!";
}


oder
Code: (dl )
1
2
3
unless ($old eq $new_files) {
copy("$old", "$new_files") or die "Copy failed: $!";
}
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/
Dubu
 2006-01-19 10:01
#62034 #62034
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
[quote=renee,18.01.2006, 22:03]
Code: (dl )
1
2
3
if ($old ne $new_files) {
     copy("$old", "$new_files") or die "Copy failed: $!";
}
[/quote]
Überflüssige Anführungszeichen.
Code: (dl )
copy($old, $new_files) or die "Copy failed: $!";

Wo hast du die her, Rambo? In Strats Code waren sie noch nicht.
Rambo
 2006-01-19 10:30
#62035 #62035
User since
2003-08-14
803 Artikel
BenutzerIn

user image
@dubu, diese hab ich rein gemacht als ich noch mit dem
ersten teil den ich auch gepostet hatte probiert habe.
dieser hatte aber nicht fubnktioniert und ich hatte es
dann mit anführunszeichen probiert.
danch habe ich mein 2ten teil probiert den ich von esskar abgeschaut hatte und dort dann das mit anführungszeichen
mit rein kopiert.

ich muss zugeben das ich es noch nicht 100% begriffen habe
wann ich " ' ` einsetzen kann und sollte.
ich mach einfach viel zu wenig mit perl da die hauptaufgabe
in anderen teilen liegen.

@renee, danke für die hinweise ich habe es schon notiert und
eingebaut.

merci

rambo
Crian
 2006-01-19 11:03
#62036 #62036
User since
2003-08-04
5866 Artikel
ModeratorIn
[Homepage]
user image
qq~...~ bzw. "..." benutzt man, wenn man möchte, dass Variablen darin interpoliert (ausgewertet) werden.
q~....~ bzw. '...' benutzt man, wenn Variablen im inneren nicht interpoliert werden sollen.
qx~...~ bzw. `...` benutzt man für Systembefehle, deren Ausgabe man fangen will (üblicher Weise mit my $blubb = qx~dir~;).
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
<< >> 9 Einträge, 1 Seite



View all threads created 2006-01-18 17:26.