Что нового

Правильный подсчет букв (не получается реализовать)

The Dream

Новичок
Сообщения
393
Репутация
3
Ребята, пожалуйста помогите.. Вот пример. Но считает постоянно не правильно буквы! Нужно только буквы и не более!
Код:
#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.8.1
 Author:         myName

 Script Function:
	Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here
#include <Constants.au3>
#include <ie.au3>
#include <file.au3>
#include <timers.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIEdit.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <Crypt.au3>
#include <EditConstants.au3>
#include <GuiListBox.au3>
#include <GuiConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIComboBoxEx.au3>
#include <ListboxConstants.au3>
#include <GuiListView.au3>
#include <GuiTab.au3>
#include <WinAPIEx.au3>


$iA = @DesktopWidth
$iB = (@DesktopHeight/2)-20

$hGui = GUICreate('',$iA,$iB,0,$iB-20)
$hEdit = GUICtrlCreateEdit('' ,0,0,$iA,$iB+18,  $ES_AUTOVSCROLL + $WS_VSCROLL + $ES_NOHIDESEL + $ES_WANTRETURN)


GUICtrlSetFont($hEdit,14,400,1,'Palatino Linotype')

GUISetState(@SW_SHOW,$hGui)

While 1
	$sText = GUICtrlRead($hEdit)

     $iLen = StringLen(StringReplace(StringReplace($sText,' ', ''),@CRLF, ''))

	WinSetTitle($hGui,'','Букв: ' & $iLen)
	Sleep(1000)

WEnd
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
Код:
; ...
$iLen = Number(StringLen(StringRegExpReplace(GUICtrlRead($hEdit), '(.*?)([a-zA-Z]+)?', '$2')))
$iNum = Number(StringRegExpReplace(WinGetTitle('[CLASS:AutoIt v3 GUI]'), '(.*?)Букв:\s(\d+)?', '$2'))

If $iNum <> $iLen Then
	WinSetTitle($hGui,'','Букв: ' & $iLen)
EndIf
; ...
 
Автор
T

The Dream

Новичок
Сообщения
393
Репутация
3
Garrett

Вообще не работает:

Код:
#cs ----------------------------------------------------------------------------

 AutoIt Version: 3.3.8.1
 Author:         myName

 Script Function:
	Template AutoIt script.

#ce ----------------------------------------------------------------------------

; Script Start - Add your code below here
#include <Constants.au3>
#include <ie.au3>
#include <file.au3>
#include <timers.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <GUIEdit.au3>
#include <WindowsConstants.au3>
#include <ButtonConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <Crypt.au3>
#include <EditConstants.au3>
#include <GuiListBox.au3>
#include <GuiConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
#include <GUIComboBoxEx.au3>
#include <ListboxConstants.au3>
#include <GuiListView.au3>
#include <GuiTab.au3>
#include <WinAPIEx.au3>


$iA = @DesktopWidth
$iB = (@DesktopHeight/2)-64

$hGui = GUICreate('',$iA-6,$iB,0,$iB+64+10)
$hEdit = GUICtrlCreateEdit('' ,0,0,$iA-6,$iB+18,  $ES_AUTOVSCROLL + $WS_VSCROLL + $ES_NOHIDESEL + $ES_WANTRETURN)
$sZen = InputBox("Сколько?", "Требуемое количество символов:", "",'',300,100)

GUICtrlSetFont($hEdit,14,400,1,'Palatino Linotype')

GUISetState(@SW_SHOW,$hGui)

While 1

$iLen = Number(StringLen(StringRegExpReplace(GUICtrlRead($hEdit), '(.*?)([a-zA-Z]+)?', '$2')))
$iNum = Number(StringRegExpReplace(WinGetTitle('[CLASS:AutoIt v3 GUI]'), '(.*?)Букв:\s(\d+)?', '$2'))

If $iNum <> $iLen Then
    WinSetTitle($hGui,'','Букв: ' & $iLen & ' / ' & $sZen)
EndIf


WEnd
 

Garrett

Модератор
Локальный модератор
Сообщения
3,999
Репутация
967
The Dream [?]
Вообще не работает:
У меня всё работает, хотя RegExp немного можно изменить, потому как паттерн выше не очень удачный.

Код:
$iLen = Number(StringLen(StringRegExpReplace(GUICtrlRead($hEdit), '[^a-zA-Z]', '$2')))
 
Автор
T

The Dream

Новичок
Сообщения
393
Репутация
3
Ничего не понимаю, почему же тогда я когда ввожу текст (набираю руками) - то ничего не происходит????

Спасибо за видео, приятно.
У меня windows xp. Может в этом дело? Если бы я мог, я бы снял видео..


Добавлено:
Сообщение автоматически объединено:

joiner, Ваш пример тоже не работает. Очень интересно, почему же..?

Может потому что 3.3.9.4 у меня стоит?


Добавлено:
Сообщение автоматически объединено:

Поставил 3.3.8.1 - тоже самое.
Я в шоке.
 

madmasles

Модератор
Глобальный модератор
Сообщения
7,790
Репутация
2,322
The Dream,
ИМХО, не нужно постоянно читать $hEdit, можно использовать WM_COMMAND, чтобы отследить изменения. Посмотрите пример к функции
Код:
_GUICtrlEdit_Create()

Еще вариант.
Код:
$sText = '123$asd123'
StringRegExpReplace($sText, '[^a-zA-Z]', '')
ConsoleWrite('Not a-zA-Z --> num = ' & @extended & @LF)
StringRegExpReplace($sText, '[a-zA-Z]', '')
ConsoleWrite('a-zA-Z --> num = ' & @extended & @LF)

Код:
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>
#include <WindowsConstants.au3>

Global $hGui, $nEdit, $nLabel

$hGui = GUICreate('Test', 200, 200)
$nEdit = GUICtrlCreateEdit('', 50, 20, 100, 20)
$nLabel = GUICtrlCreateLabel('', 100, 50, 50, 20)
GUISetState()
GUIRegisterMsg($WM_COMMAND, '_WM_COMMAND')

While 1
	Switch GUIGetMsg()
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd

Func _WM_COMMAND($h_Wnd, $i_Msg, $iw_Param, $il_Param)
	#forceref $h_Wnd, $i_Msg, $il_Param
	Local $i_IDFrom = BitAND($iw_Param, 0xFFFF), $i_Code = BitShift($iw_Param, 16)

	Switch $i_IDFrom
		Case $nEdit
			Switch $i_Code
				Case $EN_CHANGE
					StringRegExpReplace(GUICtrlRead($nEdit), '[a-zA-Z]', '')
					;StringRegExpReplace(GUICtrlRead($nEdit), '[[:alpha:]]', '')
					GUICtrlSetData($nLabel, @extended)
			EndSwitch
	EndSwitch
	Return $GUI_RUNDEFMSG
EndFunc   ;==>_WM_COMMAND
 
Верх