Jump to content

Duvidas em cortar strings


Recommended Posts

Posted

Boa noite, estou a fazer um programa em linguagem C, que lê um ficheiro XML, e armazena umas certas informações num vector de estruturas.

Não estou a usar nenhuma biblioteca para efectuar o parsing, estou mesmo a fazê-lo à mão.

Como tal, quando leio uma linha do género:

<title>Meu titulo</title>

como faço para eliminar os tags <title> e </title> da string que vou armazenar no vector de estruturas.

Já tentei utilizar a função strtok, e não estou a conseguir chegar ao resultado pretendido, alguém me consegue ajudar?

Posted

Eu não sei de fazer o parsing de XML na mão em C é uma boa idéia. Já ouvi histórias de terror de pessoas que tentaram fazer o mesmo. Em outras linguagens, isto pode ser mais fácil usando recursos como expressões regulares (REGEX), e rotinas de manipulação de strings, mas em C, isto pode ser muito complicado de fazer corretamente.

Fernando Lage Bastos - MCP/MCTS/MCPD

Posted

Sim, mas não posso fazer noutras linguagens, a ideia é mesmo fazê-lo em C. Eu tenho a perfeita noção de que esse parsing é mais fácil de fazer quer seja em Java, quer seja utilizando C#, contudo o C é a minha unica opção para este programa. E esqueci-me de mencionar uma coisa, o ficheiro é sempre estruturado da mesma forma, ou seja, não é sempre o mesmo, mas as alterações ao ficheiro XML são todas controladas e facilmente programadas, logo a leitura do ficheiro XML no meu caso, pode ser feita utilizando simples condições de leitura e comparação de strings, contudo, é o que eu estava a dizer, estou a ter problemas numa função para cortar strings, retirar-lhe partes... Mas agradeço a tua resposta petvetbr. 😄

Posted

A ideia seria procurares as posições consecutivas de caracteres '<' e '>' e registares o nome que se encontra dentro (neste caso o 'title') numa stack, removendo-o da stack quando encontras a tag de fecho (ou seja, '/title').

“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

Posted

Muito obrigado a todos, peço desculpa mais uma vez, aproveito para adicionar mais uma informação, que não me pareceu relevante dado a pergunta que coloquei, o programa é em Linux, e não em Windows... Logo a biblioteca de parsing da microsoft também não poderei utilizar. 😄

Quanto à opção que me deste KTachyon, já tinha pensado nisso, mas isso não se tornaria pesado? Não me interessava também que o programa se tornasse lento, daí estar a tentar ao máximo usar as funções e bibliotecas já criadas para manipulação de strings, uma vez que já estão(penso eu) optimizadas...

Posted

A funcao strstr() acha a primeira string dentro doutra string.

Depois de achares, por exemplo, <title> podes pesquisar </title> e teres a certeza que achaste o correspondente, desde que nao possa haver tags dentro de tags iguais.

What have you tried?

Não respondo a dúvidas por PM

A minha bola de cristal está para compor; deve ficar pronta para a semana.

Torna os teus tópicos mais atractivos e legíveis usando a tag CODE para colorir o código!

Posted

Muitas das coisas que tu imaginas optimizadas, não estão exactamente optimizadas. De facto, muitas das funções existentes nas bibliotecas de C foram desenvolvidas para resolverem problemas genéricos e muitas vezes fazem uma utilização de recursos bastante superiores de forma a prevenir situações em casos genéricos que podem não existir em casos específicos.

Essas funções não estão mais optimizadas que a função mais optimizada que possa ser implementada para o teu caso específico. No máximo estarão tão optimizadas como a solução mais optimizada.

De qualquer forma, fazeres a procura pelas ocorrências sucessivas de '<' e '>' é uma coisa relativamente simples que consiste em verificar se existe um determinado caracter em posições sucessivas. A não ser que saibas sempre quais são as tags que aparecem nos ficheiros e que nunca aparecem ficheiros inválidos, penso que a melhor solução seria mesmo teres uma stack que te permitisse manter o controlo sobre a árvore do XML.

“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

Posted

Obrigado a todos pela ajuda, obrigado pelo esclarecimento da optimização KTachyon, de facto não ponderei os possiveis casos especificos que poderão existir dentro das funções das bibliotecas de C.

O problema já foi resolvido, em parte graças a ti KTachyon, comecei a pensar nas caracteristicas da função strtok() e consegui chegar a uma conclusão, o objectivo da função, é "cortar" a string dando-lhe uma sub-string que contém o critério de "corte"...

"Corte" porque na realidade o que ela faz é divisão da string em tokens.

"Cortando" a string, primeiro no caracter : ">", ficamos com a string : "My title</title>", que se "cortarmos" de novo, mas desta vez com critério "<", ficamos com "My title" que era exactamente o pretendido...

Obrigad a todos os que tentaram ajudar... 😄 Abraço

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.