Форум программистов, компьютерный форум, киберфорум
PHP: RegExp
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/18: Рейтинг темы: голосов - 18, средняя оценка - 4.67
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 60
1

Чтение Из файла и поиск по строкам!

18.05.2012, 22:17. Показов 3445. Ответов 5
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
$lines=file('visits2.txt');
 
foreach($lines as $stroka)/*разделяем на строчки*/
{
    $counter=0;
    
    $arr=array("Trance","Imagine");
    
    $splitted=explode(' ',$stroka);
    foreach($splitted as $words)
    {
    
        foreach($arr as $input)
        {
            if(($input==$words) && ($words==current($splitted)))
            {
                $counter++;
                echo "$stroka<br>";
            
            }
        }
     
        //echo "$words<br>";
    
    
    
    }
    echo '<br>';
    
    
}
в текстовом файле visits2.txt содержится:
Music2 A State Of Trance 2009 01 Armin van Buuren Imagine
Music2 A State Of Trance 2009 02 Armin van Buuren with DJ Shah feat Chris Jones Going Wrong
Music2 Movin Melodies 17 atb the summer
Сейчас вообще ничего не выводит(
Нужно чтобы происходил поиск по строкам, и происходил вывод тех строк файла, в которых содержатся элементы массива $arr, если допустим ни одного слова из массива в строке нет, то строка не должна выводиться вообще, по идее там должно выводиться в релевантном порядке, но пока я этого не прошу, благодарю за помощь)нужно подправить этот код, туплю что-то...(
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
18.05.2012, 22:17
Ответы с готовыми решениями:

Запись и чтение данных из структурированного файла, поиск по строкам
Доброго времени суток Всем! Вот такая тема, допустим есть некий файл txt или другой какой то...

Чтение файла, как сделать прогон по всем строкам файла
Вот вообщем задание: Составить текстовый файл, состоящий из нескольких строк следующего...

Чтение файла по строкам
Имеется файл 1.txt, в котором нходятся варианты первого вопроса. Заранее не известно количество...

Чтение файла по строкам
Никак не могу понять как прочитать файл по строкам? Единственное что смог придумать это...

5
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
18.05.2012, 22:49 2
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
<?php
 
// строки из файла (неважно, как вы их получаете)
$lines = array(
    "Music2 A State Of Trance 2009 01 Armin van Buuren Imagine",
    "Music2 A State Of Trance 2009 02 Armin van Buuren with DJ Shah feat Chris Jones Going Wrong",
    "Music2 Movin Melodies 17 atb the summer"
);
 
// поисковые слова
$arr = array("Trance", "DJ");
 
// перебираем строки по одной
foreach ($lines as $line)
{
    // изначально релевантность строки - ноль
    $relevance = 0;
    
    // проверяем в строке наличие поисковых слов. на каждое найденное увеличиваем релевантность строки.
    foreach ($arr as $word)
        if (stripos($line, $word) !== false) $relevance++;
    
    // если релевантность не нулевая, записываем в результат поиска.
    if ($relevance) $results[] = compact('line', 'relevance');
}
 
// функция-компаратор для сортировки результатов по релевантности (по убыванию)
function sort_by_relevance($a, $b) { return $b['relevance'] - $a['relevance']; }
 
// собственно сама сортировка
usort($results, 'sort_by_relevance');
 
// вывод результатов
foreach ($results as $result)
    printf("%s (%d)<br />", $result['line'], $result['relevance']);
1
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 60
19.05.2012, 00:30  [ТС] 3
PHP
1
2
3
4
5
6
function sort_by_relevance($a, $b) {
 return $b['relevance'] - $a['relevance']; 
 }
 
// собственно сама сортировка
usort($results, 'sort_by_relevance');
Спасибо!!!я немного не понял эту функцию вместе с usort, что за переменные a и b и почему возвращаем
return $b['relevance'] - $a['relevance'];
0
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
19.05.2012, 11:28 4
Цитата Сообщение от Вячеслав74 Посмотреть сообщение
Спасибо!!!я немного не понял эту функцию вместе с usort, что за переменные a и b и почему возвращаем
return $b['relevance'] - $a['relevance'];
Кратко говоря, sort_by_relevance - это правило сравнения двух эелементов, а usort - это сортировка массива с использованием такого правила.

Если в деталях, то...

При обычной сортировке (с помощью функции sort) массив сортируется по значениям элементов. То есть, в процессе происходит куча сравнений разных пар элементов. Это нормально работает, если ваши значения числа или строки.

Но в нашем случае результаты поиска ($results) - это массив не простых элементов, а массив маленьких хэшей с двумя элементами (line и relevance). И простая функция сортировки не сможет сравнить хэши.

Для решения таких "нетривиальных" случаев и придумана функция usort, позволяющая указать, каким именно образом должны сравниваться два элемента ($a и $b). Способ сравнения пары элементов - это и есть функция-компаратор sort_by_relevance. А в usort передается только имя этого компаратора.

Функция-компаратор, получив пару элементов ($a и $b в нашем случае), должна вернуть:
- либо 0, если элементы равны,
- либо значение >0, если $a > $b,
- либо значение <0, если $a < $b.
Зная эти правила, можно отсортировать массивы даже очень сложных объектов.

В нашем случае мы должны были отсортировать набор маленьких хэшей по ключу relevance, но в убывающем порядке, чтобы результаты поиска с большей релевантностью оказались в начале.
0
1 / 1 / 0
Регистрация: 28.11.2010
Сообщений: 60
19.05.2012, 15:40  [ТС] 5
Посмотрел в интернете, там немного по-другому но тоже работает)Получается $а и $b
PHP
1
2
3
 function sort_by_relevance($a, $b) {
 return ($b['relevance'] < $a['relevance']) ? -1 : 1; 
 }
Мне тут непонятно почему возвращается -1 и 1..?вообще как логически сортировка проходит?как именно в этой функции определяется какое значение наверх идет а какое ниже?И почему-то если $a и $b местами переставить сортировка идет в обратном порядке...я понял как писать, но сам алгоритм не доходит...Аа вроде как получается если второй элемент больше первого мы переставляем их местами - то есть 1, а если нет то оставляем как есть т.е -1.Так что ли?)
0
886 / 681 / 101
Регистрация: 23.01.2009
Сообщений: 1,582
19.05.2012, 18:39 6
Цитата Сообщение от Вячеслав74 Посмотреть сообщение
но тоже работает)
Это практически то же самое, что и вычитание одного из другого.

Цитата Сообщение от Вячеслав74 Посмотреть сообщение
вообще как логически сортировка проходит?
Гуглите "алгоритмы сортировки".
0
19.05.2012, 18:39
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
19.05.2012, 18:39
Помогаю со студенческими работами здесь

Чтение по строкам из текстового файла
Как взять каждую строку из файла и присвоить каждой свою переменную? Содержание файла: intro 80...

Чтение переменных из файла по строкам
Всем привет. Помогите решить проблему. Дан файл вида: Pole1 Name1 Pole2 Name2 Pole3 Name3...

Чтение по строкам из файла txt
Здраствуйте народ есть вопросик непойму как сделать такую штуку есть тхт -файл можноли считать с...

Чтение файла по строкам в C++ Builder
Как в Label отобразить содержимое файла по строкам (или текст который выведен в ListBox также...

Чтение файла после создания по строкам
Крч.. возникла такая проблема..Создаётся профиль в файл profile.bd И потом продолжается работа...

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


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru