MA
dúvida

Continuar string na linha seguinte com tabulação

Por Mazynho, 21 de abr. de 2014 em Archived

13
3.2k
MazynhoM
21 de abril de 2014 às 17:45

Galera poderiam min dizer como faço para continuar uma string na linha seguinte e ela não adquirir a tabulação. Vou exemplificar:

 

str = "ao digitar e utilizar o caractere\

ele considera esta linha como continuação da anterior,\

mas o problema é que quando tem tabulação ("tab")\

ele considera esse espaçamento parte da string e o isso atrapalha quando se quer\

fazer isso dentro de algum bloco de comandos que já esteja afastado da margem da esquerda."

 

O que quero saber é se tem como utilizar o \ e ele ignorar a tabulação, para que ela não faça parte da string.

 

Em uma função, por exemplo, quero uma string dentro de um if:

function exemplificando()
	if 1 + 1 == 2 then
		str = "oi\
			mundo"
	end
	return str
end 

da forma como está a string considera tabulação, fazendo com que o retorno da mesma seja "oi###mundo", coloquei o ### para representar o caractere que fica, pois não sei qual o código representa o caractere de tabulação.

 

E eu colocar a função sem indentação é muito ruim, dificulta a leitura e é feio.

function exemplificando()
	if 1 + 1 == 2 then
str = "oi\
mundo"
	end
	return str
end 

Se souberem, mesmo que não seja em na linguagem lua ficarei grato.

Editado Abril 21 por Mazynho

SlicerS
21 de abril de 2014 às 18:10

function exemplificando()

if 1 + 1 == 2 then

str = "oi "..

"mundo"

end

return str

end

Editado Abril 21 por Slicer

MazynhoM
21 de abril de 2014 às 18:25
function exemplificando()
	if 1 + 1 == 2 then
		str = "oi "..
			"mundo"
	end
	return str
end

 

Mas ai nao está utilizando um comando para continuar na linha seguinte, nesse caso você está concatenando a string e isso gasta memoria para fazer essa operação, queria algo com o \ ou algo semelhante.

SlicerS
21 de abril de 2014 às 18:28

hum.. acredito q o \ eh o unico jeito... mas tb n tenhu certeza... ;/

21 de abril de 2014 às 18:42

deixa na mesma linha mesmo, e usa " \n "

 

exemplo :

    local table = "Duuh\nCarvalho"
            print(table)
Duuh
Carvalho

 

Serve ?

 


function exemplo()
    if 1 + 1 == 2 then
        str = "Oi\nMundo"
    end
    return str
end

MazynhoM
21 de abril de 2014 às 18:46

 

deixa na mesma linha mesmo, e usa " \n "

 

exemplo :

    local table = "Duuh\nCarvalho"
            print(table)

Serve ?

 

function exemplo()
    if 1 + 1 == 2 then
        str = "Oi\nMundo"
    end
    return str
end

 

Mas quero utilizar o \ quando se tratar de um texto grande, pois colocar 2000 caracteres, por exemplo, em uma linha fica difícil ler, direto no código.

21 de abril de 2014 às 19:17

humm.. tenta assim :

str = false

if 1 + 1 == 2 then
        str = "Oi\n"..
                "Mundo\n"..
                    "Lindo"
end

print(str)

edit --

ops slicer já mostrou essa maneira

vi agora


Edit 2 --

 

tenta assim, acho que funciona ..

if 1 + 1 == 2 then
        str = "OI\
                Mundo\
                    Lindo"
                    b = string.gsub(str, "\t", "")
                print(b)
end

 

Editado Abril 21 por DuuhCarvalho

MazynhoM
21 de abril de 2014 às 19:43

humm.. tenta assim :

str = false

if 1 + 1 == 2 then
        str = "Oi\n"..
                "Mundo\n"..
                    "Lindo"
end

print(str)

edit --

ops slicer já mostrou essa maneira

vi agora

Edit 2 --

 

tenta assim, acho que funciona ..

if 1 + 1 == 2 then
        str = "OI\
                Mundo\
                    Lindo"
                    b = string.gsub(str, "\t", "")
                print(b)
end

 

Não testei, mas creio que funcione só que eu não quero fazer isso por que ele estaria fazendo uma operação para não pegar a tabulação, o que quero já disse:

 

 

Mas ai nao está utilizando um comando para continuar na linha seguinte, nesse caso você está concatenando a string e isso gasta memoria para fazer essa operação, queria algo com o \ ou algo semelhante.

 

Mas obrigado por tentar ajudar.

SkymagnumS
21 de abril de 2014 às 21:54
local str = [[Oi
                Mundo
                    Lindo ]]
 
if 1 + 1 == 2 then
print(str)
end

Não entendi direito oque você quer, mas se eu não me engano existe outra maneira alem do "\".

Editado Abril 21 por Skymagnum

21 de abril de 2014 às 21:58
local str = [[Oi
                Mundo
                    Lindo ]]
 
if 1 + 1 == 2 then
print(str)
end

Não entendi direito oque você quer, mas se eu não me engano existe outra maneira alem do "\".

 

 

ele quer remover a tabulação ..

então isso ae já não vai funcionar, como falei funciona mais ele quer outro jeito .

dalvorsnD
22 de abril de 2014 às 14:53

Assim?

http://codepad.org/1NoFHerv

MazynhoM
22 de abril de 2014 às 15:09

 

 

Não, eu quero uma string em varias linhas com indentação, sendo que ela não pode ler a tabulação.

OneshotO
22 de abril de 2014 às 15:32

Não entendi o propósito da coisa, mas falar que concatenação gasta memória, a não ser você esteja rodando o código com uma memória de 16KB, acho meio estranho sua recusa por tal método.

local str = "Isso é\
	Uma string\
		Com indentação."

str = string.gsub(str, string.char(9), string.rep(string.char(32), 4))

print(str)

Mas faz isso aí, vai substituir os TABs por 4 espaços, que são printados normalmente. Mas gasta mais "KBs" de memória.

Editado Abril 22 por Garou