|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » AutoIt » [решено] Работа со строками и циклами |
|
[решено] Работа со строками и циклами
|
Старожил Сообщения: 156 |
Профиль | Отправить PM | Цитировать Добрый вечер! Подбросили мне идею, и начало кода, который у меня не заработал. Итак, имеем текст в текстовом поле $Edit1
TOTALCMD#BAR#DATA %COMMANDER_PATH%\Programs\Players\AIMP3\AIMP3.exe %COMMANDER_PATH%\Wcmicons.dll,387 AIMP3 0 -1 С этим прекрасно справляется функция Func _Convert() Local $s_Read, $s_Ico, $s_NewString $Config=IniRead ($INICONV, "Setting", "Config", 1) $s_result=GUICtrlRead($Edit2) GUICtrlSetData($Edit2,"") Switch $Config Case '1' $s_NewString="MENUITEM " Case '0' $s_NewString="M " EndSwitch $s_Read =StringSplit(GUICtrlRead($Edit1),@CRLF,1) If $s_Read[0] < 5 Then Return If StringInStr ( $s_Read[4], "wcmicons.dll") then $s_Ico = StringRegExpReplace($s_Read[4], '^.*,', '') Else $s_Ico=$s_Read[4] Endif $s_NewString &=$s_Read[5] & $Delimeters & $s_Ico&$Delimeters & $s_Read[2] & StringRegExpReplace( $Delimeters & $s_Read[3], $Delimeters & '$|\s+', '') GUICtrlSetData($Edit2, $s_result&$s_NewString& @CRLF) _GUICtrlEdit_Scroll($Edit2, $SB_SCROLLCARET ) GUICtrlSetData($Edit1, "") EndFunc Подкинули начало функции Строка MsgBox(4096, "Переменная ", "$aC =>" & $aC[$i] & "<=") выдает ошибку, хотя она там по сути и не нужна |
|
Отправлено: 21:43, 09-09-2013 |
Старожил Сообщения: 156
|
Профиль | Отправить PM | Цитировать Я опять сюда. Итак, после модернизации функция выглядит так
Func _Convert2() Local $sMenuItems $Config=IniRead ($INICONV, "Setting", "Config", 1) $vTest = GUICtrlRead($Edit1) $s_result=GUICtrlRead($Edit2) GUICtrlSetData($Edit2,"") $aData = StringRegExp($vTest, '(?s)BAR#DATA\s+(.+?)(?:TOTALCMD#|$)', 3) Switch $Config Case '1' $sMenuItems="MENUITEM " Case '0' $sMenuItems="M " EndSwitch For $i = 0 To UBound($aData)-1 $aParams = StringSplit(StringStripCR($aData[$i]), @LF) If $aParams[0] >= 4 Then If StringInStr($aParams[3], 'wcmicons.dll') Then $aParams[3] = StringRegExpReplace($aParams[3], '.*?(-?\d+)', '\1') EndIf $sMenuItems &=$aParams[4] & $Delimeters & $aParams[3] & $Delimeters & $aParams[1] & $Delimeters & $aParams[2]&@CRLF EndIf GUICtrlSetData($Edit2, $s_result&$sMenuItems) _GUICtrlEdit_Scroll($Edit2, $SB_SCROLLCARET ) GUICtrlSetData($Edit1, "") Next EndFunc 1. Потеря menuitem после первой строки ( есть только в первой, в остальных нет) 2. В конце строк не должно быть #!# ( записанного в переменную $Delimeters) 1 вопрос решен. остался второй - удаление $Delimeters на конце строки. Func _Convert2() $sMenuItems='' $Config=IniRead ($INICONV, "Setting", "Config", 1) $vTest = GUICtrlRead($Edit1) $s_result=GUICtrlRead($Edit2) GUICtrlSetData($Edit2,"") $aData = StringRegExp($vTest, '(?s)BAR#DATA\s+(.+?)(?:TOTALCMD#|$)', 3) For $i = 0 To UBound($aData)-1 $aParams = StringSplit(StringStripCR($aData[$i]), @LF) If $aParams[0] >= 4 Then If StringInStr($aParams[3], 'wcmicons.dll') Then $aParams[3] = StringRegExpReplace($aParams[3], '.*?(-?\d+)', '\1') EndIf Switch $Config Case '1' $sMenuItems &="MENUITEM "&$aParams[4] & $Delimeters & $aParams[3] & $Delimeters & $aParams[1] & $Delimeters & $aParams[2]&@CRLF Case '0' $sMenuItems &="M "&$aParams[4] & $Delimeters & $aParams[3] & $Delimeters & $aParams[1] & $Delimeters & $aParams[2]&@CRLF EndSwitch EndIf GUICtrlSetData($Edit2, $s_result&$sMenuItems) _GUICtrlEdit_Scroll($Edit2, $SB_SCROLLCARET ) GUICtrlSetData($Edit1, "") Next EndFunc |
Отправлено: 15:36, 11-09-2013 | #11 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Func _Convert2() $sDelimiters = '#!#' $sMenuItems = '' $iConfig = Int(IniRead($INICONV, 'Setting', 'Config', 1)) $sData1 = GUICtrlRead($Edit1) $sData2 = GUICtrlRead($Edit2) GUICtrlSetData($Edit2, '') $aData = StringRegExp($sData1, '(?s)BAR#DATA\s+(.+?)(?:TOTALCMD#|$)', 3) For $i = 0 To UBound($aData) - 1 $aParams = StringSplit(StringStripCR($aData[$i]), @LF) If $aParams[0] >= 4 Then If StringInStr($aParams[3], 'wcmicons.dll') Then $aParams[3] = StringRegExpReplace($aParams[3], '.*?(-?\d+)', '\1') EndIf $sMItem = 'M ' If $iConfig = 1 Then $sMItem = 'MENUITEM ' EndIf $sMItem &= $aParams[4] & $sDelimiters & $aParams[3] & $sDelimiters & $aParams[1] & $sDelimiters & $aParams[2] $sMItem = StringRegExpReplace($sMItem, '(\Q' & $sDelimiters & '\E){2,}', $sDelimiters) ;Заменяем два или более присутствующих разделителей на один $sMenuItems &= StringRegExpReplace($sMItem, '\Q' & $sDelimiters & '\E\h*$', '') & @CRLF ;Удаляем разделитель на конце строки EndIf GUICtrlSetData($Edit2, $sData2 & $sMenuItems) _GUICtrlEdit_Scroll($Edit2, $SB_SCROLLCARET) GUICtrlSetData($Edit1, '') Next EndFunc |
------- Последний раз редактировалось Creat0R, 11-09-2013 в 18:08. Отправлено: 16:14, 11-09-2013 | #12 |
Старожил Сообщения: 156
|
Профиль | Отправить PM | Цитировать Creat0R, нет. Разделитель на конце есть, и все параметры идут одной строкой. цельной
|
Отправлено: 17:05, 11-09-2013 | #13 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать Поправил.
На будущее, заготовь заранее рабочий пример, с которым можно было бы экспериментировать. Вот мне например, пришлось самому его делать чтобы проверить функцию... #include <GUIConstantsEx.au3> #include <ScrollbarConstants.au3> #include <GUIEdit.au3> $INICONV = @ScriptDir & '\test.ini' $sCode = ClipGet() $hGUI = GUICreate('', 400, 600) $Edit1 = GUICtrlCreateEdit($sCode, 20, 20, 200, 200) $Edit2 = GUICtrlCreateEdit('', 20, 320, 200, 200) GUISetState(@SW_SHOW, $hGUI) _Convert2() While 1 $nMsg = GUIGetMsg() Switch $nMsg Case $GUI_EVENT_CLOSE Exit EndSwitch WEnd Func _Convert2() $sDelimiters = '#!#' $sMenuItems = '' $iConfig = Int(IniRead($INICONV, 'Setting', 'Config', 1)) $sData1 = GUICtrlRead($Edit1) $sData2 = GUICtrlRead($Edit2) GUICtrlSetData($Edit2, '') $aData = StringRegExp($sData1, '(?s)BAR#DATA\s+(.+?)(?:TOTALCMD#|$)', 3) For $i = 0 To UBound($aData) - 1 $aParams = StringSplit(StringStripCR($aData[$i]), @LF) If $aParams[0] >= 4 Then If StringInStr($aParams[3], 'wcmicons.dll') Then $aParams[3] = StringRegExpReplace($aParams[3], '.*?(-?\d+)', '\1') EndIf $sMItem = 'M ' If $iConfig = 1 Then $sMItem = 'MENUITEM ' EndIf $sMItem &= $aParams[4] & $sDelimiters & $aParams[3] & $sDelimiters & $aParams[1] & $sDelimiters & $aParams[2] $sMItem = StringRegExpReplace($sMItem, '(\Q' & $sDelimiters & '\E){2,}', $sDelimiters) ;Заменяем два или более присутствующих разделителей на один $sMenuItems &= StringRegExpReplace($sMItem, '\Q' & $sDelimiters & '\E\h*$', '') & @CRLF ;Удаляем разделитель на конце строки EndIf GUICtrlSetData($Edit2, $sData2 & $sMenuItems) _GUICtrlEdit_Scroll($Edit2, $SB_SCROLLCARET) GUICtrlSetData($Edit1, '') Next EndFunc |
------- Отправлено: 18:10, 11-09-2013 | #14 |
Старожил Сообщения: 156
|
Профиль | Отправить PM | Цитировать Creat0R, понял, пример максимальные пояснения с меня. Объясни еще , как ты с такой расцветкой код вставляешь?
|
Отправлено: 18:27, 11-09-2013 | #15 |
Must AutoIt Сообщения: 3054
|
Профиль | Сайт | Отправить PM | Цитировать |
------- Отправлено: 08:23, 12-09-2013 | #16 |
Участник сейчас на форуме | Участник вне форума | Автор темы | Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - [решено] Работа со строками txt файла. | kirillgoogle | Программирование и базы данных | 16 | 26-06-2012 14:00 | |
VBA - Работа со строками | zena | Программирование и базы данных | 5 | 21-02-2011 09:03 | |
C/C++ - [решено] Работа со строками. Буфер содержит нуль-терминатор | Dr.Dark | Программирование и базы данных | 5 | 29-08-2010 16:13 | |
C/C++ - [решено] Работа с строками | crashtuak | Программирование и базы данных | 16 | 26-03-2009 01:21 | |
CMD/BAT - [решено] Работа со строками в cmd-файлах | melato | Скриптовые языки администрирования Windows | 3 | 30-01-2007 08:52 |
|