Вверх ↑
Этот топик читают: Гость
Ответов: 24
Рейтинг: 0
#31: 2015-06-08 22:23:00 ЛС | профиль | цитата
Tad, что, так хочется три пиастра?)) Подскажи лучше, если знаешь как.)
карма: 0

0
Ответов: 16884
Рейтинг: 1239
#32: 2015-06-09 08:13:17 ЛС | профиль | цитата
Erik писал(а):
Подскажи
Две страницы подсказок. Сколько нужно ?
На ещё одну - используй файловые потоки.
Но, судя по всему, тебе хочется получить готовую программу - а это в КуплюПродам.
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Ответов: 24
Рейтинг: 0
#33: 2015-06-09 09:32:45 ЛС | профиль | цитата
Тут вот в чём дело, у меня не получается загрузить именно hex-файл, с текстовым файлом проблем нет. Если же загружать файл компонентом DataToFile, как в примере из справки, то например 40-мегабайтный файл загружаться будет не реально долго.
карма: 0

0
Ответов: 8926
Рейтинг: 823
#34: 2015-06-09 10:10:35 ЛС | профиль | цитата
Erik, а что вы имеете ввиду под термином "hex-файл"?
карма: 19

0
Ответов: 24
Рейтинг: 0
#35: 2015-06-09 10:37:57 ЛС | профиль | цитата
hex-файл - бинарник, не текстовый файл. Ну например вот известный hex-редактор 010 Editor, http://s42.radikal.ru/i097/1506/9b/fe0aab737b10.jpg, вот видите там, File -> New -> New Hex File, вот я тоже самое имею ввиду.


Вот например такая схема, всё просто как на ладони, но не работает.

code_35813.txt
карма: 0

0
файлы: 1code_35813.txt [1.1KB] [260]
Ответов: 8926
Рейтинг: 823
#36: 2015-06-09 11:34:48 ЛС | профиль | цитата
Erik, полагаю, что все, любые, файлы на вашем (и на моём) компьютере -- суть "бинарники", т. к. хранятся на диске и существуют в ОЗУ (памяти) в виде двух состояний "0" и "1" ячеек. Восемь ячеек составляют "байт" (первые ПК были 8-ми разрядными), который имеет 256 состояний от "00000000" до "11111111", смотреть и понимать эти ноли и единицы не очень удобно, а алфавита из 256 букв нет, исключительно для удобства при отображении байта на экране его разделяют пополам и ОТОБРАЖАЮТ парой символов "0--9, A, B, C, D, E, F".
Конечно, эти символы имеют свои коды в принятой таблице кодов для байта и можно сохранить любой файл их используя, при этом размер файла увеличится ровно в два раза и будет не понятен для машины без обратного преобразования.
карма: 19

0
Ответов: 4630
Рейтинг: 749
#37: 2015-06-09 11:37:57 ЛС | профиль | цитата
Erik, code_35813 - кошмар
code_35814.txt
карма: 26

0
файлы: 1code_35814.txt [581B] [480]
Ответов: 24
Рейтинг: 0
#38: 2015-06-09 12:07:42 ЛС | профиль | цитата
code_35814.txt


Да, смотри, если это текстовый файл, то всё отлично работает

http://s008.radikal.ru/i303/1506/74/70c6a1350b58.jpg

А если это hex-файл 123.sf2 то этот код работает так - никак.

http://s020.radikal.ru/i713/1506/95/e3a501bfa43b.jpg


Файл 123.sf2 http://rghost.ru/7rDTnLKcB

Упс, вот так работает

Add(MainForm,7795298,252,70)
{
Height=395
Caption="а?б?аИаМаЕб? аИб?аПаОаЛб?аЗаОаВаАаНаИб? DataToFile"
}
Add(FileStream,9833339,294,203)
{
Point(doPosition)
link(onLoad,959701:doConvert,[])
}
Add(RichEdit,6129329,378,189)
{
Left=7
Top=35
Width=380
Height=315
Ctl3D=0
ScrollBars=2
InsertCRLF=1
}
Add(ODialog,5357478,245,203)
{
link(onExecute,9833339:doOpen,[])
}
Add(StreamConvertor,959701,336,203)
{
Mode=4
link(onResult,6129329:doText,[])
}
Add(Button,11226185,203,203)
{
Left=5
Top=10
link(onClick,5357478:doExecute,[])
}
карма: 0

0
Ответов: 4630
Рейтинг: 749
#39: 2015-06-09 12:21:41 ЛС | профиль | цитата
Erik писал(а):
то этот код работает так - никак
Он работает точно так же. Только непечатаемые символы некорректно отображаются в визуальных компонентах.
Но для поиска/замены тебе это не нужно - на выходе со StreamConvertor получается строка содержащая целый файл без каких-либо потерь. Просто не надо ожидать увидеть её в RichEdit. Подавай её сразу на обработку.

Erik писал(а):
вот так работает
Работает. Но каким образом? Для возможности отобразить в RichEdit ты поставил режим, который производит замену некоторых символов. То-есть, если ты после этого сохранишь ту же строку в файл - файлы будут отличаться.
Для бинарного файла это не подходит (разве только для отображения и то необходимость сомнительна).
карма: 26

0
Ответов: 24
Рейтинг: 0
#40: 2015-06-09 13:02:38 ЛС | профиль | цитата
Подавай её сразу на обработку


Ну хорошо, а вот такой вариант, что я не правильно делаю?

Add(MainForm,2953706,182,105)
{
}
Add(FileStream,9833339,362,238)
{
Point(doPosition)
link(onLoad,959701:doConvert,[])
}
Add(ODialog,5357478,313,238)
{
link(onExecute,9833339:doOpen,[])
}
Add(StreamConvertor,959701,404,238)
{
Mode=6
link(onResult,16008610:doPut,[])
}
Add(Button,11226185,264,238)
{
Left=20
Top=70
link(onClick,5357478:doExecute,[])
}
Add(SDialog,3348945,420,140)
{
link(onExecute,6321598:doOpen,[])
}
Add(Button,6180873,376,140)
{
Left=20
Top=150
link(onClick,3348945:doExecute,[])
}
Add(DataToFile,16008610,469,238)
{
Type=5
link(Stream,6321598:Stream,[])
}
Add(FileStream,6321598,469,140)
{
Mode=2
}
карма: 0

0
файлы: 1code_35815.txt [626B] [239]
Ответов: 4630
Рейтинг: 749
#41: 2015-06-09 13:16:37 ЛС | профиль | цитата
Последовательность действий неправильная.
code_35816.txt

Кстати, почитай справку по DataToFile (св-во Type). Перечисленные там режимы пишут строки в файл со всякими добавлениями. То-есть, со стандартным DataToFile невозможно сразу получить идентичный конечный файл.

Можно результат сконвертировать обратно в Stream и сделать FileStream.doCopyFromStream.
Можно извернуться, поставив Type=dtAnsiString и после записи уменьшить размер файла на один байт. Но и этого в стандартной поставке нет.
Можно использовать модифицированный DataToFile
карма: 26

0
файлы: 1code_35816.txt [708B] [331]
Ответов: 24
Рейтинг: 0
#42: 2015-06-09 13:41:48 ЛС | профиль | цитата
Ну вот так пробую, тоже не работает.

code_35817.txt

Можно использовать модифицированный DataToFile
А если использовать модифицированный DataToFile, то какой режим нужно ставить?
карма: 0

0
файлы: 1code_35817.txt [693B] [231]
Ответов: 4630
Рейтинг: 749
#43: 2015-06-09 14:01:14 ЛС | профиль | цитата
Внимательно смотри какие компоненты какие данные выдают. Диалог в поток выдаёт имя файла (а выход с StrToStream теряется). Для doCopyFromStream нужно в потоке передать Stream. Тогда имя файла можно только подать на верхнюю точку, для чего оно сначала сохраняется в Memory.
code_35818.txt
Erik писал(а):
какой режим нужно ставить?
dtLeadingString. Возможно стоит dtStringLen в режиме записи поправить, чтобы не учитывал Count и писал строку целиком...
карма: 26

0
файлы: 1code_35818.txt [959B] [297]
Ответов: 24
Рейтинг: 0
#44: 2015-06-09 14:31:49 ЛС | профиль | цитата
Netspirit, огромное тебе спасибо! Без твоей помощи у меня бы ничего не получилось. Сейчас схемка приобрела вот такой вид.

code_35819.txt

И вот последний момент. В компоненте Replace DestStr у меня стоит 00, поэтому у меня +L заменяется также двумя символами 00, что в HEX 3030, а мне нужно, чтобы +L заменялся в HEX 0000, если я в Replace DestStr никаких символов не указываю, то так тоже не работает, вот это последнее в чём мне нужна помощь.
карма: 0

0
файлы: 1code_35819.txt [2.9KB] [234]
Ответов: 824
Рейтинг: 138
#45: 2015-06-09 14:33:05 ЛС | профиль | цитата
Erik, вот так попробуй
code_35820.txt
карма: 1

0
файлы: 1code_35820.txt [1.7KB] [317]
Сообщение
...
Прикрепленные файлы
(файлы не залиты)