Что нового

Почему StringSplit удаляет символ @LF из текста ?

agikon

Знающий
Сообщения
789
Репутация
17
помогите пожалуйста исправить код.
а всё потому что при копировании текста, а потом последкующея его вставка удаляет из этого текста символ @LF
как сделать чтобы из строк текста не удалялся @LF ?
Код:
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>

$hGUI = GUICreate('', 200, 180)
        GUICtrlCreateEdit('1' & @CRLF & '2' & @CRLF & '3' & @CRLF & '4' & @CRLF & '5' & @CRLF & '6' & @CRLF & _
        '7' & @CRLF & '8' & @CRLF & '9' & @CRLF & '10', 10, 10, 20, 150, $ES_WANTRETURN)
$nEdit1 = GUICtrlCreateEdit('даные1' & @CRLF & 'даные2' & @CRLF & 'даные3' & @CRLF & 'даные4' & @CRLF & 'даные5' & @CRLF & 'даные6' & @CRLF & _
        'даные7' & @CRLF & 'даные8' & @CRLF & 'даные9' & @CRLF & 'даные10', 30, 10, 70, 150, $ES_WANTRETURN)

$num1 = GUICtrlCreateEdit('4', 120, 10, 20, 20, $ES_WANTRETURN)
$num2 = GUICtrlCreateEdit('7', 170, 10, 20, 20, $ES_WANTRETURN)

GuiCtrlCreateLabel("c", 110, 15, 9, 15)
GuiCtrlCreateLabel("по", 155, 15, 13, 15)

$nButton1 = GUICtrlCreateButton('извлечь', 110, 30, 80, 20)
GUICtrlSetState(-1, $GUI_FOCUS)
GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $nButton1
            Local $new = ''
            $list = StringSplit(GUICtrlRead($nEdit1),@LF)
            for $i = GUICtrlRead($num1) to GUICtrlRead($num2)
                $new &=$list[$i]
            next
            ;MsgBox(0,0,$new)

			GUICtrlSetData($nEdit1, '')
			GUICtrlSetData($nEdit1, $new)
			sleep(3000)


    EndSwitch
WEnd
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
agikon
Заменить @LF на @LF + управляющий символ (1-32, например Chr(1)) а потом разделить с помощью StringSplit используя в качестве разделителя этот управляющий символ.
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
AZJIO

спасибо получилось!
Код:
#include <GUIConstantsEx.au3>
#include <EditConstants.au3>

$hGUI = GUICreate('', 200, 180)
        GUICtrlCreateEdit('1' & @CRLF & '2' & @CRLF & '3' & @CRLF & '4' & @CRLF & '5' & @CRLF & '6' & @CRLF & _
        '7' & @CRLF & '8' & @CRLF & '9' & @CRLF & '10', 10, 10, 20, 150, $ES_WANTRETURN)
$nEdit1 = GUICtrlCreateEdit('даные1' & @CRLF & 'даные2' & @CRLF & 'даные3' & @CRLF & 'даные4' & @CRLF & 'даные5' & @CRLF & 'даные6' & @CRLF & _
        'даные7' & @CRLF & 'даные8' & @CRLF & 'даные9' & @CRLF & 'даные10', 30, 10, 70, 150, $ES_WANTRETURN)

$num1 = GUICtrlCreateEdit('4', 120, 10, 20, 20, $ES_WANTRETURN)
$num2 = GUICtrlCreateEdit('7', 170, 10, 20, 20, $ES_WANTRETURN)

GuiCtrlCreateLabel("c", 110, 15, 9, 15)
GuiCtrlCreateLabel("по", 155, 15, 13, 15)

$nButton1 = GUICtrlCreateButton('извлечь', 110, 30, 80, 20)
GUICtrlSetState(-1, $GUI_FOCUS)





GUISetState()

While 1
    Switch GUIGetMsg()
        Case $GUI_EVENT_CLOSE
            Exit
        Case $nButton1
			$read_text = GUICtrlRead($nEdit1)
			$text = StringRegExpReplace($read_text, @LF, @LF&Chr(1))

            Local $new = ''
            $list = StringSplit($text,Chr(1))
            for $i = GUICtrlRead($num1) to GUICtrlRead($num2)
                $new &=$list[$i]
            next
            ;MsgBox(0,0,$new)

			GUICtrlSetData($nEdit1, '')
			GUICtrlSetData($nEdit1, $new)
			sleep(3000)


    EndSwitch
WEnd


вот только непонятно почему в самый конец добавляет символ @LF , ведь в оригинале в самом конце нет символа @LF, то есть после строки "данные10" нет символа @LF.
а после всех преобразований почемуто его туда дописывает. просто как сам факт интеремен.
 

AZJIO

Меценат
Меценат
Сообщения
2,874
Репутация
1,194
agikon
У тебя в скрипте от 4 до 7, а после 7 есть @LF. А после 10-го не должно. Вместо StringRegExpReplace можно StringReplace. Очищать с помощью GUICtrlSetData не требуется.
 
Автор
A

agikon

Знающий
Сообщения
789
Репутация
17
AZJIO
точно! :smile:
я же брал 7 строку, а не 10 :smile:
теперь всё ясно.
 
Верх