Jump to content
spcl

transformacao de codigo

Recommended Posts

spcl

bom dia,

Estou aqui com um problema apenas de estudo, ja procurei por muito lado e sinceramente não sei se e possível ou não fazer o seguinte:

tenho um ficheiro externo ex:

asd.asd com o conteúdo

texto aleatorio ... start print "asd" end texto aleatório ...

o que eu queria era depois noutro ficheiro este sim em python pegar o tal de asd.asd e escrever tudo normalmente como um print, excepto o que esta entre start e end, aqui o que eu queria fazer era executar o que estava entre os dois, isto e possível fazer? sem framework nem nada?

Share this post


Link to post
Share on other sites
thoga31

Sim, é possível. Virtualmente tudo é possível na informática.

Neste caso podias fazer uma contagem de "start" e "end" e mostrar os conteúdos entre "end" e "start" e deixar de lado o que estava entre "start" e "end" para um parser.


Knowledge is free!

Share this post


Link to post
Share on other sites
Pedro C.

Pois. O python tem regras de sintaxe para identação por exemplo. É a unica coisa que identifica o que está dentro dos blocos de ciclos ou ifs, por exemplo. No teu ficheiro original essas regras já estão inseridas?

Se não tiverem então tens um problema sério. Por exemplo:

i=1
while i < 10:
 i = i + 1
 print i

Posso imaginar isto a aparecer assim (entre outras formulações possíveis, nomeadamente nos espaços):

i=1 while i <10: i=i+1 print i

O que poderia ser o código inicial ou:

i=1
while i < 10:
 i = i + 1
print i

Onde o print ficou fora do bloco do while. Se já tiveres as regras inseridas lá:

i=1\nwhile i <10:\n\t i=i+1\n\tprint i\n

Onde o "\n" significaria mudança de linha e "\t" o espaço da tecla "tab" (não me lembro do nome disto e sinceramente não sei se o "\t" é o símbolo indicado) poderias fazer cópia directa para uma folha de script e corre-lo. Outra opção é controlares os significados dos blocos controlando os símbolos no teu ficheiro de texto (como se faz em C, Java, bem..., praticamente todas as linguagens excepto Python), melhor dizendo, metendo um símbolo de começo e fim de bloco que sabes que não vai aparecer no código (ex: $ para começo de bloco, ! para fim. Digo estes porque nunca me lembro de os ter usado em código...).

Podes exemplificar uma porção do teu ficheiro de texto que tens de processar (se conseguires deixa que a citação traga também os símbolos de instrução). Para fazeres isto lê o teu ficheiro para dentro de uma string em Python e cita essa string aqui (acho que assim aparece tudo).

Edited by Pedro C.

Share this post


Link to post
Share on other sites
Dr_Lion

Resumindo, isso que queres é basico de fazer logo depois de descobrires como vais ter um ficheiro "asd.asd" que mantenha as quebras de linha e tabulações/espaços nas linhas de código que tens perdidas pelo meio do ficheiro.

Share this post


Link to post
Share on other sites
KTachyon

Penso que com alguns truques deves poder adicionar funções a uma classe em Python utilizando o setattr(), ficheiros temporários e imports em runtime.

Alternativamente, com ficheiros temporários e execfile() também deves conseguir obter resultados.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
spcl

muito obrigado a todos, vou dar uma vista de olhos para ver se e isto mesmo o que eu procurava

na verdade o que procurava era algo para fazer uma função em python para trabalhar "facilmente" em web sem frameworks, uma especie de um include que executasse logo todo o código

ex:

funcname(file.format)

isto dentro do arquivo principal

no file.format o que teria era algo como o Pedro C disse, uma simulação de ficheiro estilo php em que quando queria iniciar código python digitava ex <?py e fechava com ?> algo assim, o que tivesse neste ficheiro fora disto era imprimido normalmente como html, o que tivesse dentro aqui sim tinha de manter as tais quebras de linha e ao mesmo tempo executar os códigos, como consultas de bd, prints de variáveis trabalhadas em cima...

obrigado

Share this post


Link to post
Share on other sites
KTachyon

Mas para isso tens uma série de template engines disponíveis, como a Mako, a Genshi ou a Jinja. Existem dezenas, é uma questão de escolheres a que mais te agrada.


“There are two ways of constructing a software design: One way is to make it so simple that there are obviously no deficiencies, and the other way is to make it so complicated that there are no obvious deficiencies. The first method is far more difficult.”

-- Tony Hoare

Share this post


Link to post
Share on other sites
Pedro C.

Bem, podes tentar o mais simples:

In [13]: a= 'qwrqrf\n\tfdsfadg\n\nfsdfasd\tfsdfew\tstart\codigopython\nstop'

In [14]: a.index('start')
Out[14]: 32

In [15]: a.index('stop')
Out[15]: 51

In [16]: len('start')
Out[16]: 5

In [17]: a[32+5:51]
Out[17]: '\\codigopython\n'

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.