Список форумов Шадринский форум -> Программирование -> PHP, PERL, HTML, CSS etc -> Обработка текстового файла
Начать новую тему   Ответить на тему   вывод темы на печать

Обработка текстового файла

Автор
Сообщение
Xak
Запомнил кнопки...


Пол: Пол:Муж.
Зарегистрирован: 26.11.2004
Сообщения: 218
Откуда: Тюмень

Статус: Offline
СообщениеДобавлено: 2006.07.26 18:23.44
Ответить с цитатой
Есть такая проблема: Имеется текстовый файл с тысячами строк. Задача найти в нем и вывести 5 самых часто встречающихся строк. Скорость обработки должна быть наибольшей, а затрата ресурсов меньше (скажем на примере пхп).

Какие предложения будут ?
_________________
ТюмГНГУ
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
char
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1304


Статус: Offline
СообщениеДобавлено: 2006.07.26 18:50.38
Ответить с цитатой
начни c длин строк Smile
Посмотреть профиль Отправить личное сообщение
Xak
Запомнил кнопки...


Пол: Пол:Муж.
Зарегистрирован: 26.11.2004
Сообщения: 218
Откуда: Тюмень

Статус: Offline
СообщениеДобавлено: 2006.07.26 19:51.38
Ответить с цитатой
char писал(а):
начни c длин строк Smile

а причем тут длина строк и как их учитывать ?
_________________
ТюмГНГУ
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
char
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1304


Статус: Offline
СообщениеДобавлено: 2006.07.26 20:59.11
Ответить с цитатой
думай.
Посмотреть профиль Отправить личное сообщение
Xak
Запомнил кнопки...


Пол: Пол:Муж.
Зарегистрирован: 26.11.2004
Сообщения: 218
Откуда: Тюмень

Статус: Offline
СообщениеДобавлено: 2006.07.27 21:41.01
Ответить с цитатой
Длина строк одинакова, просто сами строки различны
_________________
ТюмГНГУ
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
strannik
Писатель


Пол: Пол:Муж.
Зарегистрирован: 19.04.2006
Сообщения: 411


Статус: Offline
СообщениеДобавлено: 2006.07.27 22:06.25
Ответить с цитатой
Xak, я не пойму, тебе это самому надо? или ты эту задачку от анютки притащил и хочешь узнать интелект форумчан?
Посмотреть профиль Отправить личное сообщение
char
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1304


Статус: Offline
СообщениеДобавлено: 2006.07.27 22:07.40
Ответить с цитатой
сделать выборку части файла, посмотреть в каких позициях символы чаще всего не повторяются, использовать в дальнейших проверках на совпадение строк по всему файлу...
(это если стандартное сравнение строк в языке работает медленнее, чем сравнение нескольких символов в строках)
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2006.07.27 22:10.39
Ответить с цитатой
а тут или скорость наибольшая или ресурсы наименьшие. всё остальное лишь комбинации
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Leon
Бот-тролль 85 лв


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 61661


Статус: Offline
СообщениеДобавлено: 2006.07.27 23:15.56
Ответить с цитатой
Xak

Тыб уж конкурс устраивал, что ли. И не парил занятым людям мозги Podmigivanie
_________________
Скажи мне чей Крым, и я скажу кто ты.
Посмотреть профиль Отправить личное сообщение
moishe
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1668


Статус: Offline
СообщениеДобавлено: 2006.07.28 06:38.00
Ответить с цитатой
Xak писал(а):
Имеется текстовый файл
Xak писал(а):
Длина строк одинакова
Странный какой-то "текстовый файл". Но одинаковость длины несколько упрощает задачу.
Вопросы:
1. Насколько длинные там строки?
2. Влезет ли файл целиком в память?
3. Какие строки мы считаем одинаковыми?
3.1. Имеет ли значение регистр символов? Если нет, то какая кодовая страница используется?
3.2. Имеют ли значение ведущие и концевые пробелы? А количество пробелов между словами?
3.3. Нужно ли различать символы с разными кодами, но выглядящие одинаково?
4. Осмысленные ли это строки на некотором языке, или произвольная абракадабра?
5. Сколько байт приходится на символ?
6. Сколько памяти можно использовать?
7. Можем ли мы создавать файлы, если вдруг понадобится?
8. Зачем вообще нужно решать эту задачу?
9. И почему вдруг на php?

Я спрашиваю не просто ради того, чтобы пофлудить. Я уже решал подобную задачу. Если решение твоей задачи для тебя имеет практический смысл - помогу. У меня были строки разной длины, вообще говоря, произвольной, пустые строки не считались, регистр значения не имел, одинаково выглядящие символы считались одинаковыми, пробелы в начале и в конце не считались, подряд идущие пробелы считались одним, строки были осмысленные - смесь кириллицы и латиницы в cp866 или ср1251, на выбор, но не то и другое в одном файле, файл в память не помещался, его хеш-масиив тоже; задача была - быстро выяснить, есть ли данная строка в файле, плюс к тому поддерживалась возможность динамической модификации файла - добавить-удалить-изменить строку. Решалась построением хеш-массива и запихиванием его в специальный "индексный" файл с блочной структурой. Думаю, мог бы и "рейтинг популярности" посчитать - хеш-массив по сути упорядоченный, один раз его пробегаем и расставляем встречаемость, потом сортируем и получаем результат. У тебя строки одной длины - это упрощает построение хеша и навигацию, а может хеш и вовсе не нужен, непонятно, надо конкретнее задачу изложить.
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Xak
Запомнил кнопки...


Пол: Пол:Муж.
Зарегистрирован: 26.11.2004
Сообщения: 218
Откуда: Тюмень

Статус: Offline
СообщениеДобавлено: 2006.07.28 19:38.05
Ответить с цитатой
Я не буду конкурс устраивать.

Пускай в компе ооочень много памяти. Пусть тогда время не имеет значения, мне просто интересен сам принцип обработки файла. Я думаю считать все строки в массив и сравнивать каждую с каждой и при совпадении двух строк еще раз сравнивать с остальными не выход. Так вот как быть то ? Razz Smile
_________________
ТюмГНГУ
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
char
Заслуженный писатель


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 1304


Статус: Offline
СообщениеДобавлено: 2006.07.28 21:50.50
Ответить с цитатой
да вариантов масса... можешь создать кучу файлов по числу букв и считывая строчки из твоего файла тут же в новые файлы сортировать...
можешь еще например создать массив контрольных сумм всех строчек - быстрее сравнение/отбрасывание потом пойдет...
в общем, - думай, пробуй Smile
Посмотреть профиль Отправить личное сообщение
andy ice
Militärmagazinkatze


Пол: Пол:Муж.
Зарегистрирован: 25.11.2004
Сообщения: 23385


Статус: Offline
СообщениеДобавлено: 2006.07.28 22:55.50
Ответить с цитатой
ну если памяти вагон, то примерно таг
$ч = аррай();
вхиле($а=фреад(филе)) $ч[$a] ++

потом аррай_сорт и выбираем первых 5 строг.
_________________
Ин дер гросен фамилие нихт клювен клац-клац Neutral
Посмотреть профиль Отправить личное сообщение Отправить e-mail ICQ Number
Xak
Запомнил кнопки...


Пол: Пол:Муж.
Зарегистрирован: 26.11.2004
Сообщения: 218
Откуда: Тюмень

Статус: Offline
СообщениеДобавлено: 2006.07.29 12:00.11
Ответить с цитатой
andy ice писал(а):
ну если памяти вагон, то примерно таг
$ч = аррай();
вхиле($а=фреад(филе)) $ч[$a] ++

потом аррай_сорт и выбираем первых 5 строг.

ОК. Ето моно поробовать Podmigivanie
_________________
ТюмГНГУ
Посмотреть профиль Отправить личное сообщение Посетить сайт автора ICQ Number
Страница 1 из 1
Начать новую тему   Ответить на тему   вывод темы на печать
Показать сообщения:   
Список форумов Шадринский форум -> Программирование -> PHP, PERL, HTML, CSS etc -> Обработка текстового файла

 
Перейти: 
Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете голосовать в опросах
Вы не можете вкладывать файлы
Вы можете скачивать файлы
Рейтинг UralWeb