Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht Das deutsche QBasic- und FreeBASIC-Forum
Für euch erreichbar unter qb-forum.de, fb-forum.de und freebasic-forum.de!
 
FAQFAQ   SuchenSuchen   MitgliederlisteMitgliederliste   BenutzergruppenBenutzergruppen  RegistrierenRegistrieren
ProfilProfil   Einloggen, um private Nachrichten zu lesenEinloggen, um private Nachrichten zu lesen   LoginLogin
Zur Begleitseite des Forums / Chat / Impressum
Aktueller Forenpartner:

Felder in Dateien ändern

 
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC.
Vorheriges Thema anzeigen :: Nächstes Thema anzeigen  
Autor Nachricht
kilix



Anmeldungsdatum: 05.02.2022
Beiträge: 175

BeitragVerfasst am: 24.04.2022, 10:01    Titel: Felder in Dateien ändern Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
grindstone



Anmeldungsdatum: 03.10.2010
Beiträge: 1208
Wohnort: Ruhrpott

BeitragVerfasst am: 30.04.2022, 20:35    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden E-Mail senden
kilix



Anmeldungsdatum: 05.02.2022
Beiträge: 175

BeitragVerfasst am: 01.05.2022, 08:22    Titel: Antworten mit Zitat

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
Benutzer-Profile anzeigen Private Nachricht senden
Beiträge der letzten Zeit anzeigen:   
Neues Thema eröffnen   Neue Antwort erstellen    Das deutsche QBasic- und FreeBASIC-Forum Foren-Übersicht -> Allgemeine Fragen zu FreeBASIC. Alle Zeiten sind GMT + 1 Stunde
Seite 1 von 1

 
Gehe zu:  
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.

 Impressum :: Datenschutz