Войти

Показать полную графическую версию : [решено] PHP, определение слова в строке


foma24
30-05-2012, 12:29
Подскажите пожалуйста, есть файл в котором внутри написано в 2 строки:

<?xml version="1.0" encoding="windows-1251"?>
<PacketEPD xmlns="urn:cbr-ru:ed:v2.0"

И есть написанная на php функция, которая определяет нахождение в этом файле наличие слова PacketEPD

private function isPacket($filename)
{
try
{
$f=fopen($filename,"r");
fgets($f);
$STR=trim(fgets($f));
if (substr($STR,0,10)=="<PacketEPD")
{
return true;
}
else
{
return false;
};
fclose($f);
}
}

Если в том же файле написано все в одну строку, т.е.

<?xml version="1.0" encoding="windows-1251"?><PacketEPD xmlns="urn:cbr-u:ed:v2.0"

функция не работает, подскажите, как можно данную функцию поправить для случая с одной строкой ?

Tonny_Bennet
30-05-2012, 14:19
Намёк первый (http://www.php.su/functions/?substr)


string substr ( string string, int start [, int length] )

substr() возвращает подстроку строки string длиной length, начинающегося с start символа по счету.




Намёк второй (http://www.php.su/functions/?strpos)


int strpos ( string haystack, string needle [, int offset] )

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

Если подстрока needle не найдена, strpos() возвращает FALSE.

foma24
30-05-2012, 14:46
Т.е. если исходить из намека 1, для 1 строки должно быть:

if (substr($STR,45,55)=="<PacketEPD") или if (substr($STR,45,10)=="<PacketEPD") ?

Tonny_Bennet
30-05-2012, 15:35
Т.е. если исходить из намека 1, для 1 строки должно быть:
if (substr($STR,45,55)=="<PacketEPD") или if (substr($STR,45,10)=="<PacketEPD") ? »

Второй вариант в принципе верен. но в нём нет универсальности. Т.е. он сможет найти в данном примере нужное слово, но если встретится лишняя позиция или недостающая позиция то работать код перестанет.

Если вы воспользуетесь "вторым намёком" будет всё проще. Аргументами этой функции являются две строки: первая где вы ищите, вторая что вы ищите. И результатом становится номер символа первого вхождения найденной строки или False, если строка не найдена.




© OSzone.net 2001-2012