2009-09-11 2 views
10

나는 문자열을 가지고 그 탭으로 구분 된 여러 부품 :문자열을 Perl로 두 부분으로 나눌 수있는 방법은 무엇입니까?

내가 "안녕하세요" $k에서 끝나고 휴식이 $v에서 끝나도록, 첫 번째 탭을 분할 할
Hello\t2009-08-08\t1\t2009-08-09\t5\t2009-08-11\t15 

. 문제가 해결되지 않습니다.

my ($k, $v) = split(/\t/, $string); 

어떻게하면됩니까?

my($first, $rest) = split(/\t/, $string, 2); 
+3

실제로, 나는 split()에 대한 문서를 읽었으며 당황 스러웠다. googled했고, 여기에왔다. 내가 그 답을 찾은 곳. – Chap

답변

36

은을 취득하기 위하여는, 당신은 (긍정적 인 경우에하는 것이)으로 분할하는 기능을 필드의 최대 수를 제공 split()에 3 매개 변수를 사용해야합니다 처음 두 항목은 나머지 부분을 던집니다. 이것을 시도하십시오 :

my ($k, $v) = split(/\t/, $string, 2); 
+0

값의 길이가 불확실하고 $ v에서 모든 값을 캡처하려고하면 어떻게 될까요? $ v의 형식은 date_1 \ tvalue_1 \ tdate_2 \ tvalue_2 \ tdate_3 \ tvalue_3 ... – biznez

+2

과 같습니다. $ k에서 "date_1"을 (를) 캡처하고 $에서 "value_1 \ tdate_2 \ tvalue_2 \ tdate_3 \ tvalue_3 ..."을 (를) 캡처합니다. V. 더 자세한 정보는'split()'함수의 perldoc 레퍼런스 페이지에 링크되어있다 - 당신이 원할 수있는 모든 세부 사항으로 어떻게 작동하는지 설명 할 것이다. 나는 당신이 그것을 읽는 것이 좋습니다. Perldoc은 매우 유익합니다. –

7

아니, 당신을 줄 것이다 :

+0

값의 길이가 불확실하고 $ v에서 모든 값을 캡처하고자하면 어떻게 될까요? $ v의 형식은 date_1 \ tvalue_1 \ tdate_2 \ tvalue_2 \ tdate_3 \ tvalue_3과 같습니다. – biznez

+0

크리스 루츠 (Chris Lutz)가 그의 코멘트에서 말했듯이, 그 숫자는 펄 (Perl)에게 분할 할 부분의 수를 알려줍니다. 따라서 값 2를 사용하면 첫 번째 부분은 $ v로 시작합니다. 첫 번째 부분은 분할에서 소비되고 나머지 부분은 $ v로 변경되지 않습니다. –

1

또 다른 옵션은 간단한 정규 표현식을 사용하는 것입니다.

my($k,$v) = $str =~ /([^\t]+)\t(.+)/; 
관련 문제