Указатели в Perl - PullRequest
       1

Указатели в Perl

0 голосов
/ 08 марта 2012

Как использовать концепции указателей в Perl?Например, у меня есть строка, и я хочу найти заданную строку в любом месте этой строки путем позиционирования с помощью указателя.Пожалуйста, предложите мне.

Итак, у меня есть 2 файла с ключом, как в 1-м файле. У меня есть данные, как в следующих столбцах, со значением в нем ...

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.

Ответы [ 2 ]

6 голосов
/ 08 марта 2012

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.Я полагаю, вы имеете в виду позицию матча.Есть несколько способов.Вы можете использовать index, если вам не нужны регулярные выражения:

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

Если вам нужно регулярное выражение, возможно, для более сложных совпадений, вы можете использовать предопределенную переменную @-, в которой хранится позиция, где начинается ваш матч:

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

Однако я предлагаю вам рассказать нам, что вы пытаетесь сделать.Использование смещения строк - не лучший инструмент Perl в этом поле, и я подозреваю, что есть гораздо лучшие способы решения вашей проблемы.

1 голос
/ 08 марта 2012

Возможно, посмотрите на 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";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...