MS Word search strings – търсене на думи в Word файлове

Проста програмка за търсене на думи в MS Word файлове. Програмата е само за 32-bit Windows. Тествана е само под WinXP, но може би ще работи и под други OS.
Писана само за трнировка. Разполага само с базови възможности. Би могло да и се добавят доста повече опции, като рекурсивно преравяне на директории, търсене на кирилица, търсене с регулярни изрази, запазване на резултата в текстов файл и т.н. Към момента ги няма тия дивотии, но ако ми текне музата някой ден може и да я пооправя. Използвал съм 2 езика за програмиране – AutoIt и Perl. Използвах компилатор-пакетера pp, за да компилирам Perl-файла.

Програмата е с отворен код и ако на някой му се занимава, може да си я пипне. Изглежда така:
MS Word Search
Сорс кода:
AutoIt-файла

#include 
#include 
#include 
#include 
#include 
#include 
 
Local $line
 
$Form1 = GUICreate("Search in word files", 621, 473, 192, 124)
$Label2 = GUICtrlCreateLabel("Text to Find", 8, 13, 60, 23)
$Rezult = GUICtrlCreateEdit("", 8, 64, 609, 369)
; GUICtrlSetData(-1, "Edit1")
$String = GUICtrlCreateInput("", 80, 8, 393, 21)
$SelectDir = GUICtrlCreateButton("Select Dir", 8, 32, 65, 25)
$Directory = GUICtrlCreateInput("", 80, 32, 393, 21)
$Search = GUICtrlCreateButton("SEARCH", 480, 8, 137, 49)
$Help = GUICtrlCreateButton("?", 584, 440, 25, 25)
$Label1 = GUICtrlCreateLabel("--==[ Programming by Nedialko Voinigovski ]==--", 8, 448, 444, 17)
GUISetState(@SW_SHOW)
 
While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit
		Case $SelectDir
			_seldir()
		Case $Search
			_search()
		Case $Help
			_help()
	EndSwitch
WEnd
 
 
func _seldir()
	$outfolder = FileSelectFolder("Choose a folder.", "")
	GUICtrlSetData($Directory, $outfolder)
EndFunc
 
func _search()
$command = @comspec & ' /c ws.exe' & ' "' & GUICtrlRead($String) & '"' & ' "' & GUICtrlRead($Directory) & '"'
$cmd = Run($command, @WorkingDir, @SW_HIDE, $STDERR_CHILD + $STDOUT_CHILD)
 
	$line = "Wait ..." & @CRLF
	While 1
		$line &= StdoutRead($cmd)
		If @error <> 0 Then ExitLoop
		Sleep(1000)
		GUICtrlSetData($Rezult, $line)
	WEnd
	$line &= "--------------------------" & @CRLF & "All done!"
	GUICtrlSetData($Rezult, $line)
EndFunc
 
func _help()
	MsgBox(0,"HELP","Програмата е комбинация от езиците за програмиране" &@CRLF& "AutoIt (за графичната част) и Perl (за ровичкането в Word-файловете)." &@CRLF&"Има възможност да се използват PCRE (perl регулярни изрази) за търсене в файловете, но " &@CRLF&"все още липсва добра поддръжка на кирилица."&@CRLF&@CRLF&"За да работи всичко нормално трябва и двете exe-та да са в една директория.")
EndFunc

Perl-файла, който върши съществената работа:

use Win32::OLE;
use Win32::OLE::Enum;
use Cwd 'abs_path';
 
$dir = $ARGV[1]; chdir $dir;
@files = <*.doc *.docx>;
$find = $ARGV[0];
 
 
 
foreach $file (@files) {
	$doc = Win32::OLE -> GetObject(abs_path($file));
	open (FH,">jgfd75w43589azwq210");
 
	$paragraphs = $doc->Paragraphs();
	$enumerate = new Win32::OLE::Enum($paragraphs);
	while(defined($paragraph = $enumerate->Next())){
		$text = $paragraph->{Range}->{Text};
		print FH "$text\n";
	}
	$doc->Close;
	close FH;
 
	open (FH,"<jgfd75w43589azwq210");
	while ($line = ) {
		if($line =~ m/$find/i){
			print "$find\t-->\t$ARGV[1]\\$file\n";
			last;
		}
	}
	close FH;
	unlink("jgfd75w43589azwq210");
}

Пакетите за Perl, които ми бяха необходими за компилирането:

gcc environment - 3.4.5 (mingw-vista special r3)
PAR Packager, version 1.009 (PAR version 1.002)

Компилирането на Perl стана елементарно. Просто написах в промпта:

pp search_in_word.pl

Програмата може да се изтегли от тук: MS Word Search

Share and Enjoy !

Shares

2 thoughts on “MS Word search strings – търсене на думи в Word файлове

  1. Здравейте,
    видях вашия сайт и нещата тук ме грабнаха!
    Аз също се интересувам и занимавам с програмиране и други неща, но в някои от тях съм начинаещ.
    Хареса ми програмката Ви за запазване на съобщенита във Viber.
    Във връзка с това имам една молба:
    Тъй като аз съм човек с намалено зрение и трудно виждам дребните и мъгляви букви във Viber искам да попитам има ли начин темите в него да бъдат сменени (като шрифт, големина, цвят и др), ако не по нормалния начин чрез интерфейса на програмата то в папката й?
    Виждам че там има разни файлове viber.db и други, но не откривам xml или json файл където те да са записани. Ако има начин, ще Ви бъда благодарен ако ми пишете.
    Извинявам се, че пиша писмо чрез формата за отговор, но никъде не видях Ваши данни за контакт (а може и да съм ги пропуснал, поради моето намалено зрение).
    Благодаря предварително!
    Илия

    • Хммм.. Явно никой не може да ми даде отговор. благодаря за вниманието все пак!
      Останете със здраве!

Leave a Reply

Your email address will not be published. Required fields are marked *

*