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

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

Вернуться   Форум программистов > Низкоуровневое программирование > Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.01.2009, 22:25   #1
Black_Ak24
Пользователь
 
Регистрация: 02.01.2008
Сообщений: 21
По умолчанию Поиск строки в текстовом файле

столкнулся с такой проблемой:
создал я допустим текстовый файл; заполнил его текстом; после этого ввёл строку, которую нужно найти в этом файле и... не знаю как реализовать поиск этой строки в этом файле, а затем (если это строка существует) заменить её на другую строку
догадываюсь, что нужно использовать функцию 42h (прямой доступ к файлу), но как это реализовать программно, а затем еще заменить эту строку на другую строку (возможно стереть найденную строку, а затем записать указанную; или через переменные и регистры с помощью команд LODS, STOS, MOVS) - к сожалению не знаю
искал в инете, в разных FAQ-ах, в книжке, но кроме поиска САМИХ ФАЙЛОВ в каталоге ничего не нашел (возможно плохо искал, не ругайте если что )
прошу помощи, буду рад каждому совету (а еще лучше самой реализации этих оперций )

P/S так как я не знаю, есть ли различия в реализации этого метода на FASM, MASM, TASM, NASM, то скажу сразу, что меня интересует в первую очередь TASM
сразу говорю спасибо, если Вы решили помочь
Black_Ak24 вне форума Ответить с цитированием
Старый 24.01.2009, 00:04   #2
Advisor
Пользователь
 
Регистрация: 07.12.2008
Сообщений: 18
По умолчанию

Держи блок сравнения, вставишь смещения в SI и DI

Код:
;ФУНКЦИЯ "СРАВНЕНИЕ ДАМПА"	ПОЛУЧАЕТ SI: ЧТО, DI: С ЧЕМ, CX: СКОЛЬКО БАЙТ. ВОЗВРАЩАЕТ AH=[SI], AL=[DI],ЕСЛИ РАВНЫ: CX=0000.
;0E	3 REG AX,DI,SI	+CX,+DI,+SI

MOV	AH,[SI]
MOV	AL,[DI]
CMP	AH,AL
DW 0174
RET
INC	SI
INC	DI	;LOOP    0100
DW	F3E2
RET

8A 24 8A 05 38 C4 74 01 C3 46 47 E2 F3 C3

Последний раз редактировалось rpy3uH; 25.01.2009 в 15:50.
Advisor вне форума Ответить с цитированием
Старый 24.01.2009, 13:59   #3
airyashov
Форумчанин
 
Регистрация: 02.04.2008
Сообщений: 358
По умолчанию

строки одинаковы? или может быть поразному?
icq:3(один)7748666
mail:airyashov(a)inbox.ru
пишите помогу недорого
неплохо пишу на ассемблере для 80х86
icq: 3(один)7748666
mail: airyashov(а)inbox.ru
airyashov вне форума Ответить с цитированием
Старый 24.01.2009, 14:50   #4
Black_Ak24
Пользователь
 
Регистрация: 02.01.2008
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Advisor Посмотреть сообщение
Держи блок сравнения, вставишь смещения в SI и DI

;ФУНКЦИЯ "СРАВНЕНИЕ ДАМПА" ПОЛУЧАЕТ SI: ЧТО, DI: С ЧЕМ, CX: СКОЛЬКО БАЙТ. ВОЗВРАЩАЕТ AH=[SI], AL=[DI],ЕСЛИ РАВНЫ: CX=0000.
;0E 3 REG AX,DI,SI +CX,+DI,+SI

MOV AH,[SI]
MOV AL,[DI]
CMP AH,AL
DW 0174
RET
INC SI
INC DI ;LOOP 0100
DW F3E2
RET

8A 24 8A 05 38 C4 74 01 C3 46 47 E2 F3 C3
спасибо
попробую, не подскажешь что такое DW 0174 и DW F3E2?
этот код предназначен для сравнения последовательно каждого символа первой строки с каждым символом второй строки?
Black_Ak24 вне форума Ответить с цитированием
Старый 24.01.2009, 14:56   #5
Black_Ak24
Пользователь
 
Регистрация: 02.01.2008
Сообщений: 21
По умолчанию

Цитата:
Сообщение от airyashov Посмотреть сообщение
строки одинаковы? или может быть поразному?
icq:3(один)7748666
mail:airyashov(a)inbox.ru
пишите помогу недорого
ну строки должны совпадать, так как после полного совпадения исходная строка (та, что уже записана в файле) должна быть заменена на другую, и эта другая должна быть записана на её месте
а чем там собственно помогать за деньги?, я не лентяй и программу могу написать сам, но мне неизвестно с помощью чего можно искать строку в файле, а затем заменить её
Black_Ak24 вне форума Ответить с цитированием
Старый 24.01.2009, 19:23   #6
Advisor
Пользователь
 
Регистрация: 07.12.2008
Сообщений: 18
По умолчанию

Цитата:
Сообщение от Black_Ak24 Посмотреть сообщение
спасибо
попробую, не подскажешь что такое DW 0174 и DW F3E2?
этот код предназначен для сравнения последовательно каждого символа первой строки с каждым символом второй строки?
DW 0174 это машинный эквивалент jz +01 байт от конца jz.
DW F3E2 это машинный эквивалент loop -0D байт от конца loop.
Верно, если равны: cx будет 0000, нет: (изн. cx)-(кон сx)=(номер не совпавших элементов).
Advisor вне форума Ответить с цитированием
Старый 24.01.2009, 20:30   #7
Black_Ak24
Пользователь
 
Регистрация: 02.01.2008
Сообщений: 21
По умолчанию

Цитата:
Сообщение от Advisor Посмотреть сообщение
DW 0174 это машинный эквивалент jz +01 байт от конца jz.
DW F3E2 это машинный эквивалент loop -0D байт от конца loop.
Верно, если равны: cx будет 0000, нет: (изн. cx)-(кон сx)=(номер не совпавших элементов).
буду знать
а как мне это к началу файла присобачить?
установить указатель на начало файла, затем загружать каждую строку текста в SI и сравнивать с указаной строкой в DI? и организовать поиск от начала до конца файла с помощью цикла, функцию которого будет исполнять команда rep?
Black_Ak24 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск в текстовом файле! Straiker Паскаль, Turbo Pascal, PascalABC.NET 2 18.01.2009 10:07
Поиск в текстовом файле KaimaS Общие вопросы C/C++ 0 12.11.2008 17:39
Поиск символов в текстовом файле. Uomo Общие вопросы Delphi 8 24.10.2007 15:57