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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 23.06.2010, 12:27   #1
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию Поиск строк по маскам

Из базы данных (баз данных) выгружается инфа в текстовые файлы примерно такого вида:

Цитата:
2301|3|2008/11/01|08_14_09|2002.10.30/00294/out_txt.txt
2401|3|2008/11/01|08_14_09|2002.10.30/00287/out_txt.txt
2501|3|2008/11/01|08_14_09|2002.10.30/00297/out_txt.txt
2901|3|2008/11/01|08_14_09|2002.10.30/00284/out_txt.txt
3001|3|2008/11/01|08_14_09|2002.10.30/00295/out_txt.txt
2901|3|2008/11/01|08_14_09|2002.10.30/00111/out_sql.sql
3001|3|2008/11/01|08_14_09|2002.10.30/00112/out_sql.sql
3098|3|2008/11/01|08_14_09|2002.10.30/00280/out_txt.txt
0011|3|2008/11/01|08_14_09|2002.10.30/00286/out_txt.txt
4001|3|2008/11/01|10_14_09|2002.10.30/00295/inp_txt.txt
2901|3|2008/11/01|10_14_09|2002.10.30/00111/out_sql.sql
4001|3|2008/11/01|10_14_09|2002.10.30/00112/out_sql.sql
4098|3|2008/11/01|10_14_09|2002.10.30/00280/inp_txt.txt
1011|3|2008/11/01|10_14_09|2002.10.30/00286/inp_txt.txt
Их много (тысячи их).
Далее мне в разных колонках этих файлов надо искать соответствие содержимого полей определённым маскам.
Маска может содержать:
* - любое количество любых символов
? - обязательное наличие одного любого символа
[] - один любой символ из тех, которые в скобочках, например [abc], или [a-c].

Специально для поиска по шаблону написана функция. Есть серьёзные подозрения, что работает она иногда неправильно.
Если кто уделит время и ткнёт меня носом в каких случаях она бажит, то однозначно получит + в репу (если конечно форум мне разрешит)

Для тестов выкладываю утилитку на её базе.
Вызов:
findMask.exe имя_файла номер_поля маска_поиска
Если она найдёт соответствия, то выведет совпавшие поля на консоль и в файл out.txt

Код:
strcmpmask	proc uses ebx edi esi, InpStringEXT:DWORD, InpMaskEXT:DWORD

	LOCAL	TempShift:DWORD
	LOCAL	TempShift2:DWORD

	mov	[TempShift], 0
	mov	[TempShift2], 0
	mov	esi, [InpMaskEXT]
	mov	edi, [InpStringEXT]

strcmpmask1:
	mov	al, byte ptr [esi]
	cmp	al, 0
	je	strcmpmask_yes
	cmp	al, '*'
	jne	strcmpmask2
	mov	[TempShift], 0
	mov	[TempShift2], 0
	inc	esi
	jmp	strcmpmask1
strcmpmask2:

	mov	al, byte ptr [edi]
	cmp	al, 0
	je	strcmpmask_no

	mov	al, byte ptr [esi]
	mov	cl, byte ptr [edi]
	cmp	al, cl
	je	strcmpmask4
	cmp	al, 0
	je	strcmpmask_yes
	cmp	cl, 0
	je	strcmpmask_no
	cmp	al, '?'
	je	strcmpmask4
	cmp	al, '['
	je	strcmpmask6
strcmpmask10:
	sub	esi, [TempShift]
	cmp	[TempShift], 0
	je	strcmpmask5
	mov	[TempShift], 0
	sub	esi, [TempShift2]
	mov	[TempShift2], 0
	jmp	strcmpmask1

strcmpmask5:
	inc	edi
	sub	esi, [TempShift2]
	mov	[TempShift2], 0
	jmp	strcmpmask1

strcmpmask4:
	cmp	al, 0
	je	strcmpmask_yes
	cmp	cl, 0
	je	strcmpmask_no
	inc	esi
	inc	edi
	inc	[TempShift]
	jmp	strcmpmask1

strcmpmask6:
	inc	esi
	inc	[TempShift2]
strcmpmask8:
	mov	al, byte ptr [esi]
	cmp	al, ']'
	je	strcmpmask10
	cmp	al, '-'
	je	strcmpmask11
	cmp	cl, al
	je	strcmpmask9
strcmpmask12:
	inc	esi
	inc	[TempShift2]
	jmp	strcmpmask8

strcmpmask11:
	inc	esi
	inc	[TempShift2]
	mov	dl, byte ptr [esi]
	mov	al, byte ptr [esi-2]
strcmpmask13:
	cmp	al, dl
	jnle	strcmpmask12
	cmp	cl, al
	je	strcmpmask9
	inc	al
	jmp	strcmpmask13

strcmpmask9:
	mov	al, byte ptr [esi]
	cmp	al, ']'
	je	strcmpmask4
	inc	esi
	inc	[TempShift2]
	jmp	strcmpmask9

strcmpmask_yes:
	mov	eax, 0
	ret
strcmpmask_no:
	mov	eax, -1
	ret
strcmpmask	endp
Вложения
Тип файла: rar findMask.rar (2.0 Кб, 14 просмотров)
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Старый 23.06.2010, 14:25   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

я вечерком поиграюсь обязательно.
а пока несколько вопросов.

А почему, собственно на ассемблере? чем языки выского уровня провинились?

А почему не написать простенький скрипт на AWK ?
Serge_Bliznykov вне форума Ответить с цитированием
Старый 23.06.2010, 20:38   #3
Ulex
Непрофессионал
Участник клуба
 
Аватар для Ulex
 
Регистрация: 01.01.2008
Сообщений: 1,405
По умолчанию

Цитата:
А почему, собственно на ассемблере? чем языки выского уровня провинились?
Ну, скорее всего я ещё не дорос до языков высокого уровня. Они слишком презрительно ко мне относятся со своей высокой высоты.

Цитата:
А почему не написать простенький скрипт на AWK ?
Сколь мощен красив и органичен AWK (nawk) на nix_ах, столь же бездарен и убог он на одре WIN32, ибо сказано, не юзай shell и отроков его в суе.
И чем больше я узнавал людей, тем больше мне нравились компьютеры.
------------------------------------
Страничка с моими программками http://ulex-masm.ru
Ulex вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск одинаковых строк Demitriy Microsoft Office Excel 45 26.07.2010 08:50
Поиск высоты строк beda Microsoft Office Word 1 18.06.2010 14:57
Поиск и вывод строк из файла samCS PHP 8 10.03.2010 04:07
Поиск строк в файле (паскаль) Sarumjan Помощь студентам 2 07.12.2008 23:15
Поиск одинаковых строк в файле ATL Помощь студентам 13 02.05.2007 01:05