AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi Dyn Array mit Werten aus Datei füllen
Thema durchsuchen
Ansicht
Themen-Optionen

Dyn Array mit Werten aus Datei füllen

Ein Thema von Rungholt · begonnen am 25. Jun 2007 · letzter Beitrag vom 25. Jun 2007
Antwort Antwort
Rungholt

Registriert seit: 20. Apr 2007
19 Beiträge
 
#1

Dyn Array mit Werten aus Datei füllen

  Alt 25. Jun 2007, 09:35
Hallo,

ich möchte eine untypisierte Datei in ein dynamisches Array einlesen. Ich bekam nach einiger Zeit immer Speicherprobleme.
Laut diesen Textes hier http://www.dsdt.info/insider/sprache...hermanager.php
sollte man in Delphi die Länge des dynamischen Array nicht in einer Schleife, sondern wenn möglich schon vorher setzen.
Da ich die Dateigröße habe und auch die Größe des Records, sollte das kein Problem sein... dachte ich
Aber wie genau ermittle ich die Größe, die das Array haben muss ? Ein SizeOf(f) wird nicht reichen, oder ?

Hier die Details:

Delphi-Quellcode:
type
   rMyRecord= record
      TimeStamp : String;
      WerteID : String;
      Wert : String;
   end;

var DatenArray : array of rMyRecord;
    f : File;


SetLength(DatenArray,????);
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Dyn Array mit Werten aus Datei füllen

  Alt 25. Jun 2007, 09:41
Zitat von Delphi-Hilfe:
Die Funktion FileSize gibt die Größe einer Datei in Byte zurück. Enthält die Datei Records, wird deren Anzahl zurückgegeben.
Dazu musst Du f als file of Dein_Record deklarieren.
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
Benutzerbild von jfheins
jfheins

Registriert seit: 10. Jun 2004
Ort: Garching (TUM)
4.579 Beiträge
 
#3

Re: Dyn Array mit Werten aus Datei füllen

  Alt 25. Jun 2007, 10:26
Du öffenest den Filestream, setzt die länge des arrays auf Filestream.size DIV sizeof(record) und kannst dann die einträge einlesen.
  Mit Zitat antworten Zitat
DerDan

Registriert seit: 15. Nov 2004
Ort: Donaueschingen
251 Beiträge
 
Delphi XE3 Professional
 
#4

Re: Dyn Array mit Werten aus Datei füllen

  Alt 25. Jun 2007, 10:31
Hallo,

ich denke das ->
Zitat von jfheins:
Du öffenest den Filestream, setzt die länge des arrays auf Filestream.size DIV sizeof(record) und kannst dann die einträge einlesen.
<- würde schon funktionieren. Aber du müsstest deine Strings gegen andere Variablen tauschen die von der länge her nicht dynamisch sind.


mfg


DerDan
nichts ist so schön wie man es sich vorstellt
  Mit Zitat antworten Zitat
Rungholt

Registriert seit: 20. Apr 2007
19 Beiträge
 
#5

Re: Dyn Array mit Werten aus Datei füllen

  Alt 25. Jun 2007, 10:42
Hi,

ich kann die Strings zwar begrenzen...

Delphi-Quellcode:
   rMyRecord= record
      TimeStamp : String[25];
      WerteID : String[10];
      Wert : String[255];
   end;
... Das Problem ist dennoch, dass die Größe der Sätze in meiner Datei durchaus unterschedlich ausfallen können.
Dass heißt, ich kann die Gesamtgröße der Datei nicht einfach durch die Größe des Records (wäre dann jetzt 290)
teilen... oder Doch ?
  Mit Zitat antworten Zitat
Rungholt

Registriert seit: 20. Apr 2007
19 Beiträge
 
#6

Re: Dyn Array mit Werten aus Datei füllen

  Alt 25. Jun 2007, 10:52
Also so wie ich das sehe, muss ich vom Worstcase ausgehen. Das Wäre dann Filesize div 3. Weil im ungünstigsten Fall in jedem
Recordelement nur ein Zeichen drinstehen könnte.

Das wäre dann beim Beispiel von einer 1000 Byte großen Datei 334 Elemente im Array.
Würde ich die Dateigröße nur durch die Recordgröße dividieren bekäme ich in diesem Beispiel einen Wert von
aufgerundet 4 Array-Elementen. Aber wie gesagt, die Sätze sehen von ihrer Größe in der Datei äußerst unterschiedlich aus.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Dyn Array mit Werten aus Datei füllen

  Alt 25. Jun 2007, 11:23
Hast Du das mal ausprobiert? AFAIK wird immer SizeOf(Record) * Anzahl_Records in die Datei geschrieben, unabhängig davon, wieviel Speicher im jeweiligen Record tatsächlich benutzt wird.
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
Rungholt

Registriert seit: 20. Apr 2007
19 Beiträge
 
#8

Re: Dyn Array mit Werten aus Datei füllen

  Alt 25. Jun 2007, 11:38
Ich schreibe in eine "untypisierte" Datei. Also nicht Record- sondern Byteweise. Das heißt so gesehen stehen
keine Records in der Datei, sondern eine riesige Zeichenkette, die ich erst beim Auslesen in eine Struktur bringe.
  Mit Zitat antworten Zitat
Benutzerbild von DeddyH
DeddyH

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

Re: Dyn Array mit Werten aus Datei füllen

  Alt 25. Jun 2007, 11:42
Achso, dann ist das was anderes.
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
 
#10

Re: Dyn Array mit Werten aus Datei füllen

  Alt 25. Jun 2007, 11:56
Zitat von Rungholt:
Ich schreibe in eine "untypisierte" Datei. Also nicht Record- sondern Byteweise. Das heißt so gesehen stehen
keine Records in der Datei, sondern eine riesige Zeichenkette, die ich erst beim Auslesen in eine Struktur bringe.
Dann verwende doch gleich eine "vernünftige" Technik wie z.B. XML.
Falls XML für dich zu viel Overhead bedeutet, dann gäbe es da auch noch JSON.
JSON Delphi Library
Andreas
  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 05:25 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz