2011-11-10 3 views
0

x14로 텍스트 식별자로 xFE로 분리 된 주어진 지점에서 텍스트를 제거하는 스크립트를 작성 중입니다. 여기 파일 읽기 라인에서 빈 문자열로 덮어 쓰기 Perl

이 라인의 예입니다

þþ \xFE þþ \xFE þþ \xFE þþ \xFE þþ \xFE þþ \xFE þþ \xFE þþ \xFE þþ 

(참고 :.. XFE 문자가 제대로 표시되지 않습니다 죄송합니다)

내가 원하는 것은 n 번째 þþ를 얻는 것입니다. 나는 그것을 \ xFE에 이미 나누었고 값을 검사 할 수있다. 그러나 내가하고 싶은 것은 '~ 사이의 값을 비우는 것이다.

아이디어가 있으십니까?

UPDATE

그냥 내가 문자 þþ 지정에 둘러싸여 내용을 바꾸려면 내가 파일을 읽고있는 중이 야 그 파일의 행의 n 번째 위치에 명확합니다. \ xFE 및 \ x14 문자를 사용하는 CSV 파일입니다. 내가 뭘 하려는지 \ xFE에서 줄을 나눈 다음 \ x14 문자 사이의 값을 가져 와서 그 값을 파일에 덮어 쓴다.

+0

이미 split(), assign, join()을 시도 했습니까? 고려한 내용과 시도한 내용, 그리고 왜 작동하지 않는 이유를 알고 있으면 제안 된 답변에서 이미 문제가있는 해결책을 제안하지 않는 것이 유용 할 것입니다. –

+0

위의 줄에서 무엇을 얻어야하는지에 대한 예가 매우 도움이 될 것입니다. –

답변

0

'aaZbbZccZddZeeZff'라는 문자열을 사용하므로 사용중인 문자보다는 n 번째 항목을 식별하기가 쉽습니다. 정규 표현식으로

my $data = 'aaZbbZccZddZeeZff'; 
$data =~ s/((?:..Z){3})../\1/; 
print $data; 
print "\n"; 

이는 문자열을 반환합니다 네 번째 항목을 제거하는 'aaZbbZccZZeeff'(두배로 구분 기호를 주 -이 경기에 구분 기호를 추가하여 수정이 용이하지만).

이미 목록으로 분할 한 경우 splice를 사용하여 목록에서 항목을 제거한 다음 문자열을 재구성 할 수도 있습니다.

my $data = 'aaZbbZccZddZeeZff'; 
my @data = split('Z',$data); 
splice(@data,3,1); 
print $data; 
print "\n"; 

이렇게하면 'aaZbbZccZeeZff'가 인쇄됩니다.