Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   AutoIt (http://forum.oszone.net/forumdisplay.php?f=103)
-   -   [решено] Как загнать в массив содержание текстового поля (http://forum.oszone.net/showthread.php?t=267451)

eus_deus 04-09-2013 12:01 2212506

Как загнать в массив содержание текстового поля
 
Привет! Снова я! Говорю сразу - по этому вопросу у меня нет ни строчки кода, это может быть и не массив. Постараюсь задачу обрисовать поподробнее. Итак, имеем текстовое поле с секциями и параметрами, наподобие файла ini.
Нужно - массовое изменение начала строк, вне зависимости от их количества.
Пример поля
Код:

[Section]
Разделитель=!!!
S
А my_icons.dll!!!Image1
А my_icons.dll!!!Image2
А my_icons.dll!!!Image3
E

1.Разделитель во второй строке меняется отдельно, но как его сразу сменить во всем содержимом поля?
2.Буквы A ,E, S должны тоже меняться во всем поле на Action, end, и Sepup cсоответствнно.
Мне в двух словах сказали, что надо все поле загонять в массив, и по циклу делать замену. Может, сказали неправильно

Creat0R 04-09-2013 17:47 2212719

Как то так:

Код:

#include <GUIConstantsEx.au3>

$hGUI = GUICreate('Test Script', 300, 200)

$iReplace_Bttn = GUICtrlCreateButton('Replace', 20, 10, 70, 20)
$iEdit = GUICtrlCreateEdit(ClipGet(), 20, 40, 260, 140)

GUISetState(@SW_SHOW, $hGUI)

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $iReplace_Bttn
            $sData = GUICtrlRead($iEdit)

            $sData = StringRegExpReplace($sData, '(?m)^A\b', 'Action')
            $sData = StringRegExpReplace($sData, '(?m)^E\b', 'End')
            $sData = StringRegExpReplace($sData, '(?m)^S\b', 'Setup')
            $sData = StringRegExpReplace($sData, '(?<!=)!!!', '=') ;Не понятно на что, и где менять

            GUICtrlSetData($iEdit, $sData)
    EndSwitch
WEnd


eus_deus 05-09-2013 08:32 2212985

Creat0R, спасибо, попробую вечером у себя

eus_deus 05-09-2013 14:25 2213162

А кто подскажет доступный и понятный для чайников мануал по регулярным выражениям? Читал в справке - наверное, я тупой и не понял... Как их правильно строить? С чего начинать? Прошу прощения за оффтоп...

madmasles 05-09-2013 16:11 2213230

eus_deus,
Почитайте эту тему Уроки по работе с Регулярными Выражениями (RegExp)

eus_deus 05-09-2013 17:56 2213285

madmasles, хорошо, спасибо, посмотрю

eus_deus 05-09-2013 18:13 2213305

Creat0R, код помог почти во всем, кроме одного вопроса. Описываю насколько могу точно.
Цитата:

Цитата Creat0R
$sData = StringRegExpReplace($sData, '(?<!=)!!!', '=') ;Не понятно на что, и где менять »

Касательно этой строки - !!!, которые требуется менять, содержаться в настройках в ини файле. Считывается функцией
Код:

$Delimeters=IniRead($INICONV, "Setting", "Delimeters", 1)
Проблема в том, что там могут быть любые три символа, и в stringexpraplace надо передать именно переменную

eus_deus 05-09-2013 19:31 2213347

Радовался, думал помогло. Итак, по воспросу, который я писал сообщением выше.Есть функция
Код:

Func _delim()
$new_name=InputBox("Переименовать разделитель","Введите разделитель команды",""," M3",200,130)
If @error Then Return
IniWrite ($INICONV, "Setting", "Delimeters", $new_name)
GUICtrlSetData($Input1,$new_name)
$sData = GUICtrlRead($Edit2)
$sData = StringRegExpReplace($sData, $Delimeters,$new_name )
GUICtrlSetData($Edit2,$sData)
EndFunc

В итоге переменная $Delimeters меняется во всем тексте, но только один раз. В чем может быть проблема?

Creat0R 06-09-2013 00:25 2213493

Цитата:

Цитата eus_deus
Проблема в том, что там могут быть любые три символа, и в stringexpraplace надо передать именно переменную »

Не вижу проблему:

Код:

$vTest = 'А my_icons.dll!!!Image1' & @CRLF & 'А my_icons.dll!!!Image2'

$sDelimiters = '!!!'
$sReplace = InputBox("Переименовать разделитель", "Введите разделитель команды", "", " M3", 200, 130)
$sRet = StringReplace($vTest, $sDelimiters, $sReplace)

ConsoleWrite($sRet & @LF)


eus_deus 06-09-2013 12:37 2213678

Creat0R, при первом нажатии кнопки работает, как и мой код выше. Но при последующих нажатиях результата нет. Подозреваю, что mtrcn надо как то обновлять

eus_deus 06-09-2013 12:55 2213688

Вот код. При смене разделителя он должен менятся во всем тексте ($Edit2), в текстовом поле ($Input1) и должно перезаписываться значение параметра в ini файле ($Delimeters) - подозреваю, что запись в ini идет неправильно, но не знаю, где именно
Код:

Func _delim()
$new_name=InputBox("Переименовать разделитель","Введите разделитель команды",""," M3",200,130)
If @error Then Return
IniWrite ($INICONV, "Setting", "Delimeters", $new_name)
GUICtrlSetData($Input1,$new_name)
$sData = GUICtrlRead($Edit2)
$sData =  StringReplace($sData, $Delimeters,$new_name )
ConsoleWrite($sData & @LF)
GUICtrlSetData($Edit2,$sData)
EndFunc

Все, отбой. Учусь же все таки. Итак, работает в моем случае такая функция
Код:

Func _delim()
$new_name=InputBox("Переименовать разделитель","Введите разделитель команды",""," M3",200,130)
If @error Then Return
IniWrite ($INICONV, "Setting", "Delimeters", $new_name)
GUICtrlSetData($Input1,$new_name)
$sData = GUICtrlRead($Edit2)
$sData =  StringReplace($sData, $Delimeters,$new_name )
ConsoleWrite($sData & @LF)
$Delimeters=IniRead($INICONV,"Setting","Delimeters",1)
GUICtrlSetData($Edit2,"")
GUICtrlSetData($Edit2,$sData)
EndFunc

Вопрос считаю решенным!


Время: 00:57.

Время: 00:57.
© OSzone.net 2001-