<?xml version="1.0" encoding="koi8-r"?>
<rss version="0.91">
<channel>
    <title>OpenForum RSS: Perl. Вопрос по поиску соответствия в строке</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9407.html</link>
    <description>Доброго времени суток!&lt;br&gt;&lt;br&gt;Никак не получается разобраться ((&lt;br&gt;Задача такая: есть два текстовых файла с разными длинами строк (во втором файле строка с пробелами).&lt;br&gt;Необходимо проверить присутствуют ли строки из первого файла в строках второго. И если присутствуют, то вывести эти строки в третий файл.&lt;br&gt;&lt;br&gt;#!/usr/bin/perl -w             &lt;br&gt;           &lt;br&gt;#Открываем файл активных списка и заносим в массив&lt;br&gt;open (KILL,&quot;kill.txt&quot;) &amp;#124;&amp;#124; die &quot;$!&quot;;&lt;br&gt;&#064;kill=&amp;lt;KILL&amp;gt;;&lt;br&gt;close (KILL);&lt;br&gt;&lt;br&gt;#Открываем файл активных сессий и заносим в массив&lt;br&gt;open (SESSION,&quot;session.txt&quot;) &amp;#124;&amp;#124; die &quot;$!&quot;;&lt;br&gt;&#064;ses=&amp;lt;SESSION&amp;gt;;&lt;br&gt;close (SESSION);&lt;br&gt;&lt;br&gt;#Открываем файл-результат&lt;br&gt;open (KILL_SES,&quot;&amp;gt;kill_ses.txt&quot;) &amp;#124;&amp;#124; die &quot;$!&quot;;&lt;br&gt;&lt;br&gt;#Определяем размеры массивов&lt;br&gt;$size1=&#064;kill;&lt;br&gt;$size2=&#064;ses;&lt;br&gt;&lt;br&gt;$i=0;&lt;br&gt;while ($i&amp;lt;$size1) &#123;&lt;br&gt;   $temp1=$kill&#091;$i&#093;;&lt;br&gt;                   $j=0;&lt;br&gt;           while ($j&amp;lt;$size2) &#123;&lt;br&gt;                                      $_=$ses&#091;$j&#093;;&lt;br&gt;#промежуточная проверка      print $_;&lt;br&gt;#промежуточная проверка      print $temp1;&lt;br&gt;</description>

<item>
    <title>Perl. Вопрос по поиску соответствия в строке (Square)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9407.html#10</link>
    <pubDate>Mon, 12 Mar 2012 15:22:11 GMT</pubDate>
    <description>&amp;gt;&amp;gt; foreach $r (&#064;kill)&#123;foreach $t (&#064;ses)&#123;if ($t=~/$r/)&#123;print $t;&#125;&#125;&#125; &lt;br&gt;&amp;gt;&amp;gt; Но вообще ваш пример работает. Все он создает...&lt;br&gt;&amp;gt; У меня он промежуточные переменные выводит правильно, но в файл-результат не записывает. &lt;br&gt;&amp;gt; С Вашим примером тоже (( &lt;br&gt;&lt;br&gt;Мой пример в файл ничего не пишет, он выводит на экран. Я написал его только для того чтобы показать вам как легко и просто решается ваша задача без этих ужасных циклов с счетчиками и определением размера массива :)&lt;br&gt;&lt;br&gt;Если! Мой паример! Таки выведет вам на экран строки!&lt;br&gt;&lt;br&gt;то сохранив скрипт в файл можно сделать так:&lt;br&gt;&lt;br&gt;perl скрипт.pl &amp;gt; файл_в котором_сохранится_то_что_он_вывел_на_экран&lt;br&gt;&lt;br&gt;На самом деле,  ваш пример, когда его запускаю я, создает файл с правильным содержимым.&lt;br&gt;&lt;br&gt;Промежуточную проверку нужно вставить не только перед проверкой условия, но и в результат проверки условия:&lt;br&gt;&lt;br&gt;#    промежуточная проверка          &lt;br&gt;print $_;&lt;br&gt;#    промежуточная проверка          &lt;br&gt;print $temp1;&lt;br&gt;                      if (/$temp1/) &#123; &lt;br&gt;#    промежуточная проверка          &lt;br&gt;</description>
</item>

<item>
    <title>Perl. Вопрос по поиску соответствия в строке (Goshik1)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9407.html#9</link>
    <pubDate>Mon, 12 Mar 2012 11:53:53 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; верно? ;-) &lt;br&gt;&amp;gt;&amp;gt; Да, нечто вроде было :-) &lt;br&gt;&amp;gt;&amp;gt; Разобрался, немного переделав скрипт :-) &lt;br&gt;&amp;gt;&amp;gt; Рабочий скрипт ниже (если кому-нибудь будет интересно): &lt;br&gt;&amp;gt; Надо было подчистить концы строк примерно так: &lt;br&gt;&amp;gt; $temp1=~s/&#092;r//; &lt;br&gt;&amp;gt; $temp1=~s/&#092;n//; &lt;br&gt;&amp;gt; ну и во второй переменной аналогично.&lt;br&gt;&amp;gt; Хотя в одной из них в общем-то не надо (котораЯ регуляркОЙ проверяется &lt;br&gt;&amp;gt; - может содержать конец строки, но матчиться.) &lt;br&gt;&lt;br&gt;Спасибо, попробую.&lt;br&gt;&lt;br&gt;</description>
</item>

<item>
    <title>Perl. Вопрос по поиску соответствия в строке (PavelR)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9407.html#8</link>
    <pubDate>Mon, 12 Mar 2012 11:05:09 GMT</pubDate>
    <description>&amp;gt;&#091;оверквотинг удален&#093;&lt;br&gt;&amp;gt;&amp;gt; А выводит оно у тебя так: &lt;br&gt;&amp;gt;&amp;gt; Текущий элемент массива kill: XXXXX &lt;br&gt;&amp;gt;&amp;gt; &#091;ПУСТАЯ СТРОКА&#093; &lt;br&gt;&amp;gt;&amp;gt; Текущий элемент массива ses:  YYYYY &lt;br&gt;&amp;gt;&amp;gt; &#091;ПУСТАЯ СТРОКА&#093; &lt;br&gt;&amp;gt;&amp;gt; Условие не выполнено &lt;br&gt;&amp;gt;&amp;gt; верно? ;-) &lt;br&gt;&amp;gt; Да, нечто вроде было :-) &lt;br&gt;&amp;gt; Разобрался, немного переделав скрипт :-) &lt;br&gt;&amp;gt; Рабочий скрипт ниже (если кому-нибудь будет интересно): &lt;br&gt;&lt;br&gt;Надо было подчистить концы строк примерно так: &lt;br&gt;&lt;br&gt;$temp1=~s/&#092;r//; &lt;br&gt;$temp1=~s/&#092;n//; &lt;br&gt;&lt;br&gt;ну и во второй переменной аналогично.&lt;br&gt;&lt;br&gt;Хотя в одной из них в общем-то не надо (котораЯ регуляркОЙ проверяется - может содержать конец строки, но матчиться.)&lt;br&gt;</description>
</item>

<item>
    <title>Perl. Вопрос по поиску соответствия в строке (Goshik1)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9407.html#7</link>
    <pubDate>Mon, 12 Mar 2012 07:46:46 GMT</pubDate>
    <description>&amp;gt; Хы.&lt;br&gt;&amp;gt; А выводит оно у тебя так: &lt;br&gt;&amp;gt; Текущий элемент массива kill: XXXXX &lt;br&gt;&amp;gt; &#091;ПУСТАЯ СТРОКА&#093; &lt;br&gt;&amp;gt; Текущий элемент массива ses:  YYYYY &lt;br&gt;&amp;gt; &#091;ПУСТАЯ СТРОКА&#093; &lt;br&gt;&amp;gt; Условие не выполнено &lt;br&gt;&amp;gt; верно? ;-) &lt;br&gt;&lt;br&gt;Да, нечто вроде было :-)&lt;br&gt;Разобрался, немного переделав скрипт :-)&lt;br&gt;Рабочий скрипт ниже (если кому-нибудь будет интересно):&lt;br&gt;&lt;br&gt;#Открываем файл списка пользователей на отключение и заносим в массив&lt;br&gt;open (KILL,&quot;kill.txt&quot;) &amp;#124;&amp;#124; die &quot;$!&quot;;&lt;br&gt;&#064;kill=&amp;lt;KILL&amp;gt;;&lt;br&gt;close (KILL);&lt;br&gt;&lt;br&gt;#Открываем файл активных сессий и заносим в массив&lt;br&gt;open (SESSION,&quot;session.txt&quot;) &amp;#124;&amp;#124; die &quot;$!&quot;;&lt;br&gt;&#064;ses=&amp;lt;SESSION&amp;gt;;&lt;br&gt;close (SESSION);&lt;br&gt;&lt;br&gt;#Открываем файл-результат на запись&lt;br&gt;open (KILL_SES,&quot;&amp;gt;kill_ses.txt&quot;) &amp;#124;&amp;#124; die &quot;$!&quot;;&lt;br&gt;&lt;br&gt;#Определяем размеры массивов kill и ses &lt;br&gt;$size_k=&#064;kill;&lt;br&gt;$size_s=&#064;ses;&lt;br&gt;&lt;br&gt;print &quot;Размер массива kill: &quot;,$size_k,&quot;&#092;n&quot;;&lt;br&gt;print &quot;Размер массива ses: &quot;,$size_s,&quot;&#092;n&quot;;&lt;br&gt;&lt;br&gt;#Обнуляем счетчик&lt;br&gt;$i=0;&lt;br&gt;while ($i&amp;lt;$size_k) &lt;br&gt;   &#123;&lt;br&gt;   $temp1=$kill&#091;$i&#093;;&lt;br&gt;   &#064;words1=map&#123;split &apos; &apos;,$_&#125; $temp1;&lt;br&gt;#  print &quot;words1= &quot;,&#064;words1,&quot;&#092;n&quot;;</description>
</item>

<item>
    <title>Perl. Вопрос по поиску соответствия в строке (PavelR)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9407.html#6</link>
    <pubDate>Mon, 12 Mar 2012 07:35:24 GMT</pubDate>
    <description>&amp;gt;&amp;gt;&amp;gt;&amp;gt; foreach $r (&#064;kill)&#123;foreach $t (&#064;ses)&#123;if ($t=~/$r/)&#123;print $t;&#125;&#125;&#125; &lt;br&gt;&amp;gt;&amp;gt;&amp;gt;&amp;gt; Но вообще ваш пример работает. Все он создает...&lt;br&gt;&amp;gt;&amp;gt;&amp;gt; У меня он промежуточные переменные выводит правильно, но в файл-результат не записывает.&lt;br&gt;&amp;gt;&amp;gt; Ты, как программист скрипта, должен понять, что отсутствие вывода в файл может &lt;br&gt;&amp;gt;&amp;gt; быть по двум причинам : &lt;br&gt;&amp;gt;&amp;gt; - не срабатывает условие &lt;br&gt;&amp;gt;&amp;gt; - не производится запись &lt;br&gt;&amp;gt;&amp;gt; Добавь еще один отладочный print .&lt;br&gt;&amp;gt; Добавил. Я считаю, что не срабатывает условие, потому что нижеприведенный скрипт всегда &lt;br&gt;&amp;gt; выдает &quot;Условие не выполнено&quot;. Хотя на последних элементах массивов есть совпадение: &lt;br&gt;&lt;br&gt;Хы.&lt;br&gt;&lt;br&gt;А выводит оно у тебя так:&lt;br&gt;&lt;br&gt;Текущий элемент массива kill: XXXXX&lt;br&gt;&#091;ПУСТАЯ СТРОКА&#093;&lt;br&gt;Текущий элемент массива ses:  YYYYY&lt;br&gt;&#091;ПУСТАЯ СТРОКА&#093;&lt;br&gt;Условие не выполнено&lt;br&gt;&lt;br&gt;&lt;br&gt;верно? ;-)&lt;br&gt;</description>
</item>

<item>
    <title>Perl. Вопрос по поиску соответствия в строке (Goshik1)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9407.html#5</link>
    <pubDate>Mon, 12 Mar 2012 07:00:58 GMT</pubDate>
    <description>&amp;gt;&amp;gt;&amp;gt; foreach $r (&#064;kill)&#123;foreach $t (&#064;ses)&#123;if ($t=~/$r/)&#123;print $t;&#125;&#125;&#125; &lt;br&gt;&amp;gt;&amp;gt;&amp;gt; Но вообще ваш пример работает. Все он создает...&lt;br&gt;&amp;gt;&amp;gt; У меня он промежуточные переменные выводит правильно, но в файл-результат не записывает.&lt;br&gt;&amp;gt; Ты, как программист скрипта, должен понять, что отсутствие вывода в файл может &lt;br&gt;&amp;gt; быть по двум причинам : &lt;br&gt;&amp;gt; - не срабатывает условие &lt;br&gt;&amp;gt; - не производится запись &lt;br&gt;&amp;gt; Добавь еще один отладочный print .&lt;br&gt;&lt;br&gt;Добавил. Я считаю, что не срабатывает условие, потому что нижеприведенный скрипт всегда выдает &quot;Условие не выполнено&quot;. Хотя на последних элементах массивов есть совпадение:&lt;br&gt;&lt;br&gt;#Определяем размеры массивов kill и ses &lt;br&gt;$size_k=&#064;kill;&lt;br&gt;$size_s=&#064;ses;&lt;br&gt;&lt;br&gt;print &quot;Размер массива kill: &quot;,$size_k,&quot;&#092;n&quot;;&lt;br&gt;print &quot;Размер массива ses: &quot;,$size_s,&quot;&#092;n&quot;;&lt;br&gt;&lt;br&gt;#Обнуляем счетчик&lt;br&gt;$i=0;&lt;br&gt;&lt;br&gt;while ($i&amp;lt;$size_k) &#123;&lt;br&gt;   $temp1=$kill&#091;$i&#093;;&lt;br&gt;   print &quot;Текущий элемент массива kill: &quot;,$temp1,&quot;&#092;n&quot;;&lt;br&gt;                   $j=0;&lt;br&gt;           while ($j&amp;lt;$size_s) &#123;&lt;br&gt;                                    $temp2=$ses&#091;$j&#093;;&lt;br&gt;           </description>
</item>

<item>
    <title>Perl. Вопрос по поиску соответствия в строке (PavelR)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9407.html#4</link>
    <pubDate>Mon, 12 Mar 2012 06:39:45 GMT</pubDate>
    <description>&amp;gt;&amp;gt; foreach $r (&#064;kill)&#123;foreach $t (&#064;ses)&#123;if ($t=~/$r/)&#123;print $t;&#125;&#125;&#125; &lt;br&gt;&amp;gt;&amp;gt; Но вообще ваш пример работает. Все он создает...&lt;br&gt;&amp;gt; У меня он промежуточные переменные выводит правильно, но в файл-результат не записывает. &lt;br&gt;&lt;br&gt;Ты, как программист скрипта, должен понять, что отсутствие вывода в файл может быть по двум причинам :&lt;br&gt;&lt;br&gt;- не срабатывает условие&lt;br&gt;- не производится запись&lt;br&gt;&lt;br&gt;Добавь еще один отладочный print .&lt;br&gt;</description>
</item>

<item>
    <title>Perl. Вопрос по поиску соответствия в строке (Goshik1)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9407.html#3</link>
    <pubDate>Mon, 12 Mar 2012 06:20:42 GMT</pubDate>
    <description>&amp;gt; foreach $r (&#064;kill)&#123;foreach $t (&#064;ses)&#123;if ($t=~/$r/)&#123;print $t;&#125;&#125;&#125; &lt;br&gt;&amp;gt; Но вообще ваш пример работает. Все он создает...&lt;br&gt;&lt;br&gt;У меня он промежуточные переменные выводит правильно, но в файл-результат не записывает. С Вашим примером тоже ((&lt;br&gt;&lt;br&gt;Вот пример текстовых файлов, чтобы было понятнее.&lt;br&gt;&lt;br&gt;массив kill:&lt;br&gt;username1&lt;br&gt;username2&lt;br&gt;&lt;br&gt;массив ses:&lt;br&gt; СЕАНС             ПОЛЬЗОВАТЕЛЬ             ID  СТАТУС  ТИП         УСТР-ВО&lt;br&gt; console                                     0  &amp;#1039;&amp;#174;&amp;#164;&amp;#1028;&amp;#171;оз&amp;#1168;&amp;#173;&amp;#174;  wdcon               &lt;br&gt; rdp-tcp                                 65538  &amp;#1039;аЁ&amp;#1168;&amp;#172;   rdpwd               &lt;br&gt; rdp-tcp#31        username1                 1  &amp;#1026;&amp;#1028;вЁ&amp;#1118;&amp;#173;&amp;#174;  rdpwd               &lt;br&gt;&lt;br&gt;Скрипт должен проверять присутствует ли элемент массива kill (username1) в элементе массива (строке) ses.  Т.е. в итоговый файл должна попасть полностью строка:&lt;br&gt;rdp-tcp#31        username1                 1  &amp;#1026;&amp;#1028;вЁ&amp;#1118;&amp;#173;&amp;#174;  rdpwd&lt;br&gt;</description>
</item>

<item>
    <title>Perl. Вопрос по поиску соответствия в строке (Square)</title>
    <link>https://opennet.me/openforum/vsluhforumID9/9407.html#2</link>
    <pubDate>Sun, 11 Mar 2012 22:10:57 GMT</pubDate>
    <description>foreach $r (&#064;kill)&#123;foreach $t (&#064;ses)&#123;if ($t=~/$r/)&#123;print $t;&#125;&#125;&#125;&lt;br&gt;&lt;br&gt;Но вообще ваш пример работает. Все он создает...&lt;br&gt;</description>
</item>

</channel>
</rss>
