удаление в типиз. типах, по номеру записи |
1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!
удаление в типиз. типах, по номеру записи |
kr3v3tkus |
14.03.2006 23:51
Сообщение
#1
|
Пионер Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: 0 |
задача:
1 Открыть файл 2 Добавить запись 3 Изменить запись по номеру 4 Удалить запись по номеру 5 Распечатать построчно 6 Выйти Проблема с 4 пунктом. Препод сказал сделать так - узнать номер строки, создать новый файл и перенести туда все строки кроме этой, потом - переименовать новый файл в старый. Подскажите плз как сделать, а уж с 5 и 6( ) я сам разберусь program lol; -------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
volvo |
15.03.2006 0:07
Сообщение
#2
|
Гость |
Цитата Препод сказал сделать так - узнать номер строки, создать новый файл и перенести туда все строки кроме этой Бред... Нет в типизированном файле такого понятия, как строка, можешь своему преподу прямо так и сказать... Все, что могу предложить: const Учти, что после этого надо будет заново делать Assign для old_file, если захочешь с ним работать... |
kr3v3tkus |
15.03.2006 0:28
Сообщение
#3
|
Пионер Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: 0 |
2 volvo:
пардон, мой косяк спешил и описа'лся , я имелл ввиду конкретную запись а не строку только я не совсем понял в этом коде Цитата read(old_file, r); if { какое-то условие} then write(new_file, r); он копирует из старого файла запись в новый, и, если нам, например, нужно убрать 3ю запись, то мы в if пишем условие, чтоб 3я не копировалась? (пардон ещё раз, не оч с темой разобрался) -------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
volvo |
15.03.2006 0:33
Сообщение
#4
|
Гость |
Цитата он копирует из старого файла запись в новый, и, если нам, например, нужно убрать 3ю запись, то мы в if пишем условие, чтоб 3я не копировалась? Именно так и пишешь:if filepos(old_file) <> 3Третья запись (отсчет начинается с 1-цы) перенесена в новый файл не будет... |
kr3v3tkus |
15.03.2006 1:06
Сообщение
#5
|
Пионер Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: 0 |
Пасибоньки в который раз...
-------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
мисс_граффити |
15.03.2006 9:22
Сообщение
#6
|
просто человек Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
основа такая же, но маленькое дополнение внесу.
можно в саму запись добавить одно поле логического типа. везде написать true. и когда мы знаем, какие записи удалить - проставить в них false. это позволит за один проход удалять сколько угодно записей. -------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
klem4 |
15.03.2006 9:27
Сообщение
#7
|
Perl. Just code it! Группа: Модераторы Сообщений: 4 100 Пол: Мужской Реальное имя: Андрей Репутация: 44 |
И зачем хранить совершенно лишнюю и не нужную информацию ? Если может потребоваться за один раз удалить только одну запись ? (это достаточно четко понятно по заданию)
Единственное что могу предложить для удобства работы с базой (чтобы постоянно не обращаться к файлу) в начале работы сохранть записи в массиве и работать с ним до завершения программы, преде самым ее концом перезаписав элементы массива в файл. Сообщение отредактировано: klem4 - 15.03.2006 9:30 -------------------- perl -e 'print for (map{chr(hex)}("4861707079204E6577205965617221"=~/(.{2})/g)), "\n";'
|
volvo |
15.03.2006 11:12
Сообщение
#8
|
Гость |
можно в саму запись добавить одно поле логического типа. везде написать true. и когда мы знаем, какие записи удалить - проставить в них false. это позволит за один проход удалять сколько угодно записей. Логическая неувязочка... Если мы знаем, когда ставить True, а когда False, то что нам мешает подставить условие, это определяющее, в предложенный мной алгоритм? Функциональность - та же, лишние данные не используются и не хранятся в базе... |
мисс_граффити |
15.03.2006 11:14
Сообщение
#9
|
просто человек Группа: Модераторы Сообщений: 3 641 Пол: Женский Реальное имя: Юлия Репутация: 55 |
всегда надо удалять только одну запись?
-------------------- Все содержимое данного сообщения (кроме цитат) является моим личным скромным мнением и на статус истины в высшей инстанции не претендует.
На вопросы по программированию, физике, математике и т.д. в аське и личке не отвечаю. Даже "один-единственный раз" в виде исключения! |
volvo |
15.03.2006 11:18
Сообщение
#10
|
Гость |
мисс_граффити, давай ты будешь ВНИМАТЕЛЬНО читать то, что здесь пишут? КАКАЯ разница, объясни мне, ламеру, будешь ты хранить поле, которое может содержать True/False или напишешь функцию, которая будет сразу определять, удалять запись или нет? ОТКУДА True/False браться -то будет ??? С неба? С потолка? Его же найти еще надо !!!
И какая разница, сколько записей удалять? |
kr3v3tkus |
15.03.2006 12:16
Сообщение
#11
|
Пионер Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: 0 |
я конечно извиняюс за свою тупость, но никак не могу исправить ошибку. volvo вот вы писали дат файлы в константах, тогда их можно в варе не использовать? вобщем я описал вот так
Код type Pprice=record Pname:string[20]; Pvalue:real; end; var price:file of Pprice; newprice:file of Pprice; p:pprice; и естественно ничего не пашет : Код begin {' otkritie '} assign(newprice,'C:\newprice.dat'); rewrite(newprice); assign(price,'C:\price.dat'); write('noviy file - 0, redakt - 1 '); readln(i); if i=0 then rewrite(price) else reset(price); end; ... begin {' ydalenie '} write('ydaliaem 3apis? da - 1, net - 0 '); readln(n); if n=1 then begin metka3: write('vvedite nomer stroki dlia ydaleniya '); readln(i); while not eof(price) do begin read(price,p); if filepos(price)<>i then write(newprice,p); end; close(newprice); close(price); erase(price); rename(newprice,price); assign(price,'C:\price.dat'); reset(price); write('eshe ydaliaem? da - 1, net - 0 '); readln(n); if n=1 then goto metka3; end; end; ошибку пишет вот тут - rename(newprice,price) 67ю -------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
volvo |
15.03.2006 12:24
Сообщение
#12
|
Гость |
Я не говорил тебе переименовывать так:
varЭто не будет работать... Читай внимательно: Цитата const old_name = 'old.dat'; { Это - СТРОКА, имя файла, а не файл !!! } new_name = 'new.dat'; ... rename(new_file, old_name); |
kr3v3tkus |
15.03.2006 12:59
Сообщение
#13
|
Пионер Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: 0 |
вроде понял, это просто строка, в которую мы переименовываем, но всё равно теперь при ренейме пишет, что доступ к файлу запрещён
чегото я запутался Прикрепленные файлы PRICE.PAS ( 2.14 килобайт ) Кол-во скачиваний: 181 -------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
volvo |
15.03.2006 13:32
Сообщение
#14
|
Гость |
Не знаю, что у тебя происходит: только что прогнал программу, все нормально удаляется... Ты этот файл, newprice.dat, случайно, не пытался просмотреть как-нибудь? Может, он где-то открыт у тебя, кроме твоей программы? Потому, что ЭТА ошибка - никак с твоей программой не связана. Это ошибка ОС "Нет доступа".
Попробуй удалить этот файл НЕ через программу. Интересно, получится ли? |
kr3v3tkus |
15.03.2006 15:28
Сообщение
#15
|
Пионер Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: 0 |
офигеть, а у меня не прёт
системой файл не занят, я нигде не открывал его, удаляться - нормально удаляется. Вот типу дал задачку эту надо у него спросить оффтоп: и ваще енто рок наверна, ща вот в инст приехал, а там с уроков отпросились. А инст на другом краю города, дожд идёт . Это походу вселенская чернота какая то -------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
kr3v3tkus |
16.03.2006 19:47
Сообщение
#16
|
Пионер Группа: Пользователи Сообщений: 111 Пол: Мужской Реальное имя: Рома Репутация: 0 |
Блин, вобщем сдал я прорамку эту(тока 2 чела удаление наметали(включая меня ), и то так не у кого и не заработало, поэтому препод сказал без удаления мутить), а она и там не работает, вернее работает и даже удаляет 1 раз, но во второй упрямицца и не хочет вобщем препод сказал типа в отладке надо смотреть, потому что файл занят после 1го удаления, а я не умею .Впринципе то это уже необязательно, но разобраться хочецца, может кто подскажет в чём дело?
Прикрепленные файлы PRICE.PAS ( 2.76 килобайт ) Кол-во скачиваний: 176 -------------------- Цитата . . \__/ (**) (>:=:=:~~ ^ ^ ^ ^ Креветка присваивания :DDD |
vladivarov |
9.10.2012 20:37
Сообщение
#17
|
Гость |
Да мне кажется, что любой ответ будет являться субъективным. Сколько людей - столько мнений.
На вкус и цвет ... |
Текстовая версия | 26.09.2024 16:55 |