|
заставил Бендера
|
|
Удаление строки из файла через сдвиги.06.06.2011, 17:47. Показов 3821. Ответов 24
Метки нет (Все метки)
Добрый день. Прощу помочь с защитой лабы.
Есть файл тхт, в нем названия банков и значения по годам: Банк 2000г 2001г ВТБ; 35.4; 31.5 ..................... Банк Москвы; 0; 4.2 Что нужно: Нам нужно удалить банки с значением 0 в один из годов. Решать эту задачу мы должны через сдвиги, так же мы не должны использовать буферные файлы или отдельные массивы строк. Прикрепляю файл и ссылку на тему в которой решали саму лабу.
0
|
|
| 06.06.2011, 17:47 | |
|
Ответы с готовыми решениями:
24
Удаление строки из txt файла, через какое-то время Удаление строки из файла\либо удаление самого файла.
|
|
заставил Бендера
|
|
| 07.06.2011, 02:16 [ТС] | |
|
upd...
0
|
|
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
||
| 07.06.2011, 08:59 | ||
1. Обычно удаление из файла делается так: открывается исходный для чтения, новый для записи. Пока исходный не кончился, читаем записи исходного, пишем в новый только те, которые удовлетворяют условию. В нашем случае это не равно 0. Таким образом, ненужные записи просто пропускаются. 2. Если файл двоичный и размер записи известен и постоянен, то можно выполнять перезапись по месту, используя функцию вроде seek() - передвижение по записям. Но в вашем случае файл-то текстовый! И размер строк в этом файле - разный!
0
|
||
|
заставил Бендера
|
|
| 07.06.2011, 10:26 [ТС] | |
|
ValeryLaptev, да, файл текстовый, и просили выполнить без 1 пункта.
0
|
|
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
||
| 07.06.2011, 10:39 | ||
|
0x0A0D или 0x0D0A - не помню в каком порядке.
0
|
||
|
заставил Бендера
|
|
| 07.06.2011, 11:06 [ТС] | |
|
ValeryLaptev, без гемора никуда. нельзя через темповский файл, нельзя массивы строк..
не могли бы подсказать что нибудь про побайтное чтение двоичного файла?
0
|
|
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
| 07.06.2011, 11:15 | |
|
В С++ это метод read() для объекта типа fstream.
А вообще-то в моей книжке 14 глава: Библиотека ввода-вывода. Не по теме: Сейчас некогда - надо уходить. Вернусь - выдам инфу.
1
|
|
|
заставил Бендера
|
|
| 07.06.2011, 11:19 [ТС] | |
|
ValeryLaptev, я в книжке гляну. спс
Добавлено через 2 минуты Ой.. у меня наверно не так книжка, эта - Экспрес курс С++
0
|
|
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
||
| 07.06.2011, 14:35 | ||
|
0
|
||
|
заставил Бендера
|
|
| 07.06.2011, 19:26 [ТС] | |
|
ValeryLaptev, да... разбиратся много.. вообщем то мою задачу можно свести к тому, что бы считать файл по байтно и если найден код нуля - то ..., что сделать тогда? как затереть..
0
|
|
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
| 07.06.2011, 21:26 | |
|
Не так просто.
1. Надо при чтении проверять байты 0d0a - это конец строки. И запоминать первую позицию после нее. 2. Потом читать байты до следующей 0d0a. Проверка на код нуля тебе не поможет, так как у тебя может быть число, например, такое - 100.05. Тут аж три нуля. Мне в голову пришла мысль, что можно попробовать открыть два потока, связав их в одним файлом.. Один поток - текстовый, а второй - бинарный. Текстовый поток - чтобы вводить нормально данные и проверять на ноль. А бинарный - чтобы перемещаться по байтам этого файла. Перемещение делается функциями seekg() - для чтения, и seekp() - для записи. Все надо пробовать.
0
|
|
|
заставил Бендера
|
|
| 07.06.2011, 22:55 [ТС] | |
|
ValeryLaptev, идея понравилась, но с seek ни чего не делал раньше, да и с бинарными файлами тоже.. поможете?
0
|
|
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
| 07.06.2011, 23:21 | ||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
Вот инфа.
Произвольный доступ Как уже отмечалось, С++ позволяет выполнять позиционирование в любых потоках, кроме стандартных. Методы позиционирования приведены в табл. 14.5. Методы позиционирования различаются для входных и выходных потоков: для входных потоков (см. п.п. 27.6.1.3 в [1]) имена методов заканчиваются символом «g» (от слова get), для выходных (см. п.п. 27.6.2.4 в [1]) — символом «p» (от слова put). Таблица 14.5. Методы позиционирования Метод Описание
Методы установки относительной позиции очень похожи на функцию fseek() из библиотеки <cstdio>. В классе ios_base определены следующие константы (см. п.п. 27.4.2.1.5 в [1]):
C помощью методов позиционирования можно вычислить размер файла (листинг 14.23).
Методы позиционирования облегчают обработку двоичных файлов, записанных любыми другими средствами, например, средствами языка Pascal. В С++, в отличие от языка программирования Pascal, отсутствуют типизированные файлы с записями (file of type). В языке Pascal такие файлы являются двоичными. Записи нумеруются, начиная с нуля, что обеспечивает прямой доступ к записи. Такие файлы в программе на языке Pascal по умолчанию открываются в режиме чтения/записи. Мы вполне можем обработать такие файлы и обеспечить прямой доступ к записям по номерам средствами С++. Для этого нужно объявить в программе структуру, имеющую поля соответствующих типов, заданные в том же порядке, что в записи в программе на Pascale. Здесь нужно внимательно отнестись к проблеме выравнивания — структура в С++ должна иметь точно такой же размер, как и запись в Pascal. Далее нужно открыть файл как двоичный в режиме чтения/записи. Чтение из файла выполняется оператором
Методы относительного позиционирования позволяют реализовать прямой доступ к записям этого двоичного файла. Например, позиционирование на k-ю запись для чтения выполняется оператором
1
|
||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
заставил Бендера
|
|||
| 09.06.2011, 10:57 [ТС] | |||
|
Все равно слабо представляю как это программно реализовать, мало с этим что то делал.
0
|
|||
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|||||||||||
| 09.06.2011, 11:40 | |||||||||||
Но гемора тут все равно - много. Пробовать надо, фактически исследовательскую работу профодить, как будет вести себя файл и файловая система при таких наших действиях. Из текстового файла вводить аналогично cin:
0
|
|||||||||||
|
заставил Бендера
|
|
| 09.06.2011, 13:34 [ТС] | |
|
ValeryLaptev, вот так защита лабораторной)
0
|
|
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
||
| 09.06.2011, 13:38 | ||
![]() 1. Либо вы не совсем поняли препода в каких-то мелочах. Потому как перезапись ТРАДИЦИОННО исполняется только для двоичных файлов. Но никак не текстовых. 2. Либо препод совершенно не имеет реального опыта программирования. Отсюда и завихрительные требования. Ни один реальный программер не будет перезаписывать текстовый файл по месту.
0
|
||
|
заставил Бендера
|
|
| 09.06.2011, 13:40 [ТС] | |
|
2. точно два, ну он паскалист - незнаю может там это проще.
0
|
|
|
1069 / 848 / 60
Регистрация: 30.04.2011
Сообщений: 1,659
|
|
| 09.06.2011, 13:49 | |
|
IIIa66uMEM6eP, тогда можно просто рассказать ему все наши соображения. Что строки разной длины, что надо запоминать позиции концов строк, что для перезаписи нужно открывать тот же файл в двоичном байтовом режиме и т.д. Мож впечатлится информацией, которую вам пришлось раскапывать...
0
|
|
|
заставил Бендера
|
|
| 09.06.2011, 13:51 [ТС] | |
|
ValeryLaptev, иии)) скажет ну если все знаете - реализовывайте, приходите на защиту.. надо как то сформулировать - что бы ни вопросов ни придлогов) спасибо
Добавлено через 51 секунду ValeryLaptev, вы же кажется тоже преподаватель?
0
|
|
| 09.06.2011, 13:51 | |
|
Помогаю со студенческими работами здесь
20
С 10 в 2 через битовые сдвиги Удаление строки через Combobox Удаление файла через 90 дней Удаление файла через cmds Удаление строки из файла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи. . .
|
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений.
9TO2GP2bpX4
a42b81fb172ffc12ca589c7898261ccb/
https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/
Слева синяя линия -. . .
|
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. .
Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
|
Контроль уникальности заводского номера - вариант №2
Maks 24.03.2026
В отличие от предыдущего варианта добавлено прерывание циклов, также добавлены новые переменные для сохранения контекста ошибки перед прерыванием цикла:
Процедура ПередЗаписью(Отказ, РежимЗаписи,. . .
|
|
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога
Финальные проекты на Си и на C++:
finish-text-sdl3-c. zip
finish-text-sdl3-cpp. zip
|
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
|
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo
Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло.
Но на выплатах по больничным это. . .
|
Контроль уникальности заводского номера - вариант №1
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере документа выдачи шин для спецтехники с табличной частью в конфигурации КА2. Данные берутся из регистра сведений, по. . .
|