Schrift
[thread]6298[/thread]

Schleife: Dateien umbenennen: Prob mit substr

Leser: 3


<< |< 1 2 3 4 >| >> 32 Einträge, 4 Seiten
steinwolf
 2004-05-31 17:39
#82821 #82821
User since
2003-08-04
367 Artikel
BenutzerIn
[default_avatar]
Hi,
folgendes Script soll alle Dateien in einem Verzeichnis umbenennen. Genauer, einfach an jeder Datei ein .HID anhängen...
sprich datei.txt.HID <- so oder so ähnlich sehen alle Dateien dann aus. Leider gibt substr nur das .HID zurück. Ich will aber im Prinzip die andere Seite, also datei.txt
Kann ich hier überhaupt mit substr arbeiten oder musses ein regex sein?

P.S.
ich bin ansich gegen Regexes weil mein Code sehr schnell sein muss, sind einige Tausend Dateien die binnen einiger Sekunden umgenannt werden sollen..


mfg steinigen

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

use strict;

my $dir = "E:/Perl/bin/test";
chdir($dir);

opendir(DIR, $dir);
foreach my $file(readdir(DIR)) {
if(!-d $file ) {

if($file =~/\.HID$/) {
my $cut = substr($file, -4); #HIER STIMMT WAS NICHT
rename($file, $cut);
}
}
}
#if(!$file =~/^\./) { rename($file, "$file\.HID"); }
closedir(DIR);
"Did you know? You can use your old motor oil to fertilize your lawn." - Blinkster - Professionelles EDV Forum
steinwolf
 2004-05-31 17:53
#82822 #82822
User since
2003-08-04
367 Artikel
BenutzerIn
[default_avatar]
Hi, habs nun so gelöst:
ist aber wiegesagt mit regexes :-(
allerdings funktioniert nun der ANHANG von .HID nicht,d as entfernen schon..
mist

mfg steinigen



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
#!perl -w

use strict;

my $dir = "E:/Perl/bin/test";
chdir($dir);

opendir(DIR, $dir);
foreach my $file(readdir(DIR)) {
if(!-d $file ) {
my $copy = $file;

$file =~s/\.HID$//i;
$file =~s//\.HID$/i; #ABER WARUM GEHT DAS NUN NICHT???

rename($copy, $file);
}
}

#if(!$file =~/^\./) { rename($file, "$file\.HID"); }


closedir(DIR);
"Did you know? You can use your old motor oil to fertilize your lawn." - Blinkster - Professionelles EDV Forum
kabel
 2004-05-31 17:56
#82823 #82823
User since
2003-08-04
704 Artikel
BenutzerIn
[default_avatar]
laut text willst du an jede datei ein .HID anhängen...
der code enthält allerdings eine bedinung, dass .HID das dateinamenende sein soll ...

was willst du nu genau?

regexp sind sehr schnell. die frage ist, ob du überhaupt perl dafür brauchst. so rein aus dem gedächtnis:

Quote
$ find . -type r -exec mv {} {}.HID \;
$ find . -name '*.HID' -exec my_shell_script {} \;

vorsicht: das stimmt noch nicht ganz! ich hab kein unix zum experimentieren hier (lies: bin zu faul).
-- stefan
steinwolf
 2004-05-31 18:02
#82824 #82824
User since
2003-08-04
367 Artikel
BenutzerIn
[default_avatar]
ich hab XP drauf, und hier bietet sich als Alternativ höchsten BATCH an, aber darauf hab ich keine lust *würg*

Code: (dl )
1
2
3
4
5
6
 $file =~s/\.HID$//i; # entfernt .HID
$file =~s//\.HID$/i; # habs auch schon gemerkt.. ist schwachsinn,,.

#also:
$file =~s/.*?/.*?\.HID$/i;
#sieht total doof aus und funzt auch nicht, wie denn nu??
:(


edit:
"regexp sind sehr schnell"

aber längst nicht so schnell wie substr!!!\n\n

<!--EDIT|steinwolf|1086012209-->
"Did you know? You can use your old motor oil to fertilize your lawn." - Blinkster - Professionelles EDV Forum
Heromaster
 2004-05-31 18:30
#82825 #82825
User since
2003-08-05
220 Artikel
BenutzerIn
[default_avatar]
Probiers mal damit
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
use File::Copy;
my @files = <"$ENV{ DOCUMENT_ROOT }/config/*.*">;

foreach( @files )
{
my $success = move( "$ENV{ DOCUMENT_ROOT }/config/$_", "$ENV{ DOCUMENT_ROOT }/config/$_.HID" );

if( !$success )
{
print "Fehler beim Umbennen von Datei $_\n";
}
}

Nur Pfade anpassen und evtl. Dein Suchmuster, fertig :)\n\n

<!--EDIT|Heromaster|1086013947-->
Derjenige, der zwei Hasen jagt, lässt einen zurück und verliert den anderen.
coax
 2004-05-31 19:26
#82826 #82826
User since
2003-08-11
457 Artikel
BenutzerIn
[default_avatar]
So kannst du etwas mit substr oder einer Regexp an einen String anhaengen
Code: (dl )
1
2
3
4
5
6
7
$file = 'file.txt';
substr($file, length($file), 0) = '.bak';
print "$file\n";
                 
$file = 'file.txt';
$file =~ s/$/\.bak/;
print "$file\n";


Grusz Christian.
,,Das perlt aber heute wieder...'' -- Dittsche
steinwolf
 2004-05-31 20:27
#82827 #82827
User since
2003-08-04
367 Artikel
BenutzerIn
[default_avatar]
Super, habs jeztzt so gelöst..:
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
#!perl -w

use strict;

my $dir = "E:/Perl/bin/test";
chdir($dir);

print "Type c to crypt, u to uncrypt: ";
chomp(my $stdin = <STDIN>);


opendir(DIR, $dir);
foreach my $file(readdir(DIR)) {
if(!-d $file ) {


my $copy = $file;

$file =~s/\.HID$// if $stdin eq "u";
substr($file, length($file), 0) = '.HID' if $stdin eq "c" && $file !~/\.HID$/;

rename($copy, $file);
}
}
closedir(DIR);


noch verbesserungsvorschläge??

mfg steinigen\n\n

<!--EDIT|steinwolf|1086021421-->
"Did you know? You can use your old motor oil to fertilize your lawn." - Blinkster - Professionelles EDV Forum
pq
 2004-06-01 05:01
#82828 #82828
User since
2003-08-04
12208 Artikel
Admin1
[Homepage]
user image
[quote=coax,31.05.2004, 17:26]So kannst du etwas mit substr oder einer Regexp an einen String anhaengen
Code: (dl )
1
2
$file =~ s/$/\.bak/;
print "$file\n";
[/quote]
äähm... wäre es nicht viel einfacher, zu konkatenieren? also
$file .= '.HID';
per regex oder substr() etwas an einen string anzuhängen, ist ja
nun wirklich wie mit kanonen auf spatzen geschossen...
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
Heromaster
 2004-06-01 06:39
#82829 #82829
User since
2003-08-05
220 Artikel
BenutzerIn
[default_avatar]
[quote=pq,01.06.2004, 03:01][quote=coax,31.05.2004, 17:26]So kannst du etwas mit substr oder einer Regexp an einen String anhaengen
Code: (dl )
1
2
$file =~ s/$/\.bak/;
print "$file\n";
[/quote]
äähm... wäre es nicht viel einfacher, zu konkatenieren? also
$file .= '.HID';
per regex oder substr() etwas an einen string anzuhängen, ist ja
nun wirklich wie mit kanonen auf spatzen geschossen...[/quote]
Ähm, mit Deinem Vorschlag kann man doch so keine Dateien umbenennen?
Derjenige, der zwei Hasen jagt, lässt einen zurück und verliert den anderen.
steinwolf
 2004-06-01 14:44
#82830 #82830
User since
2003-08-04
367 Artikel
BenutzerIn
[default_avatar]
"$file .= '.HID';"

ähem, da hätte ich ansich drauf kommen müssen *sichselbstohrfeig* :laugh:

mfg steinigen..
"Did you know? You can use your old motor oil to fertilize your lawn." - Blinkster - Professionelles EDV Forum
<< |< 1 2 3 4 >| >> 32 Einträge, 4 Seiten



View all threads created 2004-05-31 17:39.