Code Review: Zwei Listen vergleichen

Code-Stücke können hier veröffentlicht werden.
Antworten
lord.hong
User
Beiträge: 26
Registriert: Samstag 19. August 2006, 12:32

Dienstag 26. Februar 2008, 14:17

Hallo an alle,

ich habe mein erstes, kleines Programm geschrieben, welches zwei Listen vergleicht.

Ich habe ein Headerfile (C++) welches eine Deklaration hat:

Code: Alles auswählen

#ifndef FWD_H
#define FWD_H

class INameA;
class INameB;
class CNameC;
class CNameD;

#endif
Und ein Verzeichnis in dem sich die Headerfiles befinden:

INameA.h
INameB.h
CNameC.h
CNameE.h

Nun möchte ich, dass das Headerfile immer aktuell ist und habe ein Python Skript geschrieben, welches auch funktioniert.

Wenn jemand Zeit und Lust hat, könnte er ein Code Review durchführen?

Code: Alles auswählen

import os

file = open('fwd.h', "r")

v = file.readlines()

file.close()

declarations = []

for line in v:
    # line = line.lower()
    # print line
    if line.find('class') > 0:
        line = line.lstrip(' ')
        line = line.split(' ')
        line = line[1].rstrip(';')
        line = line.replace('\n', ' ')
        line = line.replace(';', ' ')
        line = line.rstrip(' ')
        # print "LINE " + line
        declarations.append(line)

declarations.sort()
print declarations

definitions = []

for file in os.listdir('.'):
    w = file.rsplit('\n')
    # print w
    for line in w:
        if (line.startswith('I') or line.startswith('C')) and line.endswith('.h'):
            line = line.replace('.h', ' ')
            line = line.rstrip(' ')
            # print line
            definitions.append(line)

definitions.sort()
print definitions

differcence1 = []
for item in declarations:
    if not item in definitions:
        differcence1.append(item)
print differcence1

differcence2 = []
for item in definitions:
    if not item in declarations:
        differcence2.append(item)
print differcence2
Vielen Dank,
Markus
BlackJack

Dienstag 26. Februar 2008, 16:17

Ungetestet:

Code: Alles auswählen

from __future__ import with_statement
import os

HEADER_SUFFIX = '.h'

with open('fwd.h') as lines:
    declarations = set(line.split(None, 1)[1]
                       for line in lines if 'class' in line)

definitions = set(name[:-len(HEADER_SUFFIX)]
                  for name in os.listdir('.')
                  if name[0] in 'IC' and name.endswith(HEADER_SUFFIX))

print sorted(declarations - definitions)
print sorted(definitions - declarations)
lord.hong
User
Beiträge: 26
Registriert: Samstag 19. August 2006, 12:32

Freitag 29. Februar 2008, 18:38

Ok, danke! Das wird noch. :wink:
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Sonntag 2. März 2008, 17:00

Bei der Gelegenheit koenntest du gleich mal das "with"-Keyword naeher erleutern BlackJack :wink:
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Sonntag 2. März 2008, 22:21

lunar hat geschrieben:rtfm ;)
Ja, war auch mein Gedanke. Wozu etwas erklären, was recht einfach nachgelesen werden kann. Zudem das ``with``-Statement insofern schön ist, da es einfach ist sich eigene Context-Manager zu schreiben. Bin mal gespannt, wann das ``with``-Statement eine breitere Unterstützung bekommen wird. So sind Dekoratoren erst seit gar nicht so langer Zeit populär, obschon sie doch seit längerem schon existieren.

Manchmal ist ein bisschen syntaktischer Zucker genau das richtige um einem Sprachfeature auf die Sprünge zu helfen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
nkoehring
User
Beiträge: 543
Registriert: Mittwoch 7. Februar 2007, 17:37
Wohnort: naehe Halle/Saale
Kontaktdaten:

Freitag 14. März 2008, 02:48

ja ihr habt ja recht :oops:
[url=http://www.python-forum.de/post-86552.html]~ Wahnsinn ist auch nur eine andere Form der Intelligenz ~[/url]
hackerkey://v4sw6CYUShw5pr7Uck3ma3/4u7LNw2/3TXGm5l6+GSOarch/i2e6+t2b9GOen7g5RAPa2XsMr2
Antworten