Как я могу получить все слово на основе индекса нет этой строки в Perl - PullRequest
0 голосов
/ 02 октября 2011

У меня есть одна строка, как

comments:[I#1278327] is related to office communicator.i fixed the bug to declare it null at first time.

Здесь я ищу индекс I#, тогда я хочу, чтобы все слово означало [I#1278327]. Я делаю это так:

open(READ1,"<letter.txt");
while(<READ1>)
{
 if(index($_,"I#")!=-1)
 {
  $indexof=index($_,"I#");
  print $indexof,"\n";
  $string=substr($_,$indexof);##i m cutting that string first from index of I# to end then...
  $string=substr($string,0,index($string," "));
  $lengthof=length($string);
  print $lengthof,"\n";
  print $string,"\n";
  print $_,"\n";
 }
}

Есть ли какой-либо API в perl для определения длины слова непосредственно после нахождения индекса I# в этой строке.

Ответы [ 2 ]

3 голосов
/ 02 октября 2011

Вы можете сделать что-то вроде:

$indexof=index($_,"I#");
$index2 = index($_,' ',$indexof);
$lengthof = $index2 - $indexof;

Тем не менее, большая проблема в том, что вы используете Perl, как если бы это был BASIC.Более хитрый подход к задаче печати выбранных строк:

use strict;
use warnings;

open my $read, '<', 'letter.txt'; # safer version of open

LINE:
while (<$read>) {
        print "$1 - $_" if (/(I#.*?) /);
}
1 голос
/ 02 октября 2011

Я бы использовал вместо этого регулярное выражение, регулярное выражение позволит вам сопоставить шаблон ("I#"), а также захватить другие данные из строки:

$_ =~ m/I#(\d+)/;

Строка выше будет соответствовать и установить $1на номер.

См. perldoc perlre

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...