Автор Тема: Как получить массив строк из поля EDIT  (Прочитано 504 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Tyr [?]

  • Новичок
  • *
  • Сообщений: 39
  • Репутация: 4
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.6.1
в 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:
Код: AutoIt [Выделить]
#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:
(нажмите для показа/скрытия)

Русское сообщество AutoIt

Как получить массив строк из поля EDIT
« Отправлен: Декабрь 19, 2017, 16:57:48 »

Помечен как лучший ответ пользователем Tyr Отправлен Декабрь 19, 2017, 18:36:17

Онлайн Tempo [?]

  • Продвинутый
  • ***
  • Сообщений: 401
  • Репутация: 92
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.14.0
Re: Как получить массив строк из поля EDIT
« Ответ #1, Отправлен: Декабрь 19, 2017, 17:52:47 »
Пример
Код: AutoIt [Выделить]
#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 [?]

  • Новичок
  • *
  • Сообщений: 39

  • Автор темы
  • Репутация: 4
  • Пол: Мужской
    • Награды
  • Версия AutoIt: 3.3.6.1
Re: Как получить массив строк из поля EDIT
« Ответ #2, Отправлен: Декабрь 19, 2017, 18:35:51 »
 :beer: то что нужно. Спасибо.
Осталось только пустые строки удалить, которые пользователь навводить может ))) Но это я умею... затык был только в разбиение текста на части...



Добавлено: Декабрь 20, 2017, 17:10:18
Код: AutoIt [Выделить]
Dim $aOut[$aText[0] + 1][2] = [[$aText[0]]]
 

Можно вопрос, а какой скрытый смысл в передаче значения в массив после его объявления? :think: Ведь он ниже будет заполнятся...
« Последнее редактирование: Декабрь 20, 2017, 17:10:18 от Tyr, Причина: Объединение сообщений »

Русское сообщество AutoIt

Re: Как получить массив строк из поля EDIT
« Ответ #2 Отправлен: Декабрь 19, 2017, 18:35:51 »

 

Похожие темы

  Тема / Автор Ответов Последний ответ
17 Ответов
9037 Просмотров
Последний ответ Сентябрь 08, 2010, 16:54:09
от madmasles
4 Ответов
4150 Просмотров
Последний ответ Август 25, 2011, 21:00:27
от sasha-ld
12 Ответов
5356 Просмотров
Последний ответ Январь 03, 2012, 17:16:26
от gregaz
1 Ответов
3252 Просмотров
Последний ответ Май 11, 2013, 22:08:48
от CreatoR
0 Ответов
1761 Просмотров
Последний ответ Май 11, 2013, 22:52:48
от CreatoR
3 Ответов
1229 Просмотров
Последний ответ Май 11, 2014, 22:23:43
от CreatoR
2 Ответов
1423 Просмотров
Последний ответ Май 12, 2014, 10:02:07
от royalfint
1 Ответов
956 Просмотров
Последний ответ Август 30, 2015, 16:39:46
от Yashied
20 Ответов
4368 Просмотров
Последний ответ Февраль 21, 2016, 07:52:24
от weweWe45s
2 Ответов
643 Просмотров
Последний ответ Сентябрь 26, 2017, 22:09:28
от Alofa