 |
Das deutsche QBasic- und FreeBASIC-Forum Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
|
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen |
Autor |
Nachricht |
kilix
Anmeldungsdatum: 05.02.2022 Beiträge: 175
|
Verfasst am: 24.04.2022, 11:01 Titel: Felder in Dateien ändern |
|
|
Mein nächstes Problem:
ich musste wegen einer Verbesserung im Konzept in einer Datei ein neues Feld einfügen. Nachdem sich dadurch die Satzlänge ändert muss ich das in allen Programmen die diese Datei verwenden nachziehen (und auch die Datei aus meinen Input-CSV-Dateien neu erstellen, was aber kein Problem ist).
Im Prinzip ist das alles kein Problem nur muss ich Änderungen in bereits fertig gestellten Teilen meines Systems machen.
Wie geht ihr in der Praxis mit diesem Problem um?
Ich habe mir da ein paar Ideen dazu überlegt:
1) Um nicht bei jedem Hinzufügen eines Feldes in einen Datensatz die bestehende Datei umspeichern zu müssen kann ich mir vorstellen jeder Datei von vornherein ein Platzhalterfeld, Annahme STRING * 100, anzufügen. Braucht man nun ein neues Feld, z.B. STRING * 10, ändert man das Platzhalterfeld auf STRING * 90.
Damit muss man in fertigen Programmen in denen das neue Feld nicht benötigt wird nichts ändern.
2) ich habe auch überlegt die Codezeilen mit denen eine Datei beschrieben wird (von DIM AS ... bis zum OPEN) in eine Bibliothek auszulagern - zuammen mit dem Platzhalterfeld lt. 1). Dann müsste man Änderungen nur in der Bibliothek machen.
3) in dem von uns in den 70ern und 80ern entwickelten Applikation mit DEC Basic+ hatte unser Berater eine Möglichkeit geschaffen die Satzbeschreibungen der Dateien in einem Tabellenfile (damals VCA ... Vitual Core Array) zu speichern und mit entsprechenden Funktionen in den Anwendungsprogrammen einzulesen. Das war damals sehr einfach und ersparte uns viel Arbeit. Leider weiß ich heute nicht mehr (war damals auch kein Programmierer) nicht mehr wie das gemacht wurde und mit meiner derzeitigen Erfahrung mit FreeBasic komme ich da auch nicht weit. _________________ Grüße
kilix |
|
Nach oben |
|
 |
grindstone
Anmeldungsdatum: 03.10.2010 Beiträge: 1175 Wohnort: Ruhrpott
|
Verfasst am: 30.04.2022, 21:35 Titel: |
|
|
Mit UDTs ist das Erweitern (oder auch Kürzen und Umsortieren) von CSV-Dateien denkbar einfach: Im altenFormat lesen und im neuen Format abspeichern. Hier ein Beispielprogramm, mit dem du die an anderer Stelle erstellte Datei "datei.dat" um ein Datenfeld "Bemerkung" erweitern kannst. Du brauchst die Datei nur einmal durchlaufen zu lassen, und schon liegt sie im neuen Format vor. Code: | Type tDatensatz
As ULong mitgliedsnummer
As String Name
As String vorname
As ULong plz
As String wohnort
As String bemerkung 'neues datenfeld
Declare Sub speichern(dateinr As ULong)
Declare Sub lesen(dateinr As ULong)
End Type
Sub tDatensatz.speichern(dateinr As ULong) 'neues datenformat
With This
Print #dateinr, mitgliedsnummer; ","; _
Name; ","; _
vorname; ","; _
plz; ","; _
wohnort; ","; _
bemerkung
End With
End Sub
Sub tDatensatz.lesen(dateinr As ULong) 'altes datenformat
With This
Input #dateinr, mitgliedsnummer
Input #dateinr, Name
Input #dateinr, vorname
Input #dateinr, plz
Input #dateinr, wohnort
End With
End Sub
Dim As Integer x
Dim As tDatensatz datensatz
Open ExePath + "\datei.dat" For Input As #1
Open ExePath + "\datei_neu.dat" For Output As #2
Do
datensatz.lesen(1)
datensatz.speichern(2)
Loop Until Eof(1)
Close
|
Gruß
grindstone _________________ For ein halbes Jahr wuste ich nich mahl wie man Proggramira schreibt. Jetzt bin ich einen! |
|
Nach oben |
|
 |
kilix
Anmeldungsdatum: 05.02.2022 Beiträge: 175
|
Verfasst am: 01.05.2022, 09:22 Titel: |
|
|
Vielen Dank für diesen Code! Ich habe die Frage allerdings anders gemeint: ich habe z.B. die Mitgliederdatei die ich in mehreren Programmen verwende. Dieser Datei möchte ich nun beispielsweise ein neues Feld einfügen oder ein Stringfeld vergrößern. Nachdem wie ich bisher programmiere muss ich diese Änderung in allen Programmen durchziehen weil die Satzlänge immer die Summe der Felder ist. Gegebenenfalls muss man die Datei umspeichern (das entfällt bei mir da ich die Datei jederzeit aus der CSV-Datei neu erstellen kann).
Nun suchte ich einen Weg: Wir hatten so etwas in unseren Uralt-System. Es nannte sich Systemindexfile und war ein sogenannter Virtial Core Array (SINX.VC) also ein Satz von Tabellen die als Datei gespeichert waren. Darin hatten wir alle Dateien mit Nummer und Recordbeschreibung und alle verwendeten Codes gespeichert. Änderungen wurden meist nur hier gemacht und waren in allen Programmen wirksam. Natürlich gab es trotzdem genug Fälle bei denen Programme selbst zu ändern waren. Z.B. war es kein Problem ein Feld anzufügen. Die Recordlängen waren durch das Betriebssysten mit 512 Bytes (oder teilen davon) vorgegeben damit gab es immer noch freien Bereich in den man ein neues Feld legen konnte.
Ich habe auch schon Versuche in dieser bzw. ähnlicher Richtung angestellt aber nichts brauchbares gefunden. Das einzige Ergebnis ist, dass ich nun allen Datein einen Reservestring als Platzhalter für spätere Erweiterungen anhänge. _________________ Grüße
kilix |
|
Nach oben |
|
 |
|
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst deine Beiträge in diesem Forum nicht bearbeiten. Du kannst deine Beiträge in diesem Forum nicht löschen. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|