Seite 1 von 1

Verfasst: Montag 15. September 2008, 20:48
von BlackJack
@Schaf220: Deine Darstellung der Daten ist übrigens suboptimal, weil der Bytewert von 'š' von der verwendeten Kodierung abhängt. Nicht jeder verwendet cp1252.

Code: Alles auswählen

def unpack(data):
    result = list()
    data = iter(data)
    for character in data:
        if ord(character) > 127:
            result.append(data.next() * (ord(character) - 127))
        else:
            result.append(character)
    return ''.join(result)

def main():
    packed_data = 'rldtxtabcd\x9aEabcd'
    print unpack(packed_data)

Verfasst: Montag 15. September 2008, 21:00
von abgdf
Ach so, jetzt ist's schon fertig ...

Hatte sowieso nicht genau verstanden, wie das gemeint war.
War (dicht am Original) soweit:

Code: Alles auswählen

l = ["r", "l", "d", "t", "x", "t", "a", "b", "c", "d", "s", "E", "a", "b", "c", "d"]

l2 = l[:]

for i in range(0, len(l) - 1, 1):
    l2[i + 1] = ord(l[i]) * l[i + 1]

for i in l2:
    print i
Gruß

Verfasst: Dienstag 16. September 2008, 08:26
von sea-live
DANKE an die Moderatoren für die ausführlich hilfestellung und das Eindrucksvolle aufzeigen der OOp Sprachorientierten Programmierung

Leute wie ich und auch warscheinlich Schaf220 die von der ablauforitierten seite kommen
denken in diesen sachen in die falsche richtung.

Verfasst: Dienstag 16. September 2008, 10:44
von BlackJack
Also ich sehe da jetzt nicht besonders viel OOP-spezifisches. Meine Lösung ist doch "ablauforientiert". Mal abgesehen von der Polymorhie bietet das nicht so besonders viel mehr als dieses (ungetestete) C-Schnippsel:

Code: Alles auswählen

void unpack(void)
{
    int byte, count, i;
    
    while ((byte = get_byte()) != -1) {
        if (byte & 0x80) {
            count = byte & 0x7f;
            byte = get_byte();
            for (i = 0; i < count; ++i) put_byte(byte);
        } else {
            put_byte(byte);
        }
    }
}