Seite 1 von 1

Code Review: Zwei Listen vergleichen

Verfasst: Dienstag 26. Februar 2008, 14:17
von lord.hong
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

Verfasst: Dienstag 26. Februar 2008, 16:17
von BlackJack
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)

Verfasst: Freitag 29. Februar 2008, 18:38
von lord.hong
Ok, danke! Das wird noch. :wink:

Verfasst: Sonntag 2. März 2008, 17:00
von nkoehring
Bei der Gelegenheit koenntest du gleich mal das "with"-Keyword naeher erleutern BlackJack :wink:

Verfasst: Sonntag 2. März 2008, 21:40
von lunar

Verfasst: Sonntag 2. März 2008, 22:21
von Leonidas
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.

Verfasst: Freitag 14. März 2008, 02:48
von nkoehring
ja ihr habt ja recht :oops: