2012-03-08 3 views
-5

Perlでポインタの概念を使うには?例えば、私は行を持っていて、ポインタを使ってその行のどこに位置するかによって、指定された文字列を検索したいとします。親切に私にお勧めします。Perlでのポインタ

だから私は、私のようにそれに値を持つ列を次のようにデータを持っている第一のファイルと同じように...キーこれで2つのファイルを持っている

ID|Rating_Provider|Time|QualityRating z6Y1kWFT99|S&P_LONG|20110120 12:00:00 AM|NR z6Y1kWFT99|MOODY'S_LONG|20101101 12:00:00 AM|NR 

と第二のファイルに、私は次の列のようにデータを持っていますその中に...今、最終的に私はなどのデータを参照する必要が

ID|BBCMPSEC|QualityRating_S&P_LONG|Time_S&P_LONG|QualityRating_MOODY'S_LONG|Time_‌​MOODY'S_LONG 

...など

ID|BBCMPSEC|QualityRating_S&P_LONG|Time_S&P_LONG|QualityRating_MOODY'S_LONG‌​|Time_MOODY'S_LONG z6Y1kWFT99|xxx|NR|20110120 12:00:00 AM. 

答えて

6

ETA:ご意見に基づき、Text::CSVをお勧めします。ドキュメントを見て、それは非常に有用です。

use Text::CSV; 
my $csv = Text::CSV->new({ 
    binary  => 1, 
    sep_char => "|", 
}); 
open my $fh, "<", "inputfile" or die $!; 

while (my $row = $csv->getline($fh)) { 
    # @$row now contains your row data 
} 

旧答え

"ポインタ" はperlで使用されていない:基本的に、あなたのような何かをするだろう。私はあなたが試合の位置を意味すると仮定します。いくつかの方法があります。

perl -lwe 'print index("foobar", "bar");' 

あなたはおそらくいくつかのより複雑なマッチのために、正規表現を必要とするならば、あなたはあなたのマッチが始まる位置を格納し、定義済みの変数@-を、使用することができます:あなたはどんな正規表現を必要としない場合は、indexを使用することができます。

perl -lwe '$str = "foobar"; if ($str =~ /bar/) { print $-[0] }' 

ただし、あなたがしようとしていることを教えてください。文字列のオフセットを使用することは、このボックスの中で最も優れたperlツールではありません。あなたの問題を解決する方法はずっと良いと思います。

+0

私はパイプ区切りファイル内の特定の配列位置にデータを印刷しようとしていますが、どうすればよいでしょうか? – user1194777

+1

@ user1194777これはあなたのデータによって異なります。適切なCSVであれば、[Text :: CSV](http://search.cpan.org/perldoc?Text::CSV)の使用を検討することもできます。適切な固定幅であれば、 'substr'または' unpack'を考慮してください。より具体的には、私はあなたのデータについてのより多くの情報、好ましくはサンプルが必要です。 – TLP

+0

だから私は1番目のファイルのようなキーを持つ2つのファイルを持っています。次のような値の列のデータを持っています... ID | Rating_Provider | Time | QualityRating z6Y1kWFT99 | S&P_LONG | 20110120 12:00:00 AM | NR z6Y1kWFT99 | MOODY'S_LONG | 20101101 12:00:00 AM | NR 2番目のファイルには次のようなデータがあります。ID | BBCMPSEC | QualityRating_S&P_LONG | Time_S&P_LONG | QualityRating_MOODY'S_LONG | Time_MOODY'S_LONG ID | BBCMPSEC | QualityRating_S&P_LONG | Time_S&P_LONG | QualityRating_MOODY'S_LONG | Time_MOODY'S_LONG z6Y1kWFT99 | xxx | NR | 20110120 12:00:00 AM。 – user1194777

1

おそらくposをご覧ください。

use strict; 
use warnings; 
my $str = 'foobarbaz'; 
$str =~ /bar/g; 
print pos($str), "\n"; 
print substr($str, pos($str)), "\n"; 
pos($str) = pos($str) + 2; 
print substr($str, pos($str)), "\n"; 
関連する問題