LINUX.ORG.RU

помогите написать кусок pl скрипта

 


0

1

Привет!
Помогите написать кусок для скрипта на perl который сможет делать следующее:
Есть файл aaa в который предыдущим куском скрипта записываются данные в виде:

username1 username2 username100

и есть переменная $usrname, в которой записано имя пользователя (username). Нужно проверять $usrname на совпадение с именами пользователей из файла aaa.



Последнее исправление: s0le (всего исправлений: 1)
Ответ на: комментарий от router

я бы сразу регулярки посоветовал. там как раз примеры типа «открыть файл и читать построчно» в первых главах описаны.

bvn13 ★★★★★
()
<предыдущий кусок скрипта> 

use utf8;
use strict;
use warnings;
use autodie;
use feature qw/say/;

#Есть файл aaa
open $aaa_fh, '<', 'aaa';

# username1 username2 username100
do { chomp; say "Совпадение: [$username] [$_]" if /$username/ } while(<$aaa_fh)>);

<следущий кусок скрипта> 
pru-mike ★★
()

показывай какая часть не работает, подправим, а ВМЕСТО писать не интересно

это можно и на и грепом в шеле сделать.

anonymous
()

предыдущий кусок кода должен записывать не в файл, а в память (скажем, в хеш). проверить наличие ключа в хеше и серилизовать его в файл, надеюсь, сможешь сам.

chg ★★★★★
()

Лучше бы предыдущий кусок кода выводил пользователей через разделитель новой строки.

А так логика в том, что читаем файл кусками (sysread), далее регуляркой или split выдергиваем имена пользователей и сверяем на лету. На границе кусков делаем склеивание имени пользователя до тех пор, пока не прочитаем весь файл.

Все выше касается, когда у тебя миллионы пользователей и хочется компактную программу, а не ту, которая жрет сотни метров на файлах в 10-20Мб :)

gh0stwizard ★★★★★
()
Ответ на: комментарий от router

Нет ошибок.

1. не проверяются границы имени \b

В данном случае это не требуется, имена разделены пробелами и $username, очевидно, пробел не содержит

2. не экранируются возможные спецсимволы в $username

Это вынесено в <предыдущий кусок скрипта> :-)

pru-mike ★★
()
Ответ на: комментарий от pru-mike

> 1. не проверяются границы имени \b
В данном случае это не требуется

Неуд. Есть 2 пользователя, ab и abcdef. Угадай, где твой скрипт даст ложное срабатывание?

router ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.