Pular para o conteúdo principal

Texto

A concatenação precisa de Text dos dois lados​

+ junta dois Texts. "Count: " + 5 não é "Count: 5". É o resultado padrão para tipos mistos, Integer 0. Converta números, Bools e identificadores em Text com StringFormat antes.

StringFormat(format, value0, value1)​

  • Substitui cada {0} por value0 e cada {1} por value1. Qualquer um dos valores pode ser de qualquer tipo. Não há {2} nem especificadores de formato como {0:N2}.
  • Ela sempre recebe três argumentos. Passe "" para um valor que você não usa: StringFormat("{0} items", n, "").
  • Para mais de dois valores, aninhe chamadas ou concatene os resultados (veja o exemplo abaixo).
  • Um Real sempre aparece com seis casas decimais (0.500000). Arredonde-o para um Integer antes para obter um número inteiro, ou multiplique-o por uma escala (MathRound(r * 100)) para uma saída com casas fixas.
  • {0} é substituído antes de {1}, então, se o próprio texto de value0 contiver {1}, ele também será substituído.
w = WindowGetActive();
s = StringFormat(StringFormat("{0} x {1} at ", WindowGetWidth(w), WindowGetHeight(w)) + "({0}, {1})",
WindowGetX(w), WindowGetY(w));
UtilityPrint(s); // por exemplo, 1280 x 720 at (100, 80)

Medir, pesquisar, recortar​

  • StringGetLength conta unidades de código UTF-16, não caracteres. Um emoji fora do Plano Multilíngue Básico conta como 2.
  • StringGetIndexOf(text, search) retorna um índice a partir de 0, ou -1 quando search não é encontrado. Diferencia maiúsculas de minúsculas, e não há "último índice de" (percorra com um loop).
  • StringGetSubstring(text, start, length): start começa em 0. Um length que ultrapassa o fim é encurtado, e um start no fim ou além dele retorna "". Um start ou length negativo é um erro e interrompe a ação.
  • Não há sintaxe de indexação (s[0]). Use StringGetSubstring(s, i, 1) para um caractere.
  • StringContains, StringStartsWith, StringEndsWith e StringReplace são exatas e diferenciam maiúsculas de minúsculas. Para um teste sem essa diferenciação, converta os dois lados para minúsculas antes.
  • StringToUpper/StringToLower seguem as regras de maiúsculas e minúsculas da localidade do usuário, então o i com e sem ponto do turco é tratado corretamente.
  • StringTrim remove espaços em branco das duas pontas, inclusive o \r que sobra das quebras de linha \r\n do Windows.
  • StringReplace e StringSplit interrompem a ação se o texto pesquisado ou o delimitador estiver vazio.

A divisão é um cache lido por índice​

Um valor não pode conter uma lista, então StringSplit(text, delimiter) guarda as partes no contexto do script em execução e retorna quantas são. Leia cada parte com StringGetSplitPartAt(i); um índice fora do intervalo retorna "". O próximo StringSplit no mesmo script substitui esse cache, então copie uma parte para uma variável antes de dividir outra coisa. Toda função interna …EnumerateAll, …FindAll… ou …GetAll…, junto com a sua leitora …EnumeratedAt, funciona da mesma forma.

Comparar texto​

== é exato e diferencia maiúsculas de minúsculas. </> comparam de forma ordinal, por unidade de código UTF-16, o que não é a ordem de dicionário: toda letra ASCII maiúscula vem antes de toda minúscula, e as letras acentuadas vêm depois de z. Não apresente essa ordem a um usuário como alfabética.