2014-02-11 1 views
0

Я создал текстовое поле. Я хочу контролировать, что пользователь пишет в текстовом поле, читая текстовый файл и сравнивая каждую строку с текстом с помощью Perl. В моем коде я заполняться param('text')Найти строку с помощью filereader in perl

open(DATA, "<baba.txt") or die "Couldn't open file file.txt, $!"; 
while(<DATA>) 
{ 
    if($_=~param('text')) 
    { 
     print $_; 
    } 
} 

У меня нет никаких проблем при чтении файла, но я не мог справиться с матчей. Он ничего не ответил.

Что не так с моим кодом?

ответ

1

Правая часть оператора = ~ должна быть регулярным выражением.

Для получения более подробной информации см. this site.

+1

's/влево/вправо /' – ThisSuitIsBlackNot

+0

Спасибо, я отредактировал мой ответ. – OlivierLi

1
while (<DATA>) 
{ 
    chomp; 
    if (param('text') =~ /\Q$_/) 
    { 
     print $_; 
    } 
} 
+0

На самом деле, его недостаточно для моей ситуации, потому что пользовательский знак отметки 1990 , и я хочу контролировать, могут ли они писать 1990. – user3297904

+0

@ user3297904 публикует некоторые строки из файла и примеры ввода данных. –

+0

они отправят отметку 1990, steve 1890 и в моем текстовом файле просто напишут 1990 1890 1991 в каждой строке только одна дата – user3297904

0

Возможно следующее будет полезно:

use strict; 
use warnings; 

my $text = <<END; 
This is just a BU.NCH of text 
in a here document that will 
be used for some matching in 
just a little bit. 
END 

while (<DATA>) { 
    chomp; 
    if ($text =~ /\b\Q$_\E\b/i) { 
     print $_, "\n"; 
    } 
} 

__DATA__ 
this 
some 
bu.nch 
a 
hello 
world 

Выход:

this 
some 
bu.nch 
a 

Прежде чем пытаться сопоставить слово прочитать из файла, вам нужно chomp его, чтобы удалить (если есть), который обычно равен \n. Есть также несколько других пунктов для вас рассмотреть:

  1. Если вы хотите регистронезависимое матч
  2. При выделении мета-символы в ваших словах, которые могут присутствовать
  3. Принуждение границы слова, чтобы предотвратить in-string.

Пункт (1) выше достигается с использованием модификатора /i. Пункт (2) выполняется путем включения слова «в слова» в следующем выражении: \Q$_\E (\Q uote-meta; \E nd Quote-meta). И последнее использует \b: \b\Q$_\E\b.

Надеюсь, это поможет!

0

попробовать этот

my $text = param('text'); 

open(DATA, "<baba.txt") or die "Couldn't open file file.txt, $!"; 
while(<DATA>) 
{ 
    if($_=~ /$text/) 
    { 
     print $_; 
    } 
} 

, потому что это -> $ _ = ~ ('параметров текста') не регулярное выражение поиска