Что нового

Подсчет количества слов в документе txt

Snegovik

Чайник
Сообщения
31
Репутация
0
Версия AutoIt: 3.3.14.2

Описание:
Доброго дня.
Столкнулся с проблемой - нужно скриптом посчитать количество определенных слов в текстовом документе txt.
Документ называется C:\1\документ с данными.txt
Слово, которое сейчас ищется - "текст 4".

Но для этого нужен какой-то интерфейс в которое нужно ввести слово, количество которых нужно подсчитать.
И интерфейс вывода результата, где отобразится число (количество слов).

Как это сделать скриптом ?

Примечания:
 

Вложения

ra4o

Скриптер
Сообщения
978
Репутация
180
Можно так:
Код:
#include <GUIConstants.au3>

$hMain = GUICreate("", 500, 100)
$String=GUICtrlCreateInput('',10,10,200,15)
$Button=GUICtrlCreateButton('Найти',10,35,100,20)
$Result=GUICtrlCreateLabel('',10,65,480,15)

GUISetState(@SW_SHOW)

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
		Case $Button
			_Search(GuiCtrlRead($String))
	EndSwitch
WEnd

Func _Search($SearchString)
	$Text=FileRead(@ScriptDir&'\документ с данными.txt')
	$aResult=StringRegExp($Text,$SearchString,3)
	If IsArray($aResult) Then
		GUICtrlSetData($Result,'Найдено совпадений - '&Ubound($aResult))
	Else
		GUICtrlSetData($Result,'Совпадений не найдено !')
	EndIf

EndFunc
 

Tempo

Скриптер
Сообщения
447
Репутация
115
Или так
Код:
;~ AutoIt Version: 3.3.14.5
#include <GUIConstants.au3>
#include <FileConstants.au3>
#include <MsgBoxConstants.au3>
#include <StringConstants.au3>

Global Const $INI_FILE = @ScriptDir & "\" & StringLeft(@ScriptName, StringInStr(@ScriptName, ".", 0, -1)) & "ini"
Global Const $HISTORY_AMOUNT = 10
Global Enum $HISTORY_COUNT, $HISTORY_START
Global Const $HISTORY_MAX = $HISTORY_START + $HISTORY_AMOUNT
Global $g_sFile, $g_idCmbWord, $g_idChbRegExp, $g_idChbCaseSence, $g_aHistory[$HISTORY_MAX]
_MyGUI_Start()

Func _MyGUI_Start()
	Local Const $DEFTEXT = "Очистить историю - ПКМ"
	Local $hGUI = GUICreate("Подсчет слов", 400, 140)

	$g_sFile = IniRead($INI_FILE, "Input", "File", "")
	GUICtrlCreateLabel("Файл:", 10, 10, 40, 20, $SS_CENTERIMAGE)
	Local $idInpFile = GUICtrlCreateInput($g_sFile, 50, 10, 230, 20, BitOR($GUI_SS_DEFAULT_INPUT, $ES_READONLY))
	Local $idBtnOpen = GUICtrlCreateButton("Обзор", 290, 10, 100, 20)

	GUICtrlCreateLabel("Слово:", 10, 40, 40, 20, $SS_CENTERIMAGE)
	$g_idCmbWord = GUICtrlCreateCombo("", 50, 40, 230, 20)
	GUICtrlSetData(-1, _LoadHistory(), $g_aHistory[$HISTORY_START])
	Local $idBtnCalc = GUICtrlCreateButton("Подсчитать", 290, 40, 100, 20)
	GUICtrlSetState(-1, $GUI_DEFBUTTON)

	Local $idLblCnt = GUICtrlCreateLabel($DEFTEXT, 10, 70, 380, 30, BitOR($WS_BORDER, $SS_CENTER, $SS_CENTERIMAGE))
	GUICtrlSetColor(-1, 0x0000FF)
	Local $idMnItClear = GUICtrlCreateMenuItem("Очистить историю", GUICtrlCreateContextMenu($idLblCnt))

	GUICtrlCreateLabel("", 10, 110, 0, 20, $SS_ETCHEDVERT)
	$g_idChbRegExp = GUICtrlCreateCheckbox("Регулярные выражения", 20, 110, 170, 20)
	GUICtrlSetState(-1, Number(IniRead($INI_FILE, "Settings", "RegExp", "")))

	GUICtrlCreateLabel("", 200, 110, 0, 20, $SS_ETCHEDVERT)
	$g_idChbCaseSence = GUICtrlCreateCheckbox("Учитывать регистр", 210, 110, 170, 20)
	GUICtrlSetState(-1, Number(IniRead($INI_FILE, "Settings", "CaseSense", "")))
	GUISetState()
	OnAutoItExitRegister("_MyGUI_SaveInput")

	Local $sFile, $sWord, $aRegExp
	While 1
		Switch GUIGetMsg()
			Case $GUI_EVENT_NONE
				ContinueLoop
			Case $GUI_EVENT_CLOSE
				ExitLoop
			Case $idBtnOpen
				$sFile = FileOpenDialog("", "", "Все (*.*)", $FD_FILEMUSTEXIST, $g_sFile, $hGUI)
				If Not @error Then
					$g_sFile = $sFile
					GUICtrlSetData($idInpFile, $g_sFile)
					GUICtrlSetData($idLblCnt, $DEFTEXT)
					GUICtrlSetState($idBtnCalc, $GUI_ENABLE)
				EndIf
			Case $idBtnCalc
				If Not FileExists($g_sFile) Then
					MsgBox($MB_TOPMOST + $MB_ICONERROR, Default, "Файл не существует!", 0, $hGUI)
					GUICtrlSetData($idLblCnt, $DEFTEXT)
					ContinueLoop
				EndIf
				$sWord = GUICtrlRead($g_idCmbWord)
				_MyGUI_UpdateCombo($sWord)
				If BitAND(GUICtrlRead($g_idChbRegExp), $GUI_UNCHECKED) Then $sWord = "\Q" & $sWord & "\E"
				If BitAND(GUICtrlRead($g_idChbCaseSence), $GUI_UNCHECKED) Then $sWord = "(?i)" & $sWord
				$aRegExp = StringRegExp(FileRead($g_sFile), $sWord, $STR_REGEXPARRAYGLOBALMATCH)
				GUICtrlSetData($idLblCnt, "Кол-во совпадений: " & (@error ? 0 : UBound($aRegExp)))
			Case $idMnItClear
				Dim $g_aHistory[$HISTORY_MAX]
				GUICtrlSetData($g_idCmbWord, "")
		EndSwitch
	WEnd
EndFunc   ;==>_MyGUI_Start

Func _MyGUI_UpdateCombo($sWord)
	If Not $sWord Then Return
	Local $iIndex = -1, $sTemp
	For $i = $HISTORY_START To $g_aHistory[$HISTORY_COUNT]
		If $sWord = $g_aHistory[$i] Then
			$iIndex = $i
			ExitLoop
		EndIf
	Next
	If $iIndex = -1 Then
		$g_aHistory[$HISTORY_COUNT] += 1
		If $g_aHistory[$HISTORY_COUNT] >= $HISTORY_MAX Then $g_aHistory[$HISTORY_COUNT] = $HISTORY_MAX - 1
		For $i = $g_aHistory[$HISTORY_COUNT] To $HISTORY_START + 1 Step -1
			$g_aHistory[$i] = $g_aHistory[$i - 1]
		Next
		$g_aHistory[$HISTORY_START] = $sWord
	Else
		$g_aHistory[$iIndex] = $sWord
		For $i = $iIndex To $HISTORY_START + 1 Step -1
			$sTemp = $g_aHistory[$i]
			$g_aHistory[$i] = $g_aHistory[$i - 1]
			$g_aHistory[$i - 1] = $sTemp
		Next
	EndIf
	Local $sWords, $sDelim = Opt("GUIDataSeparatorChar")
	For $i = $HISTORY_START To $g_aHistory[$HISTORY_COUNT]
		$sWords &= $sDelim & $g_aHistory[$i]
	Next
	GUICtrlSetData($g_idCmbWord, $sWords, $sWord)
EndFunc   ;==>_MyGUI_UpdateCombo

Func _MyGUI_SaveInput()
	IniWrite($INI_FILE, "Input", "File", $g_sFile)
	IniWrite($INI_FILE, "Settings", "RegExp", GUICtrlRead($g_idChbRegExp))
	IniWrite($INI_FILE, "Settings", "CaseSense", GUICtrlRead($g_idChbCaseSence))
	IniWrite($INI_FILE, "History", "Count", $g_aHistory[$HISTORY_COUNT])
	For $i = $HISTORY_START To $g_aHistory[$HISTORY_COUNT]
		IniWrite($INI_FILE, "History", $i, $g_aHistory[$i])
	Next
EndFunc   ;==>_MyGUI_SaveInput

Func _LoadHistory()
	Local $sWords, $sDelim = Opt("GUIDataSeparatorChar")
	$g_aHistory[$HISTORY_COUNT] = Int(IniRead($INI_FILE, "History", "Count", ""))
	If $g_aHistory[$HISTORY_COUNT] Then
		If $g_aHistory[$HISTORY_COUNT] >= $HISTORY_MAX Then $g_aHistory[$HISTORY_COUNT] = $HISTORY_MAX - 1
		For $i = $HISTORY_START To $g_aHistory[$HISTORY_COUNT]
			$g_aHistory[$i] = IniRead($INI_FILE, "History", $i, $g_aHistory[$i])
			$sWords &= $sDelim & $g_aHistory[$i]
		Next
	EndIf
	Return $sWords
EndFunc   ;==>_LoadHistory
 
АТ
S

Snegovik

Чайник
Сообщения
31
Репутация
0
Понятно. Спасибо за помощь.
 
Верх