2014-07-21 1 views
1

그래서 Perl을 처음 사용하고 CSV 파일의 행을 읽을 수있는 스크립트를 작성하고 해당 CSV 파일의 특정 열과 연관된 파일의 이름을 바꿉니다.CSV 파일을 구문 분석하는 동안 파일 확장자 제외

my $filename_formatted = "$row->[3]"."_"."$row->[4]"."_"."$row->[2]\n"; 
my $resume_id = $row->[1]; 


if (-e $resume_id){ 
    rename($resume_id, $filename_formatted); 
} 

기본적으로 $resume_id의 파일 확장자까지만 허용하려면 어떻게해야합니까? $row->[1] 변수에는 "resume_1231.pdf"또는 "resume_1231.doc"와 같은 것이 포함되어 있습니다. 나는 기본적으로 모든것을 원한다. .

정규식이 필요 하겠지만 Perl에서는 사용하지 않았다. 나도 몰라

$formatted_resume_id = /($row->[1])?!\..*$/

.

답변

0

$row->[1] 변수는 "resume_1231.pdf"또는 "resume_1231.doc"같은 것을 포함한다.

나는 기본적으로 .

에 그룹을 캡처와 시도까지 모든 것을 할 수 있습니다.

Live demo

^([^.]*) 
또는 게으른 방법을 사용하여.

^(.*?)\. 

샘플 코드 :

$mystring = "resume_1231.pdf"; 
if($mystring =~ m/^([^.]*)/) { 
    print "The file name is $1"; 
} 
0

난 당신이 파일 이름 (그래서 당신은 파일 이름이 점을 포함해도 전체 이름을 얻을 것)의 최종 점에 이르기까지 원하는 것 같아요. 이 같은

뭔가를 수행해야합니다

if ($row->[1] =~ /(.*)\./) { 
    $formatted_resume_id = $1; 
} 
0

그래서 대답은 분명이했다,

my $resume_file = "bogus_filename.doc"; 

my ($name) = $resume_file =~ /(.+?)(\.[^.]*$|$)/; 

my($ext) = $resume_file =~ /(\.[^.]+)$/; 

그것은 단지 매우 마지막 기간까지 수용으로 이것은, 여분의 기간을 고려 것이다 .

나는 이것이 어떻게 작동하는지에 대해서는 여전히 확신이 없기 때문에 누구나 첫 번째 정규식을 분해 할 수 있다면 좋을 것입니다. 내가 이해 (. +?)하지만 그 정규식의 두 번째 부분은 확장을 포함하지 않는 방법에 관해서는 길을 잃었 어.

관련 문제