Конкатенация строк
Согласно Документация — Справочник по языку — Операторы:
&
Объединяет/объединяет две строки.
&=
Назначение конкатенации.
Пример:
Global $g_sText = "Long " & "string " & "here." & @CRLF
$g_sText &= "More text." & @CRLF
ConsoleWrite($g_sText)
Многострочные операторы
Согласно Документация — Справочник по языку — Комментарии (курсив добавлен, так как вызывает упомянутую ошибку «незавершенная строка»):
Хотя допускается только одна инструкция в строке, длинная инструкция может занимать несколько строк, если в конце «ломаной» строки ставится символ подчеркивания «_
», которому предшествует пробел. Определение строки нельзя разделить на несколько строк, необходимо использовать конкатенацию.
Пример:
Global Const $g_sText = "Long " & _
"string " & _
"here." & _
@CRLF & _
"More text." & _
@CRLF
ConsoleWrite($g_sText)
Двойные кавычки
Согласно Документация - Часто задаваемые вопросы - Двойные кавычки:
Если вы хотите использовать двойные кавычки внутри строки, вы должны «удвоить их». Таким образом, для каждой цитаты, которую вы хотите, вы должны использовать две. ...
или вместо этого используйте одинарные кавычки...
Примеры доступны из источника.
Значения по умолчанию и ограничения
Согласно Документация — Приложение — Ограничения/значения по умолчанию:
4095
Максимальный размер строки скрипта.
2,147,483,647
Максимальная длина строки.
Согласно Документация — Справочник по языку — Типы данных — Строки:
Все строки AutoIt используют кодировку UTF-16 (фактически и точнее UCS-2).
Согласно Документация — Введение — Поддержка Unicode:
There are a few parts of AutoIt that don't yet have full Unicode support. These are:
Отправить и ControlSend — вместо этого используйте функции ControlSetText или буфера обмена.
Консольные операции преобразуются в ANSI.
Альтернативы
Альтернативы жесткому кодированию включают ClipGet()
и FileRead()
.
Текст из буфера обмена
Пример (сначала выберите и скопируйте текст CTRL + C):
Global Const $g_sText = ClipGet()
ConsoleWrite($g_sText & @CRLF)
Текст из файла
Пример (сначала создайте C:\my_long_string.txt
):
#include <FileConstants.au3>
Global Const $g_sFile = 'C:\my_long_string.txt'
Global Const $g_sText = _TextFromFile($g_sFile)
ConsoleWrite($g_sText & @CRLF)
Func _TextFromFile(Const $sFile)
Local $hFile = FileOpen($sFile, $FO_READ + $FO_UTF8_NOBOM)
Local Const $sData = FileRead($hFile)
FileClose($hFile)
Return $sData
EndFunc
Разделить строку
Альтернативы жестко запрограммированному ручному разбиению строк включают StringSplit()
, _StringExplode()
(связанные) и StringMid()
.
Структурный
StringSplit()
разбивает строку на массив:
- отдельные символы (на пустом разделителе),
- слова (через пробел
delimiter) or
- lines (on
@CRLF
, @LF
или @CR
разделитель).
Одинаковая длина
StringMid()
возвращает часть строки. Может использоваться для разделения на части одинаковой длины. Пример (без проверки ошибок, сначала выберите и скопируйте текст CTRL + C):
#include <Array.au3>
Global Const $g_iSize = 10
Global Const $g_sText = ClipGet()
Global Const $g_aArray = _StringSplitEqual($g_sText, $g_iSize)
_ArrayDisplay($g_aArray)
Func _StringSplitEqual(Const $sText, Const $iSize = 1)
Local Const $iLength = StringLen($sText)
Local Const $iParts = Ceiling($iLength / $iSize)
Local Const $iRest = -1; $iLength - ($iSize * Floor($iLength / $iSize))
Local $iStart = 0
Local $iCount = 0
Local $aArray[$iParts]
For $i1 = 0 To $iParts - 1
$iStart = ($i1 * $iSize) + 1
$iCount = ($i1 < $iParts - 1) ? $iSize : ($iRest ? $iRest : $iSize)
$aArray[$i1] = StringMid($sText, $iStart, $iCount)
Next
Return $aArray
EndFunc
Присоединить строку
Согласно документации:
_ArrayToString
Помещает элементы одномерного или двумерного массива в одну строку, разделенную указанными разделителями.
Пример (добавьте _StringSplitEqual()
и сначала выберите и скопируйте текст CTRL + C):
#include <Array.au3>
Global Const $g_iSize = 10
Global Const $g_sStart = '$sText = "'
Global Const $g_sEnd = '"' & @CRLF
Global Const $g_sDelimiter = '" _' & @CRLF & ' & "'
Global Const $g_sText = StringReplace(ClipGet(), @CRLF, '')
Global Const $g_aArray = _StringSplitEqual($g_sText, $g_iSize)
Global $g_sResult = _ArrayToString($g_aArray, $g_sDelimiter)
$g_sResult = $g_sStart & $g_sResult & $g_sEnd
ConsoleWrite($g_sResult)
Возвращает:
$sText = "AutoIt v3 " _
& "is a freew" _
& "are BASIC-" _
& "like scrip" _
& "ting langu" _
& "age design" _
& "ed for aut" _
& "omating th" _
& "e Windows " _
& "GUI and ge" _
& "neral scri" _
& "pting."
person
user4157124
schedule
03.06.2017