Bom dia a todos.
Não chamaria seu código de "gambiarra" Thalesduarte. Pra mim não existe essa estória de "código mais certo" se os dois funcionam. A única situação em que isso pode existir é se você estiver buscando algum tipo de otimização (rapidez de execução, menor uso de memória ou algo assim), do contrário se a lógica estiver perfeita, está valendo igualmente pra mim.
De qualquer forma, encontrei
um código de RegEx escrito pelo usuário Jeeswg que faz o que você busca. Ele apaga a linha inteira, inclusive os linefeeds:
Code: Select all
TEXTO =
(
primera
segunda
terceira
quarta
quinta
sexta
setima
oitava
nona
decima
)
LINHA_PARA_EXCLUIR := 5 ; Escreva aqui o número da linha que deseja excluir. Se for 5, vai apagar a linha "quinta", removendo também o linefeed dela.
msgbox % RegExReplace(TEXTO, "`n)^(.*`n){" . (LINHA_PARA_EXCLUIR - 1) . "}\K.*`n|$", "") ; Este é o RegEx que apaga a linha desejada
OBS: o código acima funciona para todas as linhas, EXCETO a última. Mas é relativamente fácil condicionar isso em uma função se precisar (exemplo: se a linha inserida for igual ao total de linhas do arquivo obtido por um stringsplit em
`n, então ao invés de executar o regex acima simplesmente buscaria a última posição de
`n e apagaria tudo à direita dali).
@sofista , obrigado pelo código, mas encontrei alguns erros nele e achei válido relatar:
1. Ele parece estar apaganado todas as linhas cujo número seja um múltiplo da linha (por exemplo, se colocar linha 2, ele apaga a 2, 4, 6, 8 e 10.
2. Ele parece estar apagando apenas o primeiro caractere da linha
3. Ele está mantendo os linefeeds das linhas apagadas (causando "buracos" no texto).