2013-10-22 2 views
1

을 변경했습니다. 어떻게해야합니까? 나는 지금까지 이것을 가지고있다 :I 내보내 다음 입력 펄에서 파일을보고하고 그것이 내가 기존의 것들 사이에 빈 줄을 수출 한 후, 입력하여 파일을 펄에서 txt 파일을 변경 찾고

#!/usr/bin/perl; 
use strict; 
use warnings; 
print "Hi! This Program Will Input\n"; 
print "The File and Export A New\n"; 
print "File With A Blank Line In-Between\n"; 
print "Every Other Line\n"; 
sleep(2); 
print "\n"; 
print "\n"; 
print "Working\n"; 
print "\n"; 
sleep(1); 
print "\n"; 
print "Working\n"; 
sleep(1); 

open(my $in, "<", "input.txt") or die "Can't Open Input.txt: $!"; 
open(my $out, ">", "output.txt") or die "Can't Open Output.txt: $!"; 
my @lines = <$in>; 
while (<$in>) { 
    print $out 
    print $lines[$#lines]; 
    print " "; 
} 


print "Completed Successfully!!\n"; 
print "\n"; 
print "Outputed to Output.txt\n"; 


close $in or die "$in: $!" 

나는 무엇이 있습니까? 나는 단지 펄을 배우기 때문에 나는별로 모른다.

답변

2

문제는 while 루프입니다. while을 사용하여 파일 핸들을 반복하거나 for으로 파일 내용을 저장 한 배열을 반복 할 수 있습니다. 반복자가 고갈 될 때까지 반복자를 처리 할 수 ​​있으며 배열의 모든 내용을 추출하기 위해 수행하면 반복문을 while 루프에서 다시 처리하는 것은 잘못된 것입니다.

그 외에도 파일 핸들을 인쇄하려면 동일한 호출에서 print() 함수의 첫 번째 인수로 전달해야하고 " "은 줄 바꿈이 아니며 \n은 줄 바꿈입니다.

my @lines = <$in>; 
#while (<$in>) { 
for (@lines) { 
    print $out $_; 
    print $out "\n"; 
} 

하지만 모든 코드를 잊어 버리고 한 줄짜리 코드를 배울 수 있습니다. 결과는 같습니다.

perl -ne 'print "$_\n"' input.txt >output.txt 
+0

굉장! 이것은 훌륭하게 작동했습니다! 어떻게 그 과정을 바꾸겠습니까? I.E - 모든 여분의 줄을 제거 하시겠습니까? – user2907651

+0

'print()'를 조건문 ('if')으로 둘러 싸고 빈 행인지, 엄격한 비교'eq' 또는 정규 표현식 ('\ s' 또는'\ S')이 유용할지 검사합니다). – Birei