Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Datensatz Komponente (https://www.delphipraxis.net/2908-datensatz-komponente.html)

Snoop007 13. Feb 2003 01:24


Datensatz Komponente
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
da ich mich viel mit strukturierten Dateien beschäftige und im Prinzip immer das selbe schreibe dachte ich mir, mensch, machste mal eine Komponente :)

und da ist sie

Diese komponente ermöglicht euch ein einfaches
lesen
schreiben
ändern
neu erstellen
und anzeigen von datensätzen

zur zeit kann sie nur einen datensatz pro zeile lesen, wenn es erwünscht ist ändere ich dies noch ab.

Beschreibung :
die Datei UnitTStruckturdaten.pas in das Verzeichnis kopieren in dem das Programm ist, welches auf die Datei zugreifen soll.

eine variable vom typ TStruckturdaten erstellen, das wars

ein kleines fertiges programm liegt in der zip datei mitbei

über antworten würde ich mich sehr freuen ! :)

Luckie 13. Feb 2003 07:01

Re: Datensattz Komponente
 
Zitat:

Zitat von Snoop007
Beschreibung :
die Datei UnitTStruckturdaten.pas in das Verzeichnis kopieren in dem das Programm ist, welches auf die Datei zugreifen soll.

Dann ist es keine Komponente, sondern nur ein Unit. :wink:

Snoop007 13. Feb 2003 11:44

stümmt :)

sakura 13. Feb 2003 12:41

Hi,

Habe mir mal gerade Deine Unit angeschaut, dabei sind folgende Fragen aufgetaucht.
  1. warum benutzt die die veraltete object Direktive anstatt der seit Delphi 1 empfohlenen class Direktive ?
  2. Warum nutzt Du keine Streams anstatt von ReadLn, Reset, etc.
  3. Da das Ändern des Dateinamen nicht möglich ist (nach dem Laden), warum den Namen nicht gleich bei Create als Parameter übergeben
  4. Rein aus Prinzip, warum fangen KlassenVariablen nicht mit F an, und warum nutzt Du nicht die Groß-/Kleinschreibung wie üblich

Das Gute: Ich glaube, dass die Unit ganz nützlich werden kann :D

...:cat:...

Snoop007 13. Feb 2003 15:06

Liste der Anhänge anzeigen (Anzahl: 1)
1. hab ich geändert, ist das nicht wurscht ?
2. warum mit einem Fernseher nach Fliegen schlagen ? ;)
3. hab ich geändert
4. weil es schon füh war ;)

kleine veränderungen habe ich vorgenommen

über mehrere zeilen einen datensatz lesen
kategorien können über einen namen angesprochen werden
datei kann unter anderem namen gespeichert werden.

mimi 13. Feb 2003 15:19

Nicht schlecht, habe mir ebend das Demo angesen.
Aber könntes ihr es noch so machen das man auch binay apseichern kann ?
also so das man es nicht mehr lesen kann ?

Snoop007 13. Feb 2003 15:25

binär abspeicher ? du meinst anstatt a z.b. 00001111 ?
da würde die datei grösse um das 8 fache ansteigen

sakura 13. Feb 2003 15:32

Zitat:

Zitat von Snoop007
1. hab ich geändert, ist das nicht wurscht ?

Um mal Borland zu zitieren: Object types are supported for backward compatibility only. Their use is not recommended.
Ausserdem gibt es keine Create, Destroy, etc., welches jeder versierte Programmierer nutzt. In der .NET Zukunft kann man New, Dispose, etc. nicht nuzten, welche für object Objekte (ob offensichtlich oder versteckt) nötig sind.

Zitat:

Zitat von Snoop007
2. warum mit einem Fernseher nach Fliegen schlagen ? ;)

Weil Streams besser und efizienter implementiert sind.

Zitat:

Zitat von Snoop007
3. hab ich geändert

:)

Zitat:

Zitat von Snoop007
4. weil es schon füh war ;)

Na gut...

...:cat:...

mimi 13. Feb 2003 17:01

ja in 01010 oder so als ob du ein record abspeicherst.

Snoop007 13. Feb 2003 17:16

Zitat:

Zitat von Snoop007
binär abspeicher ? du meinst anstatt a z.b. 00001111 ?
da würde die datei grösse um das 8 fache ansteigen

sorry, da sehe ich keinen sinn drin, aber da die unti ja open-source ist, kannst du das ja selber rein machen :)

mimi 13. Feb 2003 17:23

irgenwo habe ich mal gelesen das die Datei dann kleiner wird ;)
aber ich weiß nicht mehr wodurch.....

Luckie 13. Feb 2003 17:29

Im Computer ist alles binär. Es ist nur eine Frage der Interpretation der Daten.
Es heißt ja nicht umsonst:
Zitat:

Was man mit 0 und 1 so alles machen kann.
:wink:

Snoop007 13. Feb 2003 19:56

und noch ein paar funktionen mehr ... :)

max speicherangabe
von position x ( zeile )aus der datei an lesen
sortierung ( bubble sort ) auf und abwärtz der einzelnen kategorien
informationen wieviel speicher gerade verbraucht wird

was mir eben beim schreiben aufgefallen ist, sollte die datei nicht komplett in den speicher geschrieben worden sein, und eine neue instanz wird angelegt, werden die nicht eingelesenen datensätze gelöscht !

ich habe ein paar bugs gefunden, solange diese nicht ausgebügelt sind, lasse ich die unit offline

Snoop007 18. Feb 2003 12:42

Liste der Anhänge anzeigen (Anzahl: 1)
UPDATE !!!
ich habe die ganze unit neugeschrieben.
jetzt ist es möglich grosse dateien im speicher recht klein zu halte
[grösse im speicher = (grösse der datei * 2) + 1 mb]

ein bsp. liegt im programm mitbei.

WIRD DIE 8 MB GROSSE DATEI ERZEUGT, DAUERT DIES JA NACH PROZESSOR UNTERSCHIEDLICH LANGE, EINFACH WARTEN BIS DIE DATEI ERSTELLT WURDE

die unit bietet die möglichkeit, struckturierte daten
einzulesen
anzuzeigen
zu löschen

zugriff der kategorien über den namen oder index,
anzeige der gelesenen datensätze und kategorien

über antworten würde ich mich sehr freuen ! :)

sakura 18. Feb 2003 12:58

Erst einmal: schön, dass Du jetzt class nutzt :)

Ein paar Tipps, ich habe jetzt nicht den kompletten Source studiert ;)

Definieren einen Datentyp für array of array of string;
Delphi-Quellcode:
type
  TDoubleStringArray = array of array of string;
// und
  TStringArray = array of string;
Dadurch wird die Parameterübergabe u.U. einfachen

Ausserdem würde ich einen Record zu definieren. Aus
Delphi-Quellcode:
type
  TDatenNeu = class
  private
  public
    FDaten : array of array of string;
end;
würde dann
Delphi-Quellcode:
type
  TDatenNeu = record
    Daten : TDoubleStringArray;
  end;
Wandle die PUBLIC Daten in Properties um, das gibt Dir mehr Kontrolle. Ausserdem ist es unüblich direkten Zugriff auf Variablen einer Klasse zu geben - zumal diese dann mit F beginnen. Aus
Delphi-Quellcode:
  public
    FSeparator : char;
    FNullByte : char;
    FFileName : string;
wird
Delphi-Quellcode:
private
    FSeparator : char;
    FNullByte : char;
    FFileName : string;
  public
    property Separator: char read FSeparator write FSeparator;
    property NullByte: char read FNullByte write FNullByte;
    property FileName: string read FFileName write FFileName;
Dadurch kannst Du die Änderungen in diesen Variablen auf Wunsch auch abfangen, wenn Du Prozeduren an dieser Stelle nutzt (nicht gezeigt).
Nutze einen destructor Destory; override;, um deine dynamischen Arrays ggf. wieder vollständig zu leeren. Dynamische Arrays mit Strings können Probleme bereiten.
Nutzte try...finally...end Statements, um Dateihandles und Objekte garantiert freizugeben.

Abschließend: Die Unit ist schon um weites besser als das Original. Weiter so :)

...:cat:...

mschaefer 9. Jul 2009 14:32

Re: Datensatz Komponente
 
Liste der Anhänge anzeigen (Anzahl: 1)
Moin, moin,

hatte vor einiger Zeit ein Menue für Dos-Batch´s zu organisieren. Da kam mir die Unit unter den Compiler und ich habe daraus ein Miniprojekt gemacht. Das findet sich nun im Anhang.

Grüße // Martin


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:04 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz