AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Datei mit FileStream auslesen

Ein Thema von delphinewbie · begonnen am 27. Aug 2010 · letzter Beitrag vom 10. Sep 2010
Antwort Antwort
blackfin
(Gast)

n/a Beiträge
 
#1

AW: Datei mit FileStream auslesen

  Alt 27. Aug 2010, 11:39
Auch wenn es mit dem Fehler nichts direkt zu tun hat:
Zusätzlich zu den genannten Dingen solltest du dir vielleicht überlegen, deinen Record-Typ nicht bytes zu nennen.

Ich weiss, standardmäßig ist bytes nicht definiert, aber der Name wäre mir zu generisch und würde mir Bauchschmerzen in Hinblick auf die Zukunft bereiten. Eventuell kommt es irgendwann deswegen zu sehr merkwürdigen Fehlern, die man nicht mehr wirklich versteht, ähnlich wie wenn man reserved words von SQL-Datenbanken als Feldnamen benutzt oder Vergleichbares.
Zudem kommt, dass der Name so wenig aussagekräftig ist, dass du vielleicht in einem halben Jahr nicht mehr weisst, warum das Ding "bytes" heisst, obwohl es ja die Struktur einer definierten Datei angibt und nicht nur "irgendwelche Bytes". Nenn das Ding lieber nach dem Typ der Datei, je nachdem was es ist. Also zum Beispiel: CustomerFileBytes TCustomerFileBytes oder was weiss ich sonst

Geändert von blackfin (27. Aug 2010 um 12:18 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.404 Beiträge
 
Delphi 12 Athens
 
#2

AW: Datei mit FileStream auslesen

  Alt 27. Aug 2010, 11:54
Ich weiss, standardmäßig ist bytes nicht definiert, aber der Name wäre mir zu generisch und würde mir Bauchschmerzen in Hinblick auf die Zukunft bereiten.
Da wir unsere Typen meißt mit einem T kennzeichnen ... TBytes gibt es schon.
Ein Therapeut entspricht 1024 Gigapeut.
  Mit Zitat antworten Zitat
blackfin
(Gast)

n/a Beiträge
 
#3

AW: Datei mit FileStream auslesen

  Alt 27. Aug 2010, 12:01
Rüschtüsch...also gleich mal den Vorschlag korrigieren
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.662 Beiträge
 
Delphi 12 Athens
 
#4

AW: Datei mit FileStream auslesen

  Alt 27. Aug 2010, 12:05
Delphi-Quellcode:
type
  TEinEindeutigerNameOhneVerwechslungsgefahr = record
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
delphinewbie

Registriert seit: 27. Aug 2010
47 Beiträge
 
#5

AW: Datei mit FileStream auslesen

  Alt 30. Aug 2010, 08:16
Hi,
danke für eure Tipps. Habe es umbenannt, nur ist das leider nicht mein Problem...
Ich möchte nochmal nachhaken : Ist TFilestream tatsächlich die einzige Variante, derartige Dateien auszulesen ?

tschüß
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.662 Beiträge
 
Delphi 12 Athens
 
#6

AW: Datei mit FileStream auslesen

  Alt 30. Aug 2010, 08:19
Nö, TMemoryStream z.B. ginge auch. Was wohl nicht (so einfach) geht, ist das althergebrachte satzweise Lesen, da die Größe des Blocks ja variiert.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
Nachteule

Registriert seit: 22. Mär 2007
Ort: München
37 Beiträge
 
Delphi 2009 Enterprise
 
#7

AW: Datei mit FileStream auslesen

  Alt 30. Aug 2010, 09:05
Hi,
danke für eure Tipps. Habe es umbenannt, nur ist das leider nicht mein Problem...
Ich möchte nochmal nachhaken : Ist TFilestream tatsächlich die einzige Variante, derartige Dateien auszulesen ?

tschüß
Delphi-Quellcode:
var
  myStringList : TStringList;
begin
  myStringlist := TStringList.Create;
  myStringList.LoadFromFile('bah.txt');
  // mach irgendwas
  ...

  myStringList.free;
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

Registriert seit: 17. Sep 2006
Ort: Barchfeld
27.662 Beiträge
 
Delphi 12 Athens
 
#8

AW: Datei mit FileStream auslesen

  Alt 30. Aug 2010, 10:20
So wie ich das Dateiformat verstanden habe kommst Du mit TStringlist nicht zum Ziel.
Detlef
"Ich habe Angst vor dem Tag, an dem die Technologie unsere menschlichen Interaktionen übertrumpft. Die Welt wird eine Generation von Idioten bekommen." (Albert Einstein)
Dieser Tag ist längst gekommen
  Mit Zitat antworten Zitat
shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#9

AW: Datei mit FileStream auslesen

  Alt 31. Aug 2010, 16:50
Musst du die Datei bloss einlesen oder muss die Datei später auch verändert geschrieben werden?
Falls die Datei nur gelesen werden muss, könntest du Dir viel Arbeit sparen, wenn du eine Adapterklasse einsetzt.

Hier mal als Vergleich zwischen deiner alten Technik und meinem neuen Vorschlag:
Delphi-Quellcode:
Read(ds.FileID,sizeof(word)); // ALT
ds.FileID := h.ReadWord; // NEU

// ALT - 3 Zeilen
Read(ds.string_length_comment[i],sizeof(word));
Setlength(ds.string_comment[i], ds.string_length_comment[i]);
Read(ds.string_comment[i][1],ds.string_length_comment[i]);

// NEU - nur eine Zeile
ds.string_length_comment[i] := h.ReadShortString;
Beim Einlesen eines Words ist der Unterschied noch recht gering,
aber beim Einlesen von den Strings zeigt sich doch, dass die neue Technik viel angenehmer ist.

Ausserdem kannst du Dir damit sämtliche Längenangaben in dem Record sparen
und dich voll auf die Nutzdaten konzentrieren.

Hier wäre mal die Deklaration der Adapterklasse:
Delphi-Quellcode:
  TStreamAdapter = class(TObject)
  protected
    FStream : TStream;
  public
    constructor Create(AStream:TStream;AOwnsStream: Boolean = False);
    destructor Destroy;override;
    function ReadBoolean: Boolean;
    function ReadChar: Char;
    function ReadCurrency: Currency;
    function ReadDateTime: TDateTime;
    function ReadDouble: Double;
    function ReadExtended: Extended;
    function ReadInt64: Int64;
    function ReadInteger: Integer;
    function ReadCString: string;
    function ReadShortString: string;
    function ReadSingle: Single;
    function ReadSizedString: string;
    function ReadWord:Word;
    procedure WriteBoolean(Value: Boolean);
    procedure WriteChar(Value: Char);
    procedure WriteCurrency(const Value: Currency);
    procedure WriteDateTime(const Value: TDateTime);
    procedure WriteDouble(const Value: Double);
    procedure WriteExtended(const Value: Extended);
    procedure WriteInt64(Value: Int64); overload;
    procedure WriteInteger(Value: Integer); overload;
    procedure WriteStringDelimitedByNull(const Value: string);
    procedure WriteShortString(const Value: ShortString);
    procedure WriteSingle(const Value: Single);
    procedure WriteSizedString(const Value: string);
    procedure WriteWord(const Value:Word);
  end;
Bei Interesse kann ich dir noch mehr zu der Adapterklasse schreiben.
Andreas

Geändert von shmia (31. Aug 2010 um 16:54 Uhr)
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:06 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