Консультация № 179225
25.06.2010, 13:32
43.11 руб.
0 5 3
Здравствуйте, уважаемые эксперты!

Необходимо создать такую функцию.
Имеется текстовый файл, в нем содержатся ключевые слова на определенную букву, например:
Стекло
Сарафан
Сыр
Стол
Стул

Необходимо прочитать этот файл, найти строки, в которых ключевое слово начинается с определенных букв, например с “ст”, и вернуть НОМЕРА этих строк.
В приведенном выше примере функция должна вернуть 0,3,4 (первая строка считается нулевой).

Буду очень благодарен за помощь.

Обсуждение

Неизвестный
25.06.2010, 14:18
общий
это ответ
Здравствуйте, Finrod.

Вот моё решение!

Приложение:
<?php
function get_match($key_file, $fragment) {
$keys = file($key_file);
$tmp = NULL;
foreach ($keys as $key=>$value) {
if (preg_match("/^".$fragment."+/", $value))
$tmp[] = $key;
}
return $tmp;
}

$key_file = "keys.txt";
$fragment = "Ст";

$arr = get_match($key_file, $fragment);

foreach($arr as $value)
echo "$value
";
?>
5
Оперативно и качественно!
Неизвестный
25.06.2010, 15:34
общий
это ответ
Здравствуйте, Finrod

вариант функции в стиле C

Приложение:
<?php

function get_str_nums($file_name, $fragment)
{
//open file for reading only; place the file pointer at the beginning of the file
$file_handle = fopen($file_name, "r");

//error if can't open file
if ( $file_handle == false )
exit("unable to open file $file_name :(");

//$i value at first iteration must be 0
$i = -1;

//while not end of file
while ( !feof($file_handle) )
{
$i++;

//read next string from file
$str = fgets($file_handle, 1024);

//if $fragment position into $str is identical to 0
//it is equal to 0 and they are of the same integer type
if ( strpos($str, $fragment) === 0 )
{
//add current string number to the result array
$result[] = $i;
}
}

//close file
fclose($file_handle);

return $result;
}

//---------------------------------------

$arr = get_str_nums("179225.txt", "Ст");

//print all elements of $arr
foreach ( $arr as $num )
{
echo $num."
";
}

?>
5
Неизвестный
25.06.2010, 16:49
общий
Вариант, предложенный в ответе № 262276 более простой, второй вариант требует небольшой доработки, например $str = fgets($file_handle, 1024); - существует множество таких файлов (я об этом правда не писал), и четко забивать число байт - не совсем удачное решение
Неизвестный
25.06.2010, 17:10
общий
Finrod:
дада
нужно более подробно рассмотреть ситуацию
считывать файлы целиком в одну строку тоже не панацея
у разных вариантов есть свои преимущества и недостатки
Неизвестный
25.06.2010, 23:47
общий
это ответ
Здравствуйте, Finrod.
Будем рассчитывать что кодировка нашего файла будет utf8.

Функция принимает два аргумента, первый это имя файла (реально существующий простой текстовый файл с ключевыми словами), второй это определённые буквы.
Получаем содержимое файла в виде массива. Определяем длину слова из определённых букв. И начинаем их искать среди массива ключевых слов, предварительно приводя их в нужный регистр. Функция возвращает массив номеров ключевых слов.

Приложение:
function getNumberOfString($sFileName, $sBegin) {

$result = array();
$aString = file($sFileName);

$length = mb_strlen($sBegin);
$sBegin = mb_strtolower($sBegin,'utf8');

foreach ($aString as $key => $val) {

$sub = mb_substr($val, 0, $length);
$sub = mb_strtolower($sub,'utf8');


if ($sub == $sBegin) {
$result[]= $key;
}
}
return $result;
}
5
Форма ответа