string - Dividir cadena grande



text autoit (1)

Tengo un texto largo que debe convertirse en cadenas pequeñas para poder incluirlo en un script AutoIt. Si error unterminated string texto de varias líneas, muestra una error unterminated string . Entonces debería tener:

"numbercharswillbe10" &_ "othernumbersofcharwillbe10" &_ etc..

¿Cómo puedo dividirlo con & _ -delimitadores?


Concatenación de cadenas

Según la documentación - Referencia del lenguaje - Operadores :

& Concatenates / une dos cadenas.

&= Asignación de concatenación.

Ejemplo:

Global $g_sText = "Long " & "string " & "here." & @CRLF

$g_sText &= "More text." & @CRLF

ConsoleWrite($g_sText)

Declaraciones de varias líneas

Según la documentación - Referencia del lenguaje - Comentarios (énfasis agregado, ya que causa el error mencionado de "cadena no terminada"):

Aunque solo se permite una instrucción por línea, una instrucción larga puede abarcar varias líneas si se coloca un guión bajo " _ " precedido por un espacio en blanco al final de una línea "discontinua". La definición de cadena no se puede dividir en varias líneas, se debe utilizar la concatenación.

Ejemplo:

Global Const $g_sText = "Long " & _
                        "string " & _
                        "here." & _
                        @CRLF & _
                        "More text." & _
                        @CRLF

ConsoleWrite($g_sText)

Doble comillas

Según la documentación - Preguntas frecuentes - Comillas dobles :

Si desea utilizar comillas dobles dentro de una cadena, debe "duplicarlas". Entonces, por cada cotización que desee, debe usar dos. ...

o use comillas simples en su lugar ...

Ejemplos disponibles de la fuente.

Valores predeterminados y límites

Según la documentación - Apéndice - Límites / valores predeterminados :

4095 Tamaño máximo para una línea de script.

2,147,483,647 Longitud máxima de cuerda.

Según la documentación - Referencia del lenguaje - Tipos de datos - Cadenas :

Todas las cadenas AutoIt usan codificación UTF-16 (de hecho y más precisamente UCS-2).

Según la documentación - Introducción - Soporte Unicode :

Hay algunas partes de AutoIt que aún no tienen soporte completo de Unicode. Estos son:

  • Enviar y ControlSend: en su lugar, use ControlSetText o las funciones del Portapapeles.
  • Las operaciones de la consola se convierten a ANSI.
  • Alternativas

    Las alternativas a la codificación dura incluyen ClipGet() y FileRead() .

    Texto del portapapeles

    Ejemplo (seleccione y copie el texto CTRL + C primero):

    Global Const $g_sText = ClipGet()
    
    ConsoleWrite($g_sText & @CRLF)
    

    Texto del archivo

    Ejemplo (cree C:\my_long_string.txt primero):

    #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
    

    Cadena dividida

    Las alternativas a la división manual de cadenas codificadas incluyen StringSplit() , _StringExplode() ( related ) y StringMid() .

    Estructural

    StringSplit() divide una cadena en una matriz de:

    • caracteres individuales (en delimitador vacío),
    • palabras (en el espacio delimitador) o
    • líneas (en @CRLF , @LF o @CR ).

    Misma longitud

    StringMid() devuelve parte de una cadena. Se puede usar para dividir en partes de igual longitud. Ejemplo (sin verificación de errores, seleccione y copie el texto CTRL + C primero):

    #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
    

    Unir cadena

    Según la documentation :

    _ArrayToString
    Coloca los elementos de una matriz 1D o 2D en una sola cadena, separados por los delimitadores especificados

    Ejemplo (agregue _StringSplitEqual() y seleccione y copie el texto CTRL + C primero):

    #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)
    

    Devoluciones:

    $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."
    




    multilinestring