[PERL] 한줄씩 읽어 문자조건을 만족할때 원하는 문자 출력하기
글쓴이: momo7 / 작성시간: 목, 2014/07/17 - 10:17오후
오랜만에 인사드리네요.
아무리 혼자 해도 답이 나오질 않아, 문제가 무엇인지 의견을 여쭙니다.
데이터 중간에 "tas ="이 나오면 야호를 입력하라는 것인데
숫자는 잘 인식하나, 문자로 하면 이상하게 원하는 결과가 나오질 않습니다.
혹시 무슨 문제 때문인지 아시나요?
실제로는 "tas =" 문자가 나온 이후로 데이터를 정리하며 출력하는 코드를 짤려고 하는데
테스트 코드가 진도가 안나가니, 다음으로 갈 수가 없습니다.
--------data ------------
1,1,1,1,1
2,2,2,2,2
tas =
1,1,1,1,1
2,2,2,2,2
2,2,2,2,3
2,2,2,2,4
2,2,2,2,5
------------------------
--------기대하는 결과---
1,1,1,1,1
2,2,2,2,2
야호
tas =
1,1,1,1,1
2,2,2,2,2
2,2,2,2,3
2,2,2,2,4
2,2,2,2,5
-------------------
use strict; use warnings; use 5.010; my (%arr,@arr,$i); open my $fh1, '<', 'test1.txt' or die $!; while (<$fh1>){ @arr = split (/\,/); if ($arr[0] eq "tas ="){ print "야호\n"; } print join ",", @arr; }
File attachments:
첨부 | 파일 크기 |
---|---|
test1.txt | 84바이트 |
Forums:
while 문 조건부에서 $fh1 파일핸들로부터 한
while 문 조건부에서 $fh1 파일핸들로부터 한 줄을 읽어서 $_ 변수에 담는데, 이 때는 마지막 개행문자까지 붙어있는 채로 오기 때문에, 비교를 "tas =" 가 아니라 "tas =\n"과 하면 잘 될 겁니다.
(만일 윈도우라면 "tas =\r\n"과 해야 하려나 모르겠는데 아마 \n 만으로도 잘 될 것 같습니다)
사실 숫자를 읽을 때도 첫 줄을 읽었을 때 @arr 배열의 원소는
( "1", "1", "1", "1", "1\n" )
이었죠. "1\n"을 숫자로 취급하여 연산할 때는 1로 처리되니까 티가 나지 않았을 뿐이고요.
아니면 루프 진입한 후 제일 먼저
chomp $_;
를 실행해서 개행문자를 제거할 수도 있겠는데, 이쪽이 일관성 측면에서는 낫지 싶습니다.
좋은 하루 되세요!
감사합니다
덕분에 안풀리는 문제를 해결했습니다.
데이터 파일구조에 그런것 까지 신경써야 하는줄은 몰랐습니다.
덕분에 하나 더 배우고 갑니다.
댓글 달기