|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
02.04.2014, 12:41 | #1 |
Пользователь
Регистрация: 02.04.2014
Сообщений: 12
|
замена данных в базе, типизированный файл
Есть база в типизированном файле.
Выполняю замену данных в одной из строк.. вроде код написан, но в базе изменений не происходит, выводит изначальный вариант. Код:
___________ Код нужно оформлять по правилам: тегом [CODE]..[/СODE] (кнопочка на панели форматирования с решёточкой #) Не забывайте об этом! Модератор. Последний раз редактировалось Serge_Bliznykov; 02.04.2014 в 13:05. |
02.04.2014, 13:08 | #2 |
Участник клуба
Регистрация: 05.11.2013
Сообщений: 1,601
|
Вы изменения делаете для элемента массива, а не для записи.
И пишете в файл исходную запись. Если вам нужно редактировать конкретную запись в файле, необязательно читать весь файл. И не нужно читать его в массив. Код:
Последний раз редактировалось ZX Spectrum-128; 02.04.2014 в 13:11. |
02.04.2014, 13:11 | #3 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
ну, как минимум, перед поиском записей стоит установить указатель на начало файла. Это можно сделать процедурой Reset(f) или Seek(f,0):
Код:
Код:
p.s. ну и учтите, что чтение в массив можно упростить... |
02.04.2014, 13:25 | #4 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
увидел, что в программе присутствует ещё несколько косячков..
позволил себе переписать код без массива... Код:
p.s. если нужно с массивом, скажите, перепишу ваш код с использованием массива... |
02.04.2014, 13:48 | #5 |
Пользователь
Регистрация: 02.04.2014
Сообщений: 12
|
Спасибо. Здесь действительно можно без массива.
Есть еще такой вопрос. По этой же базе данных нужно подсчитать оборот по каждому продавцу. Продавцы в базе повторяются и оборот считается столько раз, сколько встречается фамилия, то есть по каждой строке. Как поставить условие, чтобы итоговый оборот по каждой фамилии был посчитан только один раз? Код:
|
02.04.2014, 14:08 | #6 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
считайте данные в массив, отсортируйте массив по продавцу (это обеспечит, что одинаковые продавцы будут идти в массиве ПОДРЯД).
Потом просто: берём первого продавца (max[1].prodavec и идём по массиву, пока mas[i] равно взятому продавцу, всё встреченные обороты суммируем. Как только продавец сменился - выдаём результат по запомненному продавцу, запоминаем нового, сбрасываем обороты (начинаем считать заново, с mas[i].oborot и так до конца массива. всё! p.s. Вы так и не исправили грубую ошибку чтения записей из файла в массив. Записей в файле может быть совсем не 10, поэтому нужно подсчитывать фактическое N, сколько записей реально прочитали в массив! |
02.04.2014, 14:35 | #7 |
Пользователь
Регистрация: 02.04.2014
Сообщений: 12
|
Да, массив понятно что mas:array[1..n] of zap;
Добавил сортировку по алфавиту, изменил условие вывода данных, теперь выдает ошибку "индекс вне границ массива" Код:
|
02.04.2014, 14:47 | #8 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
не так.
а вот так: Код:
Последний раз редактировалось Serge_Bliznykov; 02.04.2014 в 15:48. |
02.04.2014, 15:37 | #9 |
Пользователь
Регистрация: 02.04.2014
Сообщений: 12
|
Отлично! С маленькой поправкой все работает как надо.
Там только где t:=mas[1].prodavec; a:= mas[i].oborot; надо оборот тоже писать 1 вместо i. Благодарю |
02.04.2014, 15:48 | #10 |
Старожил
Регистрация: 09.01.2008
Сообщений: 26,229
|
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Имеется типизированный файл с тридцатью числами. Записать в другой файл числа имеющегося файла в обратном порядке. | Валентин77 | Общие вопросы C/C++ | 8 | 17.12.2013 22:53 |
Тип данных запись, необходимо создать типизированный файл записей | sifa | Помощь студентам | 1 | 29.11.2011 21:56 |
Типизированный файл с натуральными числами. Числа, встречающиеся 1 раз переписать в другой файл [Паскаль] | mifomen | Помощь студентам | 7 | 16.12.2010 22:00 |