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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 10.03.2021, 19:36   #41
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Цитата:
Сообщение от sergey.serg-72
на уроке препод именно , это и потребовал
Не увидел выравнивания адресов в выходном файле. Мне кажется, вы какой-то другой смысл вкладываете в этот термин. Но раз преподавателя устроила работа программы, то ладно.
Цитата:
Сообщение от sergey.serg-72
надо было с имитировать конвертацию
Ну да, действительно имитация. Еще доводить до ума, чтобы удовлетворять форматам.
Цитата:
Сообщение от sergey.serg-72
Двоеточие и в конце байт контрольной суммы точка
Наверное, легче учиться на минимальных изменениях, прежде чем пытаться реализовать сразу srec или intelhex.
Цитата:
Сообщение от sergey.serg-72
нормально, что байты контрольной суммы строки не совпадают
Нормально, так как в srec и intelhex контрольная сумма считается не только от данных. Во-вторых, сама контрольная сумма не просто сумма байтов. В одном случае дополнение до FF, в другом - до нуля. Всё написано в википедии.
Цитата:
Сообщение от sergey.serg-72
Что касается не надо, то я бы с Вами согласился но приговор, сегодня прозвучал
Всё еще не уверен в необходимости выравнивания. Повторюсь, что форматы srec и intelhex не требуют выравнивания адресов.
Цитата:
Сообщение от sergey.serg-72
Вот BDA, для Вас тяжело как я понял
Несложно, просто муторно, если всё делать по уму. Например, автоматически выбирать тип записи для srec формата, в зависимости от размера входного файла (чтобы адреса влезли). Или, наоборот, не заморачиваться и использовать S3 с 4байтовым адресом.
Цитата:
Сообщение от sergey.serg-72
забыли +sLineBreak;
Ага, и правда, но вы уже можете и сами исправить такое.
Цитата:
Сообщение от sergey.serg-72
Препод спросил как это устранить? а я не готов . Сейчас только прочитал.
Скорее всего не нравится последний перенос строки в файле. Просто нужно шапку писать без переноса строки:
Код:
s := 'S9030000FC,';
ftxt.Write(s[1], Length(s));
while fbin.Position < fbin.Size do
А в цикле начинать строку с переноса строки (и не добавлять перенос в конец строки):
Код:
s := sLineBreak + Format('%.8x :', [fbin.Position + offset]);
...
s := s + ' ' + IntToHex(sum, 2);
Цитата:
Сообщение от sergey.serg-72
что лучше использовать : sLineBreak , или #13#10 в инете, мнения расходятся
Я за sLineBreak - ОС-независимо и более читаемо. Но бывают ситуации, когда строго обговариваются окончания строк, тогда можно завести свою константу с нужными символами.
Цитата:
Сообщение от sergey.serg-72
сколько это будет стоить ?
Не знаю, не занимаюсь фрилансом. Просто пояснил, что заказ программы, это не только готовый код. И нюансы можно обговорить с исполнителем.
Цитата:
Сообщение от sergey.serg-72
Очень нравится конверт препода, но он не даёт, говорит, что потом, когда задание выполните,то подарит.
Это слишком узконаправленная программа получается. Если использовать именно по делу, то можно рассмотреть, например, HxD Hex Editor. Есть экспорт файла в оба обсуждаемых формата, подсчеты различных контрольных сумм и хешей и другие полезные вещи.
Цитата:
Сообщение от Heneken87
Будет забавно, если Ваш препод тоже на этом форуме.
Все может быть.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 10.03.2021, 22:49   #42
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Не увидел выравнивания адресов в выходном файле. Мне кажется, вы какой-то другой смысл вкладываете в этот термин. Но раз преподавателя устроила работа программы, то ладно.
А его и не было выравнивания адреса, это впереди, пока требование имитацию, что и выполнено.
А как выравнить адрес, я не знаю, нам не объяснили пока.

Цитата:
Сообщение от BDA Посмотреть сообщение
Ну да, действительно имитация. Еще доводить до ума, чтобы удовлетворять форматам.
Хотя бы hex получился бы и уже хорошо, он легче srec. Вот читаю википедию вникаю.

Цитата:
Сообщение от BDA Посмотреть сообщение
Всё еще не уверен в необходимости выравнивания. Повторюсь, что форматы srec и intelhex не требуют выравнивания адресов.
Мне тоже кажется так.

Цитата:
Сообщение от BDA Посмотреть сообщение
Несложно, просто муторно, если всё делать по уму. Например, автоматически выбирать тип записи для srec формата, в зависимости от размера входного файла (чтобы адреса влезли). Или, наоборот, не заморачиваться и использовать S3 с 4байтовым адресом.
Лучше не заморачиваться, чем проще, тем лучше.
А потом srec, как я понял из прочитанного, это формат для постраничной записи в микроконтроллер , этим видимо и отличается от hex. Вижу так : форма, edit, кнопка для загрузки файла, преобразования и сохранения. Через edit, вводится адрес для смещения, скажем 0100, с этого адреса и записывает данные . По умолчанию в edit стоят 0000.

Цитата:
Сообщение от BDA Посмотреть сообщение
Я за sLineBreak - ОС-независимо и более читаемо. Но бывают ситуации, когда строго обговариваются окончания строк, тогда можно завести свою константу с нужными символами.
Принято пусть будет sLineBreak.

Цитата:
Сообщение от BDA Посмотреть сообщение
Это слишком узконаправленная программа получается. Если использовать именно по делу, то можно рассмотреть, например, HxD Hex Editor. Есть экспорт файла в оба обсуждаемых формата, подсчеты различных контрольных сумм и хешей и другие полезные вещи.
Да редакторы у меня есть, но они писать за меня не будут, тут преподу все сказали, за чем изобретать велосипед, он сказал это не обсуждается, будете делать задание и зарычал....

Последний раз редактировалось BDA; 11.03.2021 в 00:06.
sergey.serg-72 вне форума Ответить с цитированием
Старый 10.03.2021, 23:19   #43
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Нормально, так как в srec и intelhex контрольная сумма считается не только от данных. Во-вторых, сама контрольная сумма не просто сумма байтов. В одном случае дополнение до FF, в другом - до нуля. Всё написано в википедии.
А как это реализовать ? значить функция подсчёта которую выкладывал, это именно из этой оперы? С FF, в другом - до нуля с этим понятно, а какие ещё данные считает?
Самым оптимальным считаю когда в строке 16 байт.
Вот как после редактора , в архиве, вот так надо.
Но я пока hex читаю, а srec пробежался. Они вроде похожи ?
Вложения
Тип файла: rar s19, hex.rar (654 байт, 5 просмотров)
sergey.serg-72 вне форума Ответить с цитированием
Старый 10.03.2021, 23:33   #44
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
А в цикле начинать строку с переноса строки (и не добавлять перенос в конец строки):
Код:
s := sLineBreak + Format('%.8x :', [fbin.Position + offset]);
...
s := s + ' ' + IntToHex(sum, 2);
В том то и дело, установлено точно, проблема в шапке, из за переноса строки, добавляются 2 байта. Нижняя шапка убрана, она не обязательна,
Задание : шапка должна быть , но файл должен быть строго 400 байт, а с переносом получается 402 байта. У препода с шапкой но 400 байт, а у меня с шапкой 402.
Как то надо обработать так, чтоб и шапка осталась и размер 400 байт.
Как то надо убирать эти 2 байта переноса.
Как Вы дали пробовал ещё вчера, не выходит.

Вот упростил код для примера :

Код:
 begin
fbin := TMemoryStream.Create;
ftxt := TMemoryStream.Create;
fbin.LoadFromFile(dlgOpen1.FileName);
begin
SetLength(b, BYTES_IN_LINE);
s:='S9030000FC'+sLineBreak; // проблема в переносе строки 2 байта из за переноса
ftxt.Write(s[1],Length(s));
while fbin.Position < fbin.Size do
begin
s:=Format('',[fbin.Position]);
count :=fbin.Read(b[0], BYTES_IN_LINE);
for i := 0 to count - 1 do
s:=s+''+''+IntToHex(b[i],2);
s:=s+''+sLineBreak;
ftxt.Write(s[1],Length(s));
end;
begin
dlgSave1.FileName :=dlgOpen1.FileName;
ftxt.SaveToFile(dlgSave1.FileName+'' + '.txt');
Application.MessageBox('txt_ Файл записан успешно .', 'Сообщение', MB_Ok + MB_ICONINFORMATION);
end;
end;
fbin.Free;
ftxt.Free;
end;
end;
Что то перед шапкой надо делать, какая то обработка, чтоб перенос без #OD0A

В архиве два файла, 400 получается, если без переноса, а это не правильно, с переносом, эти 2 байта, всё портят.
А препод в свою прогу поставил ограничение по размеру в 400 байт и чтоб шапка была...
Вложения
Тип файла: rar перенос.rar (875 байт, 3 просмотров)

Последний раз редактировалось sergey.serg-72; 10.03.2021 в 23:39. Причина: граматика
sergey.serg-72 вне форума Ответить с цитированием
Старый 11.03.2021, 00:42   #45
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Код:
s := 'S9030000FC';
ftxt.Write(s[1], Length(s));
while fbin.Position < fbin.Size do
begin
  s := sLineBreak + Format('%.8x :', [fbin.Position]);
  count := fbin.Read(b[0], BYTES_IN_LINE);
  for i := 0 to count - 1 do
    s := s + IntToHex(b[i], 2);
  ftxt.Write(s[1], Length(s));
end;
Про контрольную сумму. Дополнительных функций не нужно. Просто нужно еще прибавить к сумме кое-какие байты. Для intel hex: поле длины, поле адреса (причем побайтово), поле типа, поле данных (сейчас только оно считается). Для srec: поле количества байт, поле адреса (побайтово), поле данных (сейчас только оно считается). А потом уже привести получившуюся сумму к требуемому виду.
Цитата:
Сообщение от sergey.serg-72
Хотя бы hex получился бы и уже хорошо, он легче srec
По-моему ни один не проще другого.
Цитата:
Сообщение от sergey.serg-72
преподу все сказали, за чем изобретать велосипед
Ну так в качестве учебной задачи велосипеды гораздо лучше - можно найти готовые реализации, примеры, объяснения.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 12.03.2021, 02:46   #46
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
s := 'S9030000FC';
ftxt.Write(s[1], Length(s));
while fbin.Position < fbin.Size do
begin
s := sLineBreak + Format('%.8x :', [fbin.Position]);
count := fbin.Read(b[0], BYTES_IN_LINE);
for i := 0 to count - 1 do
s := s + IntToHex(b[i], 2);
ftxt.Write(s[1], Length(s));
end;

BDA огромное , огромное Вам спасибо, от всей группы, решился момент с переносом, отлично решилось , благодаря Вам !!!
sergey.serg-72 вне форума Ответить с цитированием
Старый 12.03.2021, 02:56   #47
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Про контрольную сумму. Дополнительных функций не нужно. Просто нужно еще прибавить к сумме кое-какие байты. Для intel hex: поле длины, поле адреса (причем побайтово), поле типа, поле данных (сейчас только оно считается). Для srec: поле количества байт, поле адреса (побайтово), поле данных (сейчас только оно считается). А потом уже привести получившуюся сумму к требуемому виду.
Про контрольную сумму к стате, просидел до 3 утра, дал препод задание подсчитать контрольную сумму , его тестового файла, применить функцию swap, изменять цвет вывода данных, Проявить смекалку .... Мы ещё этим не занимались, сегодня в первые , да ещё сам. Удивительно что компилятор не выписал предупреждений и ошибок. Хрен бы я решил задачу, если бы не Ваши уроки, за эти дни. Применил полученные знания. Может конечно коряво, но задание выполнил.
Сколько бы я читал материалов по Дельфи,наверное неделю .... Завтра списать дам , кто не смог.
А Вы говорите медвежья услуга, не согласен.
Вот что наваял .
Вложения
Тип файла: rar проект CHECKSUM.rar (201.2 Кб, 2 просмотров)
sergey.serg-72 вне форума Ответить с цитированием
Старый 12.03.2021, 03:02   #48
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
По-моему ни один не проще другого.
Я до srec , ещё не дошёл, начал hex изучать, пришлось отложить и заняться новым заданием, ну теперь неделю не будет занятий , приступаю к изучению hex.
Блин глаза слепаются...

Цитата:
Сообщение от BDA Посмотреть сообщение
Ну так в качестве учебной задачи велосипеды гораздо лучше - можно найти готовые реализации, примеры, объяснения.
Всей группой за эти дни , облазили все ресурсы, ни кому не удалось найти реализации ни hex, ни srec, на дельфи. Видимо нет на данный момент. Даже странно, такая популярная тема и нет, ни на одном ресурсе. А книгах и говорить даже не буду....
Никто даже темы подобной не создавал.
Наверное это трудная задача и не каждый программист сможет выполнить.

Последний раз редактировалось BDA; 14.03.2021 в 06:39.
sergey.serg-72 вне форума Ответить с цитированием
Старый 12.03.2021, 04:29   #49
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Цитата:
Сообщение от sergey.serg-72 Посмотреть сообщение
Может конечно коряво, но задание выполнил.
Вполне неплохо. Замечания на будущее: все-таки форматируйте код (его будет гораздо удобнее читать). В коде ниже второй if не имеет смысла, так как else ветка уже означает, что размер 183.
Код:
if Stream.Size <> 183 then
  ShowMessage('Не допустимый размер файла !  строго 183 байта .')
else
begin
 if Stream.Size = 183 then
Раз уж сделали "with dlgOpen1 do", то в коде внутри можно убрать "dlgOpen1". Для красоты вывода CRC можно сделать "IntToHex(F1, 4);", чтобы были ведущие нули. Можно не выставлять позицию "Stream.Position := $0B5;", так как и так там остановились при чтении. Ну и еще один лишний if:
Код:
if F2 <> F1 then
begin
...
end
else
begin
  if F2 = F1 then
Можно число 183 тоже сделать константой с нормальным именем, потому что встречается несколько раз в коде.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA на форуме Ответить с цитированием
Старый 12.03.2021, 18:47   #50
sergey.serg-72
Форумчанин
 
Регистрация: 12.03.2019
Сообщений: 376
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Вполне неплохо. Замечания на будущее: все-таки форматируйте код (его будет гораздо удобнее читать). В коде ниже второй if не имеет смысла, так как else ветка уже означает, что размер 183.
Согласен ! как раз во время, две девчонки у нас не сдали, я им два варианта написал, чтоб хоть как то отличались от моей. А то Джонс рычать будет, когда совсем уж клоны....
Один вариант выкладываю.
Вложения
Тип файла: rar проект CHECKSUM.rar (201.9 Кб, 2 просмотров)
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