Вопрос № 38352: Здравствуйте у меня проблема следующего характера есть база(файл)в нем есть поля: фамилия, код_должности, подразделение. Не могу данные для каждого подразделения вывести. Пример: запись в файле Иванов 101 5555. Сидоров 102 5560. Петров 505 5555
В...
Вопрос № 38.352
Здравствуйте у меня проблема следующего характера есть база(файл)в нем есть поля: фамилия, код_должности, подразделение. Не могу данные для каждого подразделения вывести. Пример: запись в файле Иванов 101 5555. Сидоров 102 5560. Петров 505 5555
Вывод должен быть такой
Подразделение 5555
Фамилия код должности
Иванов 101
Петров 505
.Подразделение 5560 Сидоров 102
Отвечает: Malysh
Здравствуйте, Сергей Игоревич!
Я так понял файл обычный текстовый (жалко что не на РНР там можно строку на массив раскинуть)
У меня есть несколько вариантов решения данной задачи:
1) для каждого поля ввести определенное кольчество символов - например фамилия-16, код_должности-8, подразделение-8 (не обязательно так, это для примера). Считываешь с файла строку а потом разбиваешь на три строки следующим образом:
где S - строка считанная из файла, а S1,S2,S3 - искомые строки.
2) используй разделители например ',', или какой нибудь другой, между полями.
Я бы выбрал первый способ. Вернее я так когда-то делал. Писал пару лет назад записную книгу. Не знал как пользоваться базой. Да и сейчас иногда удобно базу делать в файле для РНР.
Ответ отправил: Malysh (статус: Практикант)
Ответ отправлен: 24.03.2006, 00:05
Отвечает: Полховский Александр Владимирович
Здравствуйте, Сергей Игоревич!
Значит так. Идея такова:
Читаем запись (то есть до точки от текущего положения).
Если отделение прочитаной записи не присутствует в списке уже выведенных отделений, то прочёсываем все последующие записи до конца файла. При этом надо не забыть сохранить позицию, с которой началось прочёсывание, и вывести информацию об номере отдела.
При прочёсывании сравниваем отдел очередной записи с тем, записи которых мы ищем. Если отдел совпадает, то выводим информацию. Если нет - ничего не делаем.
В конце прочёсывания заносим текущий отдел в список выведенных и возвращаемся на позицию, с которой начали прочёсывать.
Повторяем всё с начала, если ещё не конец файла.
Код в приложении.
Замечание:
Чтобы не делать лишних условий и действий, файл должен содержать одинаково отформатированные записи. А у Вас первая запись не начинается с пробела, как все остальные, а последняя не заканчивается точкой. как все остальные. Поэтому добавьте пробел в начале и точку в конце. либо доработайте код парой строк, чтобы игнорировать данный изъян.