2012-03-02 3 views
2

私は値を比較するためにループする必要がある文書のページのID範囲を持っています。私の問題は、IDは文字列であり数字ではないので、Perlで範囲を試してみるとうまくいきません。私のレンジループの例と私のデータの例を示します。Perl Range String ID

foreach($begID..$endID){ 
    print $_; 
} 

データの例では、

$begID = ABC-ABC-00001; 
$endID = ABC-ABC-00100; 

私の問題は、私はループこれらの値をすることはできませんあるでしょう。私は " - "に基づいてデータを分割し、00001と00100の値を得ることができますが、その問題はデータが私が扱っている別のファイルによって異なることがあることです。

誰かがこのことについてお伝えする他の方法はありますか?

UPDATE

私はここ(100担当者の下にあることに起因する他の7時間で)私自身の答えを投稿することができますまで、私が思いついたものです:ここ

オーケー、私のように何をしたかであります溶液。アルファベットに当たるまで、数字を正規表現から始めることができます。

($start) = $begID =~ m/(\d+)$/; 
($end) = $endID =~ m/(\d+)$/; 

次にループを作成します。

+0

あなたはより多くの例入力を提供することができますか?文字は常に範囲(A〜C)ですか?彼らはまた、ループで増加しますか? – perreal

+0

ここには、以下に示すいくつかの例があります。ABC-001 ABC001。そのABCは何でもかまいませんし、AB123AC123-0001のような数字を含んでいる可能性もあります。そして、値をループするときに文字を増やすべきではありません。 –

+0

例えば、ABC1231AB001であってもよい。 –

答えて

3

"データは異なる場合があります"

場合は固定文字列の接頭辞+番号を持つことによって、あなたは接頭辞をオフに分割することができます。

my ($prefix, $start) = ($begID =~ /^(\D+)(\d+)$/; 
my ($prefix2, $end) = ($endID =~ /^(\D+)(\d+)$/; 
die "Prefixes don't match" unless prefix eq $prefix2; 
foreach my $index ($start .. $end) { 
    my $id = "prefix$index"; 
} 
+0

データは接頭辞がABC-ABC-0001を含む場合もあるし、ABC-001またはABC001を含む場合もあるため、データはさまざまです。良いことはbegIDで、endIDは常に同じ接頭辞でなければなりません。 –

+0

あなたの答えをもっと見た後、私は私が提供しようとしていた答えで同じことをやっていることに気付きました。再度、感謝します! –