2009-10-02 10 views
0

Pour analyser un fichier texte d'entrée et générer a) un fichier XML et b) un fichier SVG (également XML).S'il vous plaît aidez-moi avec ce programme pour analyser un fichier dans un fichier XML

Le fichier texte d'entrée (input.txt) contient la description d'un certain nombre de centres de distribution de produits et de centres de stockage dans le pays. Chaque ligne décrit soit un centre de distribution unique (centre) soit un centre de stockage, chacun avec un certain nombre de propriétés; chaque nom de propriété (code par exemple) est séparé par sa valeur avec un =.

Exemple (input.txt)

dcenter: code=d1, loc=San Jose, x=100, y=100, ctype=ct1 
dcenter: code=d2, loc=San Ramon, x=300, y=200, ctype=ct2 
storage: code=s1, locFrom=d1, x=50, y=50, rtype=rt1 
storage: code=s2, locFrom=d1, x=-50,y=100, rtype=rt1 

La sortie souhaitée du programme:

Sortie 1

<?xml version="1.0"?> 
<dcenters> 
<dcenter code="d1"> 
<loc> San Jose </loc> 
<x> 100 </x> 
<y> 100 </y> 
<ctype> ct1 </ctype> 
</dcenter> 
<storage code="S1"> 
<locFrom> d1 </locFrom> 
<x> 150 </x> 
<y> 150 </y> 
<rtype> rt1 </rtype> 
</storage> 
<storage code="S2"> 
<locFrom> d1 </locFrom> 
<x> 50 </x> 
<y> 200 </y> 
<rtype> rt1 </rtype> 
</storage> 

S'il vous plaît me aider avec le programme. J'apprécierai vraiment. Supposons que l'entrée est dans la chaîne s;

+0

Quel est le véritable problème que vous rencontrez? Cela semble assez simple. –

+2

Est-ce que ce sont les devoirs? – voyager

+0

J'ai lu ceci et je me suis dit hmmm ... Je me demande s'il est possible d'exécuter XSLT en sens inverse. Il s'avère qu'une personne folle a effectivement mis en œuvre cela. http://www.reversexsl.com/j/ –

Répondre

0

soit par cession directe ou de file.read:

s="""dcenter: code=d1, loc=San Jose, x=100, y=100, ctype=ct1 
dcenter: code=d2, loc=San Ramon, x=300, y=200, ctype=ct2 
storage: code=s1, locFrom=d1, x=50, y=50, rtype=rt1 
storage: code=s2, locFrom=d1, x=-50,y=100, rtype=rt1""" 

Ensuite, vous pouvez ceci:

print '<?xml version="1.0"?>' 
print "<dcenters>" 
for line in s.splitlines(): 
    type, fields = line.split(":") 
    params = fields.split(",") 
    code = params[0].split("=")[1].strip() 
    print '<%s code="%s">' % (type, code) 
    for p in params[1:]: 
     ptype, pvalue = p.strip().split("=") 
     print '<%s> %s </%s>' % (ptype, pvalue, ptype) 
    print '</%s>' % type 
print "</dcenters>" 

Je ne sais pas pourquoi d2 est absent de votre sortie de l'échantillon; Je suppose que c'est par erreur.

+0

Merci d'avoir répondu Martin..J'apprécie vraiment votre aide. En fait, j'ai besoin d'un programme qui peut analyser un fichier texte d'entrée que j'ai montré ci-dessus comme input.txt dans le fichier XML en sortie1. S'il vous plait, j'ai besoin de votre aide avec ceci. –

+0

John, c'est un programme qui va aider. Il est écrit en Python. Si vous ne pouvez pas comprendre le reste à partir de là, je suppose que vous ne savez pas vraiment ce que vous faites. Cela ressemble à des devoirs, et je suis un peu surpris que vous ayez une réponse sans d'abord vous essayer. –

Questions connexes