Duvida com Strings.

72 views
Skip to first unread message

Andrws Vieira

unread,
Jul 4, 2012, 6:42:51 PM7/4/12
to lua...@googlegroups.com
Pessoal,

Minha dúvida é a seguinte, tenho uma string e desejo repartir ela em 2 duas, por exemplo:

Local S,S1,S2
S = "Andrws Vieira"

Gostaria de separar Andrws de Vieira em duas outras variáveis, onde o resultado fosse.

S1 = "Andrws" e S2 = "Vieira"



Porém essa string não vai ser assim tão certinha, estou fazendo um script para ler um log e me retornar uns dados.

A string em questão pode ser gigante, com vários espaços, etc ...
Porém quero sempre quebrar ela em duas na primeira ocorrência de um espaço, por exemplo se eu tivesse:

S = "Andrws Aires Vieira"

Preciso quebrar assim:

S1 = "Andrws" e S2 = "Aires Vieira"




Desde já agradeço :)


--
Andrws Aires Vieira         
Ciência da Computação 8° Semestre
Grupo PET Computação
Grupo de Arquitetura e Circuitos Integrados - GACI
Universidade Federal de Pelotas - UFPel

Tomas Guisasola Gorham

unread,
Jul 4, 2012, 6:50:21 PM7/4/12
to lua...@googlegroups.com
> A string em quest�o pode ser gigante, com v�rios espa�os, etc ...
> Por�m quero sempre quebrar ela em duas na primeira ocorr�ncia de um espa�o,
> por exemplo se eu tivesse:
>
> S = "Andrws Aires Vieira"
>
> Preciso quebrar assim:
>
> S1 = "Andrws" e S2 = "Aires Vieira"

Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> S = "Andrws Aires Vieira"
> S1, S2 = S:match"^(%S+) (.*)$"
> =S1
Andrws
> =S2
Aires Vieira

Abra�o,
Tom�s

Elias Barrionovo

unread,
Jul 4, 2012, 6:54:52 PM7/4/12
to lua...@googlegroups.com
2012/7/4 Andrws Vieira <andrws...@gmail.com>:
> S = "Andrws Aires Vieira"
>
> Preciso quebrar assim:
>
> S1 = "Andrws" e S2 = "Aires Vieira"

Você precisa usar string.find [1], que retorna a posição da primeira
ocorrência de uma substring, e de string.sub, que retorna uma
substring dados início e fim:

s = "Andrws Aires Vieira"
pos = s:find(' ') --acha a primeira ocorrencia de espaço

-- s1 recebe a substr de 1 a pos-1 (para nao incluir espaço)
s1 = s:sub(1, pos-1)

-- s2 recebe a substr de pos+1 (para nao incluir espaço) até o fim
(segundo argumento implícito)
s2 = s:sub(pos+1)


--
NI!

Elias Barrionovo

unread,
Jul 4, 2012, 6:57:51 PM7/4/12
to lua...@googlegroups.com
2012/7/4 Elias Barrionovo <elias....@gmail.com>:
> Você precisa usar string.find [1] (...)
Oops, esqueci da referência:
http://www.lua.org/manual/5.2/manual.html#pdf-string.find


> (...) e de string.sub, (...)
Também esqueci da referência:
http://www.lua.org/manual/5.2/manual.html#pdf-string.sub

--
NI!

Andrws Vieira

unread,
Jul 4, 2012, 7:13:49 PM7/4/12
to lua...@googlegroups.com
Funcionou perfeitamente no que estava fazendo :)

Mas Tomas, poderias me explicar o que exatamente  S1, S2 = S:match"^(%S+) (.*)$"  faz ?
Porque a unica função com este nome que achei no manuel de referencia foi 

string.match

Mas não parecer ser nada parecido com isso.


Anyway, funcionou para o que eu queria então MUITO OBRIGADO, só fiquei curioso como aquela função fez aquilo :)



Abraços.

Em 4 de julho de 2012 19:50, Tomas Guisasola Gorham <to...@tecgraf.puc-rio.br> escreveu:
A string em questão pode ser gigante, com vários espaços, etc ...
Porém quero sempre quebrar ela em duas na primeira ocorrência de um espaço,

por exemplo se eu tivesse:

S = "Andrws Aires Vieira"

Preciso quebrar assim:

S1 = "Andrws" e S2 = "Aires Vieira"
Lua 5.1.4  Copyright (C) 1994-2008 Lua.org, PUC-Rio
S = "Andrws Aires Vieira"
S1, S2 = S:match"^(%S+) (.*)$"
=S1
Andrws
=S2
Aires Vieira

        Abraço,
                Tomás

--
Lua BR - http://groups.google.com/group/lua-br

Luis Carvalho

unread,
Jul 4, 2012, 8:45:17 PM7/4/12
to lua...@googlegroups.com
So' lembrando que caso voce queira isolar todas as "palavras" da string
inicial basta usar string.gmatch:

Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
> s="Andrws Aires Vieira"
> for w in s:gmatch"(%S+)" do print(w) end
Andrws
Aires
Vieira

Acho que esse caso deve ser bem mais comum...

Abracos,
K

--
Computers are useless. They can only give you answers.
-- Pablo Picasso

--
Luis Carvalho (Kozure)
lua -e 'print((("lexca...@NO.gmail.SPAM.com"):gsub("(%u+%.)","")))'

Eric Chiesse

unread,
Jul 4, 2012, 8:59:22 PM7/4/12
to lua...@googlegroups.com
Eu costumo usar:

ini, fim, S1, S2 = string.find(S, "^(%w+)%s+(.-)")

---
Eric
br.linkedin.com/in/echiesse



Em 4 de julho de 2012 21:45, Luis Carvalho <lexca...@gmail.com> escreveu:
> >A string em questão pode ser gigante, com vários espaços, etc ...
> >Porém quero sempre quebrar ela em duas na primeira ocorrência de um espaço,

Eric Chiesse

unread,
Jul 4, 2012, 9:20:10 PM7/4/12
to lua...@googlegroups.com
Na verdade são as mesmas funções.

Acontece que as strings têm uma metatable cujo __index aponta para a tabela "string".

Logo S:match(pat) é equivalente a string.match(S, pat)

---
Eric
br.linkedin.com/in/echiesse

Andrws Vieira

unread,
Jul 4, 2012, 9:22:49 PM7/4/12
to lua...@googlegroups.com
Nice, muito obrigado por todos esclarecimentos :)

Abraços.

Rogerio Medeiros

unread,
Jul 4, 2012, 9:12:34 PM7/4/12
to lua...@googlegroups.com
Rapaz isso aqui vai te ajudar a entender rs http://pgl.yoyo.org/luai/i/string.match

Em 4 de julho de 2012 21:45, Luis Carvalho <lexca...@gmail.com> escreveu:
> >A string em questão pode ser gigante, com vários espaços, etc ...
> >Porém quero sempre quebrar ela em duas na primeira ocorrência de um espaço,



--
att,

Rogerio

A complicação se descomplica na mesma proporção que fazemos os nós se desatarem ao tecer o conhecimento do saber.

Reply all
Reply to author
Forward
0 new messages