Что нового

Как получить массив строк из поля EDIT

Tyr

Новичок
Сообщения
43
Репутация
4
в GUI в многстрочное поле ввода EDIT вводятся данные формата(копируются из лога веб интерфейса пользователем):
Код:
Файл: d_s_LTLСЬ2.RS, Зап: 2
Файл: d_s_LTLСЬ2.RS, Зап: 3
Файл: d_s_LTLСЬ2.RS, Зап: 4
Файл: d_s_LTLСЬ2.RS, Зап: 5
Файл: d_s_LTLСЬ2.RS, Зап: 7
Файл: d_s_LTLСЬ2.RS, Зап: 8
Файл: d_s_LTLСЬ2.RS, Зап: 10
Файл: d_s_LTLСЬ2.RS, Зап: 11
Файл: d_s_LTLСЬ2.RS, Зап: 12
Файл: d_s_LTLСЬ2.RS, Зап: 13
Файл: d_s_LTLСЬ2.RS, Зап: 15
Файл: d_s_LTLСЬ2.RS, Зап: 16
С одной строкой всё просто, но мне надо обработать все строки поочереди или получить массив строк для определения номера записи в текстовом файле (Зап: 15, 16, 1), что бы потом выдернуть все эти строки FileReadLine'ом по их номерам из файла и записать в новый файл FileWriteLine'ом :ok:
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#Region ### START Koda GUI section ### Form=
$Form1 = GUICreate("DiasRSCheck", 537, 442, 187, 146)
GUISetBkColor(0xFFFFFF)
$PoleVvoda = GUICtrlCreateEdit("", 8, 24, 497, 385)
GUICtrlSetData(-1, "PoleVvoda")
$Knopka = GUICtrlCreateButton("CreateFile", 8, 408, 233, 33, $WS_GROUP)
$Label1 = GUICtrlCreateLabel("Вставьте в окно ввода содержание столбца 'Файл и строка' из Лога ошибки:", 8, 0, 510, 20)
GUICtrlSetFont(-1, 10, 400, 0, "MS Sans Serif")
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
	$nMsg = GUIGetMsg()
	Switch $nMsg
		Case $GUI_EVENT_CLOSE
			Exit

		Case $Form1
		Case $PoleVvoda
		Case $Knopka
			 $sText = GUICtrlRead($PoleVvoda) ;считывает, но не построчно а всё
			 $sFileName = StringMid($sText,7,10) ;беру имя файла 1 раз в первой строчке (далее используя путь и расширеник будет использоватся для поиска и чтения файла)
			 
			 $sNomStr = StringMid($sText,27,3) ; тут я должен получить номер строки для будушего использования в FileReadLine 
			 MsgBox(0, "Результ", $sFileName & " " & $sNomStr)
	EndSwitch
WEnd

Привел код поиска имени файла и номера строки в искомом файле. Помогите пожалуйста. :IL_AutoIt_1:
:scratch: предполагаю, что возможно как то StringRegExp можно использовать для этих целей или же, что кажется ненормальным :stars: - записать всё в файл и в цикле считать строки с обрезкой StringMid.... пробовал и так :whistle: StringInStr($sText, '\R'), но Autoit не понял, что я ищу вхождения символов разделителей строки...
 

Tempo

AutoIT Гуру
Сообщения
616
Репутация
205
Пример
Код:
#include <ButtonConstants.au3>
#include <EditConstants.au3>
#include <GUIConstantsEx.au3>
#include <StaticConstants.au3>
#include <WindowsConstants.au3>
#include <Array.au3>
Global $iInput, $iButton1, $iButton2, $aText, $sFileName, $iNum, $aOut
GUICreate("DiasRSCheck", 495, 400)
;GUISetBkColor(0xFFFFFF)
GUICtrlCreateLabel("Вставьте в окно ввода содержание столбца 'Файл и строка' из Лога ошибки:", 5, 5, Default, 20)
$iInput = GUICtrlCreateEdit("Файл: d_s_LTLСЬ2.RS, Зап: 2" & @CRLF & _
		"Файл: d_s_LTLСЬ2.RS, Зап: 3" & @CRLF & _
		"Файл: d_s_LTLСЬ2.RS, Зап: 4" & @CRLF & _
		"Файл: d_s_LTLСЬ2.RS, Зап: 5" & @CRLF & _
		"Файл: d_s_LTLСЬ2.RS, Зап: 7" & @CRLF & _
		"Файл: d_s_LTLСЬ2.RS, Зап: 8" & @CRLF & _
		"Файл: d_s_LTLСЬ2.RS, Зап: 10" & @CRLF & _
		"Файл: d_s_LTLСЬ2.RS, Зап: 11" & @CRLF & _
		"Файл: d_s_LTLСЬ2.RS, Зап: 12" & @CRLF & _
		"Файл: d_s_LTLСЬ2.RS, Зап: 13" & @CRLF & _
		"Файл: d_s_LTLСЬ2.RS, Зап: 15" & @CRLF & _
		"Файл: d_s_LTLСЬ2.RS, Зап: 16", 5, 25, 485, 340)
$iButton1 = GUICtrlCreateButton("StringMid/StringInStr", 85, 370, 160, 25, $WS_GROUP)
$iButton2 = GUICtrlCreateButton("StringRegExp", 250, 370, 160, 25, $WS_GROUP)
GUICtrlSetFont(8.5, 10, 400, 0, "MS Sans Serif")
GUISetState()

While 1
	Switch GUIGetMsg()
		Case $iButton1
			$aText = StringSplit(GUICtrlRead($iInput), @CRLF, 1)
			If Not IsArray($aText) Then ContinueLoop
			_ArrayDisplay($aText)
			Dim $aOut[$aText[0] + 1][2] = [[$aText[0]]]
			For $i = 1 To $aText[0]
				$sFileName = StringMid($aText[$i], StringInStr($aText[$i], "Файл: ") + 6, StringInStr($aText[$i], ",") - 7)
				$iNum = StringMid($aText[$i], StringInStr($aText[$i], "Зап: ") + 5)
				$aOut[$i][0] = $sFileName
				$aOut[$i][1] = $iNum
				MsgBox(64, "Результ", "Файл: " & $sFileName & @CRLF & "Зап: " & $iNum, 1)
			Next
			_ArrayDisplay($aOut)
		Case $iButton2
			$aText = StringRegExp(GUICtrlRead($iInput), "Файл: (.*?), Зап: ([0-9]*)", 3)
			If @error Then ContinueLoop
			_ArrayDisplay($aText)
			$iNum = UBound($aText)
			Dim $aOut[$iNum / 2 + 1][2] = [[1]]
			For $i = 0 To $iNum - 1 Step 2
				$aOut[$aOut[0][0]][0] = $aText[$i]
				$aOut[$aOut[0][0]][1] = $aText[$i + 1]
				$aOut[0][0] += 1
				MsgBox(64, $aOut[0][0], "Файл: " & $aText[$i] & @CRLF & "Зап: " & $aText[$i + 1], 1)
			Next
			$aOut[0][0] -= 1
			_ArrayDisplay($aOut)
		Case $GUI_EVENT_CLOSE
			Exit
	EndSwitch
WEnd


И для поиска символа перевода строки через функцию StringInStr "\R" не подойдет это не регулярное выражение. Для этих целей есть макросы @CRLF, @CR, @LF.
 
Автор
Tyr

Tyr

Новичок
Сообщения
43
Репутация
4
:beer: то что нужно. Спасибо.
Осталось только пустые строки удалить, которые пользователь навводить может ))) Но это я умею... затык был только в разбиение текста на части...



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

Tempo сказал(а):
Код:
Dim $aOut[$aText[0] + 1][2] = [[$aText[0]]]
Можно вопрос, а какой скрытый смысл в передаче значения в массив после его объявления? :scratch: Ведь он ниже будет заполнятся...
 
Верх