|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
01.12.2016, 23:26 | #11 |
Пользователь
Регистрация: 19.11.2016
Сообщений: 24
|
[QUOTE=evg_m;1648752]если я правильно понял вашу проблему вы не можете понять а какую же часть буфера вам надо обработать (или константа или ... )
TStream.Read это функция и она возвращает какой-то результат. А значение оного описано в справочной литературе. (в т.ч. и в рекомендованной мною ранее). Код:
Код:
1. рассчитанную вами (вы ведь учли(посчитали) и эти байты), это же "точно такие же" байты 2. записанную ранее (а они при расчетах их не учитывали), их ведь еще не было когда считали и потом записывали Код:
и имеет смысл динамическая "подстройка" размера буфера под размер файла с целью снижения "сложности" программы путем избавления от "переключения буфера" на другой блок файла. [CODE]var A: array of byte; //динамический массив с неизвестным заранее числом элементов SetLength(A, Fstream.Size); //задаем размер буфера(число элементов массива) по размеру файла r:=Fstream(@A[0], length(A)); // а надо будет сделать как-то вот так if r<Fstream.Size then ; //черт знает что, я не сумел прочитать все for j:=low(A) to high(A) do //обрабатываем буфер(массив) от корки(low -наименьший индекс) до корки(high -наибольший индекс) .... Добрый вечер ! если я правильно понял вашу проблему вы не можете понять а какую же часть буфера вам надо обработать // Не совсем так, с буфером всё понятно, как раз обрабатывается в буфер (A,1023), при чём если увеличить размер буфера скажем (А, 2048), или (А,393216), то можно обрабатывать достаточно большие файлы, в специфики пик контроллеров и микроконтроллеров, где FlaSH редко превышает 65536 байт. Но Вы, правы , P.P.S. при современных характеристиках железа, допустимые размеры буфера, как правило превышают размеры редактируемых вручную файлов. А так как это вроде Hex редактор, то помимо файлов с фиксированным размером в байтах, возникает необходимость работать с файлами превышающими размеры буфера, а Дельфи ограничивает, как мы убедились размер буфера... Поэтому задача простая стоит : как сделать так, чтоб можно было работать с файлами динамически, как Вы выразились (больших размеров). TStream.Read это функция и она возвращает какой-то результат. А значение оного описано в справочной литературе. (в т.ч. и в рекомендованной мною ранее). Да, материал скачали и я и сын читаем, спасибо, но к сожалению материала много и пока прочтёшь весь, то редактор, за года два писать придётся, уже неактуально будет. А про TStream.Read ,length(Функция Length возвращает или число символов в SourceString, или число элементов в SourceArray.) и @-скрепка указание буфера, это и раньше прочли (сын точней)я за эти дни тоже. Да и я, согласен, быстрей усваивается материал когда пишешь и анализируешь, чем когда читаешь, пока прочёл один том, забыл, что во втором и каша в голове... А во всех материалах, их тоже много накачали, к сожалению много вокруг и около, а по делу, то что нужно сейчас нет.... Простую задачу третий день решить не можем и материал здесь, к сожалению мало чем помогает.... Когда конкретный пример удаётся найти, отработать, тогда всё, понятно, а чтение, только путаница, пока прочёл, за был что хотел сделать. Еслиб на просторах инета был подробный материал по специфики, то конечно и на форумах, никто бы помощи не просил. fstream.Position:=0; CRC:=0; r:=Fstream.Read(A, length(A)); while r>0 do begin // у нас есть необработанные данные for j:=0 to r-1 do begin //именно столько нам "удалось" прочитать в последний раз CRC:=CRC + .... ; end; r:=Fstream.Read(A, length(A); end; код не работает, много новых непонятных переменных: r? какая переменная, какого типа? CRC - какого типа и откуда? r:=Fstream.Read(A, length(A)); компилятор не компилирует в ошибку.... length причина в этой функции думаю, её надо наверное предварительно объявить, где? r:=-1; r:=Fstream.Read(); CRC:=0; while r<>0 do begin r:=Fstream.Read(A, length(A)); for j:=0 to r-1 do begin CRC:=... ; // непонятно многоточие, присвоить что? как выводить в Label? end; end; тоже не компилируется в ошибку.... Delta:=0; Fstream.Position:=0; r:=0; CRC:=0; for j:=0 to Fstream.Size -1 do begin if j-Delta >=r then begin Delta:=Fstream.Position; //Delta:=Delta +r; r:=Fstream.Read(A, length(A)); end; CRC:=AddCRC(CRC, A[j-Delta] ); end; function AddCRC(oldcrc: xxx; addval: zzz): xxx; begin result:=oldcrc + ... ; end; тоже самое, ругается на ххх и не нравится функция Delta какая переменная, какого типа? как выводить в label?. P.S. а что вы будете теперь делать если CRC, как обычно и делается, записано в конце этого же файла и вам надо сравнить Это как раз непроблема, когда знаешь где эти контрольные байты, если в конце файла (устаревший метод) то считаешь до этих байт, остановился, далее с известного адреса считываешь контрольные байты и сверяешь, если сходятся, прошива хорошая, если нет, то битая. Сейчас как правило не в конце прошивы, а ниже, в зоне переменных значений, но когда знаешь, то посчитал прошиву, считал известные и сверил. Тут есть примеры и как это сделать нашли и отработали. Хуже, когда эти байты неизвестны и разбросаны по разным адресам, один в начале, другой в середине.... Вот тогда имея образец проверяешь по обычной CRC, как в нашем случае. Да и байты в пока они не проставляют, пока это любительское всё. Так что пока актуально, как сделать динамически буфер, чтоб можно было работать с файлами больших размеров. Код:
с - A: array of byte; //динамический массив с неизвестным заранее числом элементов. понятно, сделали динамический массив, а вот что дальше, изменить в коде? |
02.12.2016, 09:01 | #12 | ||||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Цитата:
2. находим используемую функцию. TStream.Read 3. узнаем тип параметров и тип результата. 4. определяем тип используемой переменной =типу результата функции. r: integer; Цитата:
причем я даже не знаю как именно вы ее посчитаете, именно поэтому там и ... Цитата:
Цитата:
чтобы выучить язык, надо на нем говорить. чтобы запомнить функцию и ее параметры ее надо не учить, а применить самостоятельно (без Copy Paste) и c самостоятельным определением типов переменных. конечно потом помогает структуризация данных (это есть и в справке SeeAlso и в том же справочнике) и знание аналогичных да и всплывающая подсказка с описанием параметров используемой функции никуда на делась из Dephi. А может делась (я работал только с D7) ?
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 02.12.2016 в 09:20. |
||||
03.12.2016, 23:14 | #13 |
Пользователь
Регистрация: 19.11.2016
Сообщений: 24
|
Добрый вечер !
Попробовали работу с динамическим массивом, на основе данного примера Вами, и прочитанного материала.... Прога загружает файл, обрабатывает, выводит CRC, но при сравнении результата, с другим редактором есть различия, по файлам до 2048 байт в 41 , с файлом в 65536 байт в 12.... Но главное, попробывали загрузить файл в 5464311 байт, прога зависла, загружала минут 6 файл, загрузила, обработала разница в 68. Явно гдето в цикле ошибка, но главное, загружать файл, с зависанием и за 6 минут, когда другой редактор загружает за секунду, это слишком.... Всё таки кажется что динамический массив, да и статический не подходят для работы с большими файлами. Тут либо в потоке, либо ещё как то.... И очищает поле StingGrid, долго, секунд за 5-6. Нужна помощь зала. Код:
|
04.12.2016, 15:33 | #14 | ||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Код:
Цитата:
Цитата:
да еще к тому же столько же раз выполнять модификацию строки вывода. вот ваш тормоз.
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 04.12.2016 в 15:49. |
||
04.12.2016, 22:42 | #15 | |
Пользователь
Регистрация: 19.11.2016
Сообщений: 24
|
Цитата:
r:=fstream.Read(@A[0],...); // @A[0] (@) указатель на (A[0]) первый(нулевой[0]) элемент массива. Не работает этот код, ни в какой интерпретации, ругается компилятор на @, хоть убей его.... Нет неправильно это наверное... r:=Fstream(@A[0], length(A)); Edit3.Text:=' '+IntToHex(D1,A[j]); А как по другому ещё выводить? Выводится тогда вообще не понятные данные..... Нет, здесь предположения не подойдут, тут точно надо знать, как , куда и что. Вот Ваши справочники и библия флёнова и им подобные трактаты, лабуда одна, для запудривания мозгов.... Нет ни одного конкретного примера по теме, много вступления и много лишнего, всё можно описать в три строки , понятно и доступно, но видимо у автора писательский порыв и много свободного времени....Этот материал взрослому трудно читать, что говорить о детях.... Справка получается быстрей в поисковике ... Есть, (правда мало) сайты, где действительно доходчиво, кратко и в примере объясняется....Тут талант нужен чтоб объяснить уметь. Сын почитал и сказал : ещё два дня почитаю эту туфту, я интерес к программированию потеряю на проч. Будешь заставлять брошу.... Зато удалось сайт найти, там, столько материала и примеров, что 5 летнему понятно будет.... К сожалению все , по моему помешаны на TXT.FILE и почти нет примеров работы с типизированными (бинарными, Hex) файлами. За час чтения сайта, я узнал сегодня больше, чем прочитал (уже половину) библию Флёнова.... В голове каша, конкретики мало, пока прочёл вторую главу, на прочь за был, что читал в первой, каша и только..... Нужны примеры и описание, почему, так, а не иначе.... Догадки всё же больше для профи... Рано гадать, когда опыт только начинается. Последний раз редактировалось nikitin.leha-201; 04.12.2016 в 22:46. |
|
05.12.2016, 09:19 | #16 | ||||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
чтобы узнать базовые вещи (к примеру те же указатели) надо читать УЧЕБНИКИ.
Библия к таковым не относится. Цитата:
Есть Фаронов. (к сожалению он писал еще Turbo Pascal ). Но это именно учебник. для паскаля и детей есть Песни о паскале(автор, если правильно помню, Окулов). Цитата:
к примеру вот так Код:
Цитата:
Цитата:
НО зачем вам делать это в цикле (да еще таком длинном) Код:
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 05.12.2016 в 09:31. |
||||
07.12.2016, 13:32 | #17 | |
Пользователь
Регистрация: 19.11.2016
Сообщений: 24
|
Цитата:
С динамическим массивом пришлось отложить, не получается, оставили пока array. Ещё раз прошу о помощи, нужен вывод данных в Stringgrid в столбцы , в старом коде вывод осуществляется в одну строку, а надо в 16 колонок. С циклом For не получается. Код:
А как можно загрузить фото, а то отции нет для загрузки фото? Последний раз редактировалось nikitin.leha-201; 07.12.2016 в 13:41. |
|
07.12.2016, 13:40 | #18 | |
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
Цитата:
Код:
работающая программа с использованием TStringGrid еще один справочник
программа — запись алгоритма на языке понятном транслятору
Последний раз редактировалось evg_m; 07.12.2016 в 16:24. |
|
09.12.2016, 17:00 | #19 | |
Пользователь
Регистрация: 19.11.2016
Сообщений: 24
|
письмо
Цитата:
Нет, этот код тоже не работает. 1) непонятно зачем константа создаётся, ведь в Form.Creat всё описано... 2) else if {j<count and} buf[j] in ASCII then begin компилятор ругается на этот код и не компилируется.... 3)StringGrid1.Cells[j,i]:=format('%.2x', buf[j]); // непонятно что за формат должен вставляться в код? 4) на константу ASCII компилятор ругается .... 5) справочник уже скачен этот, но в нём, к сожалению нет к нашей теме, ничего конкретного, чем он может помочь? 6)Программа шахматы, интересна, но это совсем не то и этот пример не очень подходит, не понимает его сын, обо мне и говорить не стоит.... 7) Нашёл материал на одном сайте, видео-уроки от Романа Кротова, он математик и отличный программист. Каждый урок по 3-5 минут, так наглядно и доходчиво, что я уже понял про циклы, что такое динамический, и статический массив , константы, модули и функции, всё так подробно и доходчиво, что усваивается наверное пятилетнем ребёнком.... А главное, всё во время программирования, по ходу объясняется, показывается, почему так, а не иначе, что куда и как.... Я даже не думал, что так просто, доходчиво и главное так легко, усваивается урок о пройденном, я блин в институте таких лекций не слушал..... Вот может всё же, человек объяснить, показать доходчиво, а главное интересно и усваивается с первого урока. Всё же правильно говорят : что нет плохих учеников, есть плохие учителя, не умеющие правильно и доходчиво объяснить материал..... Все эти Флёновы,Бескоровайные,Культин, Архангельский и другие объясняльщики, просто ни какие, нельзя им книги писать и пособия..... Взрослому не понятно, о детях молчу.... Я их перечитал и кроме Helloo Word ничего и написать не смог толком.... За три урока Кротова, даже калькулятор сам написал, даже модернизировал, оказывается ни так трудно это, когда понимаешь что надо делать и как это делается.... Трудней уметь донести и правильно объяснить, чтоб интересно и понятно было. А все материалы в томах, только мозг захламляют и желание учится пропадает.... Все эти материалы для людей уже программирующих и знающих, для начинающего это вред ! А объяснить уметь и за интересовать, это талант и мастерство надо иметь всё же и не на словах, а на деле. Гуру тоже одобрил уроки эти и подтвердил что Кротов, это настоящий профи... Зарегистрировались на сайте Кротова, он помогает и объясняет, в чём ошибка и как это делается. Я вчера всё таки с помощью динамического массива решил нашу проблему , ошибка была в одной строчке, в последовательности и ни каких лишних функций и описаний, написал Роману, он ответил, показал в чём была ошибка и почему не получалось. С STRingGrid, с выводом данных и работой с этим компонентом сегодня объяснит в примере и покажет. Тему закрываю, как нерешённую и бесперспективную.... Времени ушло вагон, сын потерял интерес к ней, тем более, что Гуру узнал что мы на форуме зарегились и спрашивали на форуме, а не у него... Мне выговор за это сделал... Этот редактор должен был за 2 дня написан был бы, а мы неделю на месте, бесполезно протоптались.... Если у сына интерес вернётся к редактору, то будет с Гуру писать, а пока интерес полностью пропал и руки опустились.... Меня за это Гуру ругал сегодня..... Простые вещи неделю решить не смогли.... Всем спасибо и особенно Евгению за помощь !. Последний раз редактировалось nikitin.leha-201; 09.12.2016 в 17:16. |
|
10.12.2016, 14:23 | #20 | |||
Старожил
Регистрация: 20.04.2008
Сообщений: 5,526
|
это ВАШ код и ВАШ комментарий
Цитата:
Код:
Цитата:
я почти уверен(давно не заглядывал) описание есть в справочнике. Цитата:
А задача написания редактора (да и еще за два дня) УЖЕ предполагает ЗНАНИЕ основ языка, что как раз и и составляет (циклы, массивы, условные выражения(ветвления). И если дают такое задание, ЗАВЕДОМО зная уровень исполнителя, то ...
программа — запись алгоритма на языке понятном транслятору
|
|||
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Delphi. создать проект, содержащий форму для ввода данных о поездке, вычисление стоимости, файл с записями, редактор | egor55555 | Фриланс | 9 | 05.09.2016 17:28 |
Редактор XML файлов в Delphi | MagGarbut | Помощь студентам | 1 | 15.03.2011 16:26 |
Программа для сравнения содержимого файлов | Alter | Свободное общение | 7 | 25.11.2009 23:38 |