2009-09-11 18 views
10

私は、文字列を持っている、タブで区切られたいくつかの部分で:文字列をPerlで2つの部分に分割するにはどうすればよいですか?

私は「こんにちは」 $kで終わると、残りは $vで終わるように、最初のタブの上にそれを分割したい
Hello\t2009-08-08\t1\t2009-08-09\t5\t2009-08-11\t15 

。これはうまくいきません。

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

どうすればいいですか? 、あなたは(正の場合)に分割する機能にフィールドの最大数を与える、split()に3番目のパラメータを使用する必要があることを得るために

+3

実際、私はsplit()のドキュメントを読んだだけで、うんざりでした。グーグル、そしてここに来た。どこで私は答えを見つけた。 – Chap

答えて

36

my($first, $rest) = 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

いいえそれはあなたを与えるだろう最初の2つの項目と残りの部分を投げる。これを試してみてください:

my ($k, $v) = split(/\t/, $string, 2); 
+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(.+)/; 
関連する問題