dbfpy(dBase)-wie lösche ich Inhalte einer Tabelle?

Installation und Anwendung von Datenbankschnittstellen wie SQLite, PostgreSQL, MariaDB/MySQL, der DB-API 2.0 und sonstigen Datenbanksystemen.
BlackJack

Rad neu erfinden!? Du müsstest nur die `pack()`-Methode in Python implementieren. Also wenn ich zwischen ein paar Zeilen Python-Code schreiben oder Java verwenden müssen, entscheiden müsste… :roll:
satart
User
Beiträge: 8
Registriert: Mittwoch 17. Dezember 2008, 21:15

naja nur ein paar zeilen sind es auch nicht.
Der Zugriff auf dBase ist halt nur ein Teil der Aufgabe.

Da ich noch nie richtig mit Python gearbeitet habe, dachte ich
dass das Projekt eine gute Gelegenheit wäre mich mit Python
zubeschäftigen.... aber das nächste Projekt kommt bestimmt :-)

Ich will jetzt auch keine Diskussion starten über Java versus Python.
In Java bin ich halt zuhause.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Manoman, der Java-Code ist nicht gerade eine Meisterleistung von Heiner. In den 1000 Zeilen, die eine xBase-Datei verarbeiten können, sind gerade mal 40 für das Packen zuständig. Habe mir jetzt nicht die Mühe gemacht, was es da in Python schon gibt, aber der Algorithmus in Java reduziert sich auf

Code: Alles auswählen

class XBase:
    def pack(self):
        i = j = 1
        self.go_to_record(i)
        while not self.eof:
            if self.is_deleted():
                i += 1
            else:
                if i != j:
                    self.go_to_record(i)
                    buf = self.get_record()
                    self.go_to_record(j)
                    self.set_record(buf)
                i += 1
                j += 1
            self.go_to_record(i)
        self.set_record_count(j)
Offenbar kann man mit `go_to_record() einen Cursor zu einem Datensatz bewegen und es wird ein EOF-Status gesetzt. Für einen Record kann man prüfen, ob er gelöscht wurde. Schließlich kann man die Daten lesen und schreiben.

Den anfänglichen Test, ob wohl überhaupt gelöschte Daten vorhanden sind, halte ich für überflüssig.

Den Rest der 1000 Zeilen kann man wahrscheinlich (da sie sehr viel heiße Luft enthalten) in 2-3 Stunden portieren.



Stefan
BlackJack

@satart: Mit ein paar Zeilen Quelltext meinte ich das nachrüsten von der `pack()`-Methode bei `dbfpy`. Das sollte nicht viel komplizierter sein, als die Portierung, die sma gezeigt hat. Ist ja bloss eine Schleife die einmal durch die Datensätze geht. Man muss halt schauen was `dbfpy` da an Methoden bietet.
Antworten