Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.02.2022, 07:05   #191
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Да, такой вариант не рассматривался:
Код:
if fbin.Size + 1 < end_pos then
raise Exception.Create('Слишком большой адрес конца файла!');
// или
while fbin.Position < min(fbin.Size, end_pos) do


[/CODE]
// или
read_count := fbin.Read(b[0], min(BYTES_IN_LINE, end_pos - addr));
if read_count = 0 then
break;




Полный провал по тестам . полный ..... С этим кодом только шапку делает, а остальное нет.

Никуда не годится, как я вчера этот момент не отловил ? Наш код хорош когда строгий размер файла, а если не строгий размер, всё летит в трам та-ра-ры.....
case хорош под один файл со строгим размером и чтоб адреса не вылазили за размер.
Убираем ограничение размера и жёстко зависаем .......... А если, три файла разного размера , весь наш код летит коту под хвост...
case не удобен под разные файлы и размеры .

У меня тут идея появилась, в case обработку делать скажем, если последний адрес превышает размер файла, то последний адрес изменяется пример : [CODE] begin

Код:
 begin
case Combobox1.ItemIndex of
0:
begin
if end_pos  > fbin.Size - 1 then
begin
start_pos := $0 ;
end_pos := $0A0 ;
end;
else
start_pos := $0 ;
end_pos := $0B0;
end;
Но не получается , case думаю не там располагается.

Последний раз редактировалось sergey.serg-72; 01.02.2022 в 07:12.
sergey.serg-72 вне форума Ответить с цитированием
Старый 01.02.2022, 07:16   #192
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
чтоб адреса не вылазили за размер
Просто добавить выброс исключений, если начальный или конечный адрес больше размера файла. Менять сам case не вижу смысла, а то получится, что программа втихую выбрала другие строки, а не те что хотел пользователь, потому что файл оказался маленький.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 01.02.2022, 07:30   #193
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
raise Exception.Create('Слишком большой адрес конца файла!');
Да и потом какой большой адрес, если загружаемый файл меньше чем выставлены адреса?
sergey.serg-72 вне форума Ответить с цитированием
Старый 01.02.2022, 07:42   #194
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Просто добавить выброс исключений, если начальный или конечный адрес больше размера файла. Менять сам case не вижу смысла, а то получится, что программа втихую выбрала другие строки, а не те что хотел пользователь, потому что файл оказался маленький.
Нет думаю что выброс не пойдёт , я уверен что препод даст именно изменение адреса, я его знаю, скажет так : есть два разных файла два разных размера, соответственно куски вырезаются, тоже разные, а как определить? размером файла правильно. Соответственно прога должна определить по размеру файла и соответственно адреса меняться должны. И как то обставить, если файл меньше и первоначального размера и второго размера. Может просто пустышку от конвертит, может окно что не соответствует размер адресам. Но это в Case надо, а там ни фига условия не ставятся ... Надо case менять и весь код соответственно. По другому ни как. Три разных файла у них размеры разные и адреса, как тут ставить ограничение на адресацию и размер? Ни как .
sergey.serg-72 вне форума Ответить с цитированием
Старый 01.02.2022, 08:39   #195
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Менять сам case не вижу смысла,
С размером решил , как сделать чтоб в case сделать условие, если файл меньше то конечный адрес один, если файл больше то и конечный адрес меняется. Вот что надо, но как в case задать условие по двум размерам файла , чтоб прога определяла и меняла конечный адрес вот , что надо.
sergey.serg-72 вне форума Ответить с цитированием
Старый 01.02.2022, 10:07   #196
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Расположить иф с кейсами уже после TFileStream.Create:
Код:
if fbin.Size > 200 then
  case Combobox1.ItemIndex of
  ...
  end
else
  case Combobox1.ItemIndex of
  ...
  end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 02.02.2022, 09:56   #197
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Расположить иф с кейсами уже после TFileStream.Create:
Код:
if fbin.Size > 200 then
case Combobox1.ItemIndex of
...
end
case Combobox1.ItemIndex of
...
end;

да.я уже вчера такой вариант тоже отработал, но потом вернулся к старому. проверенному
Код:
 if fbin.Size  < 176 then
raise Exception.Create('не допустимый  файл!');
Всё что меньше самого маленького отсекаем.
Всё что больше 400 тоже отсекаем
Код:
if fbin.Size - 1 > 400  then
raise Exception.Create('Большой слишком файл !');
Таким образом мы оставляем нужный диапазон.

далее как чуял вчера, сидел всю ночь пробовал как при изменении размера файла менять адрес
Сделал перед циклом while fbin.Position < end_pos do так :
Код:
 if  Combobox1.ItemIndex = 1  then
if fbin.Size > end_pos  then
 begin
start_pos := $0 ;
end_pos := $0AF;
end
else
 begin
start_pos := $0 ;
end_pos := $15F;
end;
Всё отлично сработало , если файл в 176 байт то последний адрес один, если файл 352 байта, то конечный адрес другой . Всё получилось. Правда компилятор 2 предупреждения и 5 советов к такому варианту выписал.
А сейчас пугать буду , сам уже напуган, ночь просидел не решил.....

Ну как я и предполагал препод ещё усложнил, полный капут!!!....

задача сделать 8 файлов разной длины, и отработать с 1 файла в 176 байт и до 8 файла, так: прога по размеру файла должна менять конечный адрес (начальный постоянный).

Как задание? 8 условий для одного Combobox1.ItemIndex, тут еле с двумя решил , а тут 8

этот код уже не пойдёт
Код:
if  Combobox1.ItemIndex = 1  then
if fbin.Size > end_pos  then
 begin
start_pos := $0 ;
end_pos := $0AF;
end
else
 begin
start_pos := $0 ;
end_pos := $15F;
end;
Case думаю врятли , всю ночь просидел. только бошка загудела......

Последний раз редактировалось sergey.serg-72; 02.02.2022 в 10:00.
sergey.serg-72 вне форума Ответить с цитированием
Старый 02.02.2022, 10:09   #198
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
прога по размеру файла должна менять конечный адрес (начальный постоянный)
Код:
case fbin.Size of
  176: end_pos := $1;
  352: end_pos := $2;
else
  raise Exception.Create('Неизвестный размер!');
end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 02.02.2022, 22:11   #199
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
case fbin.Size of
176: end_pos := $1;
352: end_pos := $2;
else
raise Exception.Create('Неизвестный размер!');
end;
Круто , классно и понятно !
sergey.serg-72 вне форума Ответить с цитированием
Старый 02.02.2022, 22:33   #200
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
прога по размеру файла должна менять конечный адрес (начальный постоянный)
BDA ну вот. сегодня стала понятна конечная цель занятий и к чему препод вёл. Форматы s19 и Hex текстовые это факт. в отличии от Bin позволяют записывать файл непосредственно по нужным адресам, пропуская ненужные данные , а считывать из файла то. что нужно. Это тоже
понятно. Отсюда задание. нарезать несколько тестовых файлов (сделано).

Выставить 8 разных адресов для чтения из файла( сделано) . читать файл кусками и так записывать. пропуская не входящие в диапазон адресов данные..
Сделать 8 адресов и 8 разных тестовых файлов , с разными размерами от маленького, до конечного. Программа должна считывать из файла адреса которые нужны и записывать . если файл маленький и есть только 2 диапазона адресов, считать два и записать в файл. Далее более большой файл и уже три диапазона считать и записать и так до конца до последнего файла.

Программа должна автоматически . соответственно размеру файла определять диапазон адресов , которые попадают с них записывать , ненужное пропускать. И так до конца последнего (самого большого файла) когда все адреса можно считать и записать.

Как то так :
Код:
begin
case Combobox1.ItemIndex of

1:
begin
start_pos := $0 ;  end_pos := $020 ;

start_pos := $050;   end_pos := $070 ;   // всё что между пропускается

start_pos := $090;   end_pos := $0B0;

start_pos := $0E0  ;   end_pos := $110;

start_pos := $0150;   end_pos :=  $0170;

start_pos := $1A0 ;   end_pos :=  $1C0;

start_pos := $1F0 ;   end_pos := $230;

start_pos := $2B0 ;   end_pos := $370;
end;
В общем соответственно размеру файла считывается диапазон из списка, где 2, где три, где 4, а где все 8 войдут.

Батан был прав , он сразу говорил что к этому придём судя по заданию и подсуетился заранее ..
В общем как то надо менять условия case Буфер куда считывать данные с конкретных адресов и только потом записывать.

Я в Цейтноте ..... BDA выручайте. Видимо как то цикл надо строить и буфер ? не знаю с чего начать?
sergey.serg-72 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нужно создать "батник", вырезать из "2.txt" первых n строк и вставить их в "1.txt" temphard Помощь студентам 2 03.09.2013 16:03
Удаление первых n-строк из txt-файла Neksion Помощь студентам 2 10.07.2013 18:12
Создать чтение из файла и запись в файл txt на С++ skifre Фриланс 0 01.06.2012 16:16
поиск и выципление строк из txt файла D_e_n_n Помощь студентам 7 04.02.2011 05:39
C# Представление txt файла как массива строк asheb Помощь студентам 7 20.04.2010 12:51