Поиск по файлу

Nikky

Новичок
Всем привет!
Мне понадобился простейший скрипт, который берет 2 файла, находит строки в первом файле(in.txt), где есть вхождения строк из второго файла(search.txt), и запишет эти строки в третий(out.txt).

Реализовал я это так
PHP:
<?
$in = file('in.txt');
$search = file('search.txt');

$handle = fopen('out.txt', 'a+');
foreach($search as $key)
	{
	foreach($in as $str)
		{
		if(preg_match("/$key/", $str))
			{
			echo $str;
			fwrite($handle, $str);
			}
		}
	}
fclose($handle);
?>
Но почему то в выходной файл записываются только строки для последней строки файла(in.txt). Почему так происходит? Голову изломал уже.
 

Nikky

Новичок
отлаживать не пробовал?
В пхп новичок, отлаживать пока не имею опыта.

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

Фанат

oncle terrible
Команда форума
Вот именно это тебе и надо понять.
Вместо того, чтобы "ломать голову" и "соображать" надо заниматься отладкой.
То есть - выяснять, что делает твоя программа.
В частности, вмето вывода в файл, программа должна выводить на экран максимум информации.
 

Nikky

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

Фанат

oncle terrible
Команда форума
Я объясняю, что ты неправильно ставишь вопрос.
Открою тебе маленький секрет: код предназначен для того, чтобы его исполнял компьютер, а не человек.
И просить людей, чтобы они в голове твой код исполнили, нашли ошибку, и сказали тебе - неправильно.
Код должен сам тебе это сказать. В этом и заключается смысл отладки.

Но сначала надо развеять несколько заблуждений, которые тебе мешают заняться отладкой.

Программа делает простейшую операцию
Это неверное утверждение. Программа делает несколько простейших операций.
Причем конечный результат отличается от ожидаемого. Следовательно - код надо отлаживать.
Что тут отлаживать ?
Код. Вот этот, который на экране.
если вы поняли в чем моя нубская ошибка
Я даже не смотрел.
Мне почему-то кажется, что вопросы типа "я тут накатал код, не понимаю как он работает, найдите мне в нем ошибку" задавать не очень вежливо.
У нас тут у всех свои коды, все ищут свои ошибки.
Назови хоть одну причину по которой мы должны бросить свои и искать твою?
 

Nikky

Новичок
Я не говорю что вы мне должны или что то в подобном ключе. Ни в коем случае.

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

PS код да, тот который я написал в первом посте целиком такой и есть
 

WMix

герр M:)ller
Партнер клуба
Nikky, прекращай демагогию, поправь код, и задай конкретный вопрос.
PHP:
        {
        echo  'KEY:'.$key. '<br>';
        echo  'STR:'.$str. '<br>';
        if(preg_match("/$key/", $str))
            {
            //echo $str;
            echo 'match<br>';
            fwrite($handle, $str);
            }
            else echo 'not match<br>';
            echo '---------------------------<br>';
        }
зы: почему все новички выбирают имено BSDшный стиль написания кода?
 

Фанат

oncle terrible
Команда форума
Попробую объяснить последний раз

Программист и не должен "видеть ошибку". Он не компьютер!

"Видеть", "соображать", "замечать" - это все не для программистов, а для визажистов.
Если тебе так хочется видеть ошибки и не нравится отладка - иди в парикмахеры.

А программист должен отлаживать программу. Тем более, что дело может быть не в ней.

Но я так понимаю, что бесполезно. Куда проще написать на форум и потом долго объяснять людям, что именно они тебе должны, чем хоть палец о палец ударить, чтобы помочь себе самому
 

Фанат

oncle terrible
Команда форума
В общем, до меня дошло.
В последней строке у тебя нету перевода строки, а в остальных есть.

Но на будущее я тебе настоятельно рекомендую не пренебрегать отладкой.
 
  • Like
Реакции: WMix

Nikky

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

Nikky

Новичок
В общем, до меня дошло.
В последней строке у тебя нету перевода строки, а в остальных есть.

Но на будущее я тебе настоятельно рекомендую не пренебрегать отладкой.
Да в этом и была проблема, спасибо. Я не хочу принебрегать отладкой, просто казалось что все просто, и никак не мог сообразить в чем дело. Отладкой пока вообще не занимался, может посоветуете софт на котором новичку это будет попроще делать?
 

Фанат

oncle terrible
Команда форума
Не нужен тут никакой софт.
Достаточно добавить отладочную печать.
Можно поставить xdebug, если хочется с вытребеньками.
Ещё NetBeans и PHPStorm умеют, вроде, пошаговую.
Но лично мне обычно хватает отладочного ввода - прошерстить значения всех использующихся переменных.
 
Сверху