Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум на Исходниках.RU > Assembler > Замена строки в файле


Автор: semiono 31.08.10, 22:06
Тема явно не для начинающих, поэтому прошу помощи.
Вот очень хорошие примеры Поиск строки с использование SCAS
Только хотелось бы модифицировать, чтобы данные были во внешнем файле, а это за собою повлечёт
функции CreateFile() CloseFile() итп. со многими условностями и особенностями.

Кстати, для загрузки строк есть "fscanf from 'MSVCRT.DLL'", хотелось бы тоже примеров.

В худшем случае покажите на masm32 примеры, только не на C++ :)

Автор: AndNot 01.09.10, 21:31
Непонятно, что смущает в использовании CreateFile? Для поиска файл даже не нужно разбивать на строки, все равно каждая строка разделена символами перевода строки и возврата каретки.

Автор: semiono 02.09.10, 07:55
Нет, ничего не смущает. Это я к слову сказал. Какраз создать файл я могу, а вот дальше затрудняюсь

Автор: leo 02.09.10, 08:13
Цитата semiono @
Какраз создать файл я могу, а вот дальше затрудняюсь

- GetFileSize, HeapAlloc, ReadFile
- поиск
- HeapFree, CloseHandle

Добавлено
PS: Вопросы по фасму или ВинАПИ ?

Автор: semiono 02.09.10, 12:51
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    include '%fasm%\win32ax.inc'
    section '.code' executable
    start:
            invoke CreateFile,lpFile,GENERIC_WRITE,FILE_SHARE_WRITE,NULL,CREATE_ALWAYS,FILE_ATTRIBUTE_ARCHIVE,NULL
            mov [hFile],eax
            invoke SetFilePointer,[hFile],0x7,NULL,NULL
            invoke WriteFile,[hFile],zz,1,SizeWrite,NULL
            invoke CloseHandle,[hFile]
    section '.data' readable
            zz db a9
    section '.data' readable writable
            hFile dd ?
            hWnd dd ?
            SizeWrite dw ?

Всё больше ничего я не могу :)

HeapAlloc - hHeap [in] This handle is returned by the HeapCreate or GetProcessHeap function.
ещё и надо хип создавать?
Тут http://www.wasm.ru/article.php?article=1001012 вроде бы написано об этом, но всё смешанно
с оконными контролами в которые я пока не хочу вникать. Вообще эти уроки с окнами вечно мешаются в суть дела вникать.

Цитата
- поиск

Видимо вопрос и по асму, так как думать трудно самостоятельно. :D :blush:

Кстати, мой пример и без кучи работает, или при поиске это необходимо? Работа с блоками памяти меня вообще пугает. ))

Автор: leo 02.09.10, 13:12
Вопросы нужно четче задавать. В #1 ты ссылаешься на пример поиска строки, откуда можно сделать вывод, что тебе сначала нужно прочитать файл, найти строку и только потом ее заменить. А в #5 ты просто что-то записываешь в файл по фикс.смещению без всякого поиска - ес-но тут никакой буфер для чтения и соотв-но HeapAlloc не нужны...

Автор: AndNot 02.09.10, 13:14
При старте программы винда сама выделяет немного кучи, поэтому вполне хватит GetProcessHeap. Полученный хендл можно использовать в HeapAlloc, HeapReAlloc и HeapFree. И все что тут нужно знать - это то, что HeapAlloc не может выделить более 7fffffffh памяти за раз. Возвращаемый ей адрес блока памяти уже залочен и сразу же пригоден для использования. Все легко и просто.

В общем, если не хочешь создавать нормальный менеджер памяти, то память выделять можно и так:
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}>
    mptr = HeapAlloc(GetProcessHeap,.....

Автор: semiono 02.09.10, 19:34
Кстати, а нету чего нибудь из апи похожего на WritePrivateProfileString() для xml?
Так как это модный формат, интересно чем приложения пишут свои конфиги в xml?
Или они обычно парсят файл, хотя это и неудобно? Раз уж есть формат значит должно быть что-то удобное.
Прога Cubase4 вместо реестра всё хранит в xml конфиге.

Автор: AndNot 02.09.10, 23:10
API нет. Скорее всего есть готовые сторонние либы. Но, поскольку для тебя MASM и TASM являются отстоем, то ничем помочь не могу, я просто не в курсе как в фасме подключать модули от Си, Дельфи и прочих. В "отстойных" это делается элементарно, благо они умеют работать с LIB и OBJ файлами.
Если не секрет, то чем INI-файлы не устраивают?

Автор: semiono 03.09.10, 16:16
:D Неправда, я даже тасм уважаю! Просто мне как новичку некомфортно, да и в фасм мне так же,
инфы мало продвигаюсь муравьиными шагами. Просто в фасм нету обжектников и вообще комманд строка не нужна,
сразу готовый файл. Я даже не знаю зачем obj нужны, я сам начинал прежде кампилить на тасм, потом линкер
подключал, но смысл я так и не понял зачем линковать вручную. Наверное так в дебаггере что-то там изучать легче на неком этапе сборки. Почемуж, AndNot, подскажи на тасм? Или на масм! Может я и разберусь.

Автор: AndNot 03.09.10, 20:04
Есть два решения:
1. Скачать любой сишный парсер, коих навалом и с исходниками. Компильнуть и подключить получившийся LIB-файл к своему. Правда придется попотеть, но зато код будет включен в программу и можно выбрать либу по потребностям.
2. Скачать DLL. Тут особо мучиться не придется, вызовы подпрограмм стандартизированы и автономность либы гарантирована, но DLL еще придется поискать, их не очень много.
Выбирай что больше нравится. Либ полно, например здесь.

Выбор за тобой ;) Но, ИМХО, гемор это все, лучше уж "структурированным" INI обойтись, дешево и сердито, а для большинства задач более чем достаточно.

Автор: semiono 03.09.10, 21:13
Я читал вот это ещё до того как здесь тему начал - Регулярные выражения,
что-то весьма интересное, но надо набраться сил и терпения это всё переварить.


Цитата AndNot @
лучше уж "структурированным" INI обойтись

Мне нужно здалать загрузчик-запускатель программы с предварительным изменением конфигурации.
А тут уже у кого как устроенно, кто в реестре хранит, кто в ini, а кто и в xml.
Затея не сложная, чаще всего надо указать размеры окна SM_CXSCREEN, SM_CYSCREEN, а иногда
сбросить fullscreen. :) Заодно и ассемблер поизучать.
Первая преграда была, когда встретился SciTE конфиг по типу ini-файла, но без секции []
при помощи AutoIt3 эта проблемма решилась. Но меня в сторону асм всёравно тянет.

Автор: AndNot 05.09.10, 14:44
Сдается мне, что изучать асм через парсер xml не самая лучшая затея :) А INI-файлы тем и хороши, что легко редактируются ручками, особенно при тестировании программы. К тому же есть аналогичные реализации и под другие ОС, под один только ДОС их было вагон и тележка. Т.е. формат "кроссплатформенный".

Powered by Invision Power Board (https://www.invisionboard.com)
© Invision Power Services (https://www.invisionpower.com)