Как вывести топ ячеек из файла

Печать RSS
296

Автор
Голубые штаны
0
Есть файл, назовем его "myfile.dat"
Файл содержит множество строк, каждая из которых состоит из 10 ячеек. Пятая ячейка содержит баллы (вроде рейтинга).
Как в файле отсортировать строки по пятой ячейке (чем больше в ней число, тем выше строка, и исключить из рейтинга ячейки с отрицательным значением и "0"). Я так понимаю, что файл нужно перезаписывать... Чет не получается... lamer
Изменил: Дмитрий (11.01.2010 / 07:20)

2000 лет д.н.э.
0
Если заранее известно что нужна сложная сортировка то используй мускул, или хотя бы структуру файла составляй так что бы было удобно это делать.
Тебе надо создать массив с ключами из этой 5 ячейки и отсортировать по ключу его.
А

Оранжевые штаны
0
Добрый вечер.
Давненько здесь небыл smile
Собственно по теме скажу, что такая система работы с удаленными данными, если я не ошибаюсь, когда то получила название - база данных с удаленными файлами. Немного о ней, а после вернусь к теме.
ФБД(файловая база данных без СУБД)
Принцип работы у таких баз данных схож с обработкой файлов на таких языках программирования как С/С+ и Pascal и состоит из нескольких шагов:
1. Чтение файла в ОП (оперативная память)
2. Обработка данных в ОП
3. Перезапись данных в файл
А

Оранжевые штаны
0
Чтение файла в ОП
Есть получение строк файла в массив строк ОП. До появления РБД (реляционных баз данных) чтение проходило в одномерный массив строк. После появления систем разграничения сущностей и атрибутов чтение стало проходить в матрицу строк следующего вида:
Файл->Строка->Данные между разделителями>>array[i][j]
где i - номер сущности
j - номер атрибута
Таким образом любой файл с подходящей структурой может быть представлен в памяти в виде реляционной базы данных
А

Оранжевые штаны
0
Обработка данных в ОП
Представляет собой обработку с помощью стандартных методов работы с многомерными массивами данных и строками.
А

Оранжевые штаны
0
Перезапись данных в файл
Наиболее ответственный момент. До этого момента данные, что называется, кэшируются, то есть обрабатываются в ОП и любые действия могут быть исправлены без обращения к файлу данных. Такой подход поддерживает транзагниттивность обращения к файлу данных. После отправки данных на запись, файл данных очищается и заполняется измененным содержанием по особой схеме представленной ниже:
array[i][j++]>>Файл>>Разделитель атрибута
array[i++][j]>>Файл>>Разделитель сущности
О

Землянин
0
Только эти стандартные методы очень ресурсоемки для работы с многопользовательскими запросами.
А

Оранжевые штаны
0
Теперь по вопросу темы
Во первых, автор, структурируй все свой файлы данных чтобы они имели разделители атрибутов, на пример по следующиму принципу
атрибут 1|атрибут 2|атрибут 3
атрибут 1|атрибут 2|атрибут 3
. . .
атрибут 1|атрибут 2|атрибут 3
здесь символ | будет разделять атрибуты, а перенос строки разделять сущности.
После чего учитывай весь файл в массив, в PHP это не составит проблем и разделяй каждую строку по символу разделителя атрибута, то есть |. Получим матрицу данных. Затем циклически или с помощью функций проходим по всем сущностям и меняем их местами если значение определенного атрибута меньше или больше следующего, а атрибуты с отрицательным значением удаляем полность. После чего записываем полученное в файл.
А

Оранжевые штаны
0
Алиган, согласен, предпочел бы мускул, но раз автор просит, пишу ему более сложный метод smile
О

Землянин
0
я про него кстати ничего не слышал. Ты случаем не dbf - формат имеешь ввиду?
Стикеры / Теги / Правила / Топ тем / Топ постов / Поиск