Code Review: Zwei Listen vergleichen

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

Code Review: Zwei Listen vergleichen

Beitragvon lord.hong » 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

Beitragvon 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

Beitragvon lord.hong » 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:

Beitragvon nkoehring » Sonntag 2. März 2008, 17:00

Bei der Gelegenheit koenntest du gleich mal das "with"-Keyword naeher erleutern BlackJack :wink:
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » 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:

Beitragvon nkoehring » Freitag 14. März 2008, 02:48

ja ihr habt ja recht :oops:

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder