Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Где ошибка?  (Прочитано 11296 раз)
0 Пользователей и 1 Гость смотрят эту тему.
monrus
Опытный

ru
Offline Offline

« : 16-07-2007 18:15 » 

Создал прогу, которая копирует блоки байт из одного файла в другой. Ее задача в том, чтобы копировать блоки до определенного набора символов. Затем она перестает копировать до другого набора символов, затем продолжает копировать. и так по циклу.
Т.е. ее задача копировать все, что находится вне этих двух блоков.
Вопрос - почему-то она урезает второй файл на 1 байт. Почему?

* StatClear.rar (2.64 Кб - загружено 747 раз.)
Записан
MS
Помогающий

ru
Offline Offline
Пол: Мужской

« Ответ #1 : 16-07-2007 18:28 » 

Может я что то непойму, но в 1.txt

111begin5end222222begin5end333

А в 2.txt

111onetwo222222onetwo3333

Почему прибавилась еще 3?

Записан

Ничто так не ограничивает полёт мысли программиста, как компилятор
monrus
Опытный

ru
Offline Offline

« Ответ #2 : 17-07-2007 15:08 » 

Я тоже
Записан
monrus
Опытный

ru
Offline Offline

« Ответ #3 : 17-07-2007 18:26 » 

Так где же ошибка?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #4 : 17-07-2007 18:37 » 

Настояший Джедай не знает что такое debug и трассировка Жаль
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
nikedeforest
Команда клуба

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 17-07-2007 18:49 » 

Улыбаюсь) Тормоза придумали трусы Улыбаюсь
Записан

ещё один вопрос ...
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #6 : 17-07-2007 19:44 » 

Кстати, насколько я помню, индексация массивов в паскале вроде начиналась с 0?
monrus, Кстати, а если у тебя файл будет скажем 10 мегов, представляеш, какой тормоз будет у тебя прога?
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
monrus
Опытный

ru
Offline Offline

« Ответ #7 : 18-07-2007 01:14 » 

Знает - только запутался я совсем. Давно не садился за это дело.
Записан
monrus
Опытный

ru
Offline Offline

« Ответ #8 : 18-07-2007 01:24 » 

Finch - Где именно в коде с 0? там где str[1] надо? Помоги - ваще голова перестала соображать. Вроде все правильно, но почему-то добавляется один байт.
Записан
sss
Специалист

ru
Offline Offline

« Ответ #9 : 18-07-2007 03:06 » 

С индексом все правильно. В индексе [ 0 ] лежит длина.
Но вот загадка Length(fs[1]) - чему равна Не понял
Записан

while (8==8)
monrus
Опытный

ru
Offline Offline

« Ответ #10 : 18-07-2007 14:23 » 

Кто-нить исправьте ошибку
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


WWW
« Ответ #11 : 18-07-2007 15:39 » 

monrus, сорри, не шарю в паскале (   
А ещё ТЗ не совсем понятно, если честно
Записан

Kivals
Команда клуба

us
Offline Offline
Пол: Мужской

WWW
« Ответ #12 : 18-07-2007 16:49 » 

Логика программы ужасна Жаль
Ты по нескольку раз перезаписываешь одно и то же значение.
(подсказка: Seek() для твоей задачи не нужна! Переделай код так, чтобы от нее избавиться)
а ошибка у тебя в следующем:
BlockRead(f, fs[1], Length(fs), NRead);
NRead - количество прочитанных байт, оно может быть меньше или равно Length(fs). Когда ты подходишь к концу файла - ты читаешь меньше чем у тебя длина строки, а пишешь - как длина строки:
BlockWrite(f2, fs[1], Length(fs[1]), NWrite);
Т.е. пишешь мусор из буфера...
Записан
Kivals
Команда клуба

us
Offline Offline
Пол: Мужской

WWW
« Ответ #13 : 18-07-2007 16:56 » 

Апшибся - ты пишешь 1 байт (Length(fs[1])==1), но пишешь его лишний раз, даже когда у тебя NRead=0.
для простоты можешь в условии поставить строго меньше, а не меньше-равно:
if (l + m) < FileSize(f) then begin
Но код все равно лучше переделать... (ИМХО)
Записан
v2
Помогающий

ua
Offline Offline

« Ответ #14 : 18-07-2007 17:02 » 

..

* StatClearNew.rar (3.49 Кб - загружено 728 раз.)
Записан
monrus
Опытный

ru
Offline Offline

« Ответ #15 : 18-07-2007 18:28 » new

Спасибо всем. v2 - буду разбираться Улыбаюсь
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines