![]() |
Pointer :\
hi,
eigentlich dürfte das thema kein problem sein aber wieso kann ich den pointer so nicht benutzen ?? ich weiss der code macht so keinen sinn aber ich wollte nicht den kompletten code posten, zumal der Fehler bei fi := fp^; auftritt Fehlermeldung : Operator auf diesen Operatortyp nicht anwendbar
Code:
var
fi : File; fp : ^File; begin fp := @fi; fi := fp^; .. end; |
Re: Porinter :\
Zitat:
Meines Wissens kann man keine Pointer auf <File> setzen. Möchtest Du mit "fi := fp^;" an den Inhalt von der Datei rankommen oder wie? :gruebel: Mir ist momentan noch nicht ganz klar, was Du machen möchtest, aber für Dateiverarbeitung sollest Du evtl. ![]() verwenden. Was genau möchtest Du denn tun? :gruebel: Wenn Du uns das verrätst, können wir Dir hoffentlich weiterhelfen. DANNBOY Nachtrag: Nenn' Deine Überschrift besser "Pointer". Ist aussagekräftiger als "Porinter". :zwinker: |
Re: Pointer :\
Prointer .. lol gar net gesehen
ich schreibe eine kompone die daten in eine datei typweise speichert daher benutze ich in der gasamten komponente die selbe variable vom typ file daich beim übergeben nicht immer die gesamte variable übergeben möchte wollte ich einen pointer stattdessen übergeben .. aber wenn das nicht geht :\ schade |
Re: Pointer :\
Zitat:
Wie wäre es denn, wenn Du einen Zeiger auf die Variable (nicht auf die Datei) an einen FileStream übergibst? :gruebel: Bei der write-Funktion von TFilestream kannst Du ebenso exakt die Anzahl der zu schreibenden Bytes (die Quelle wäre dann der Pointer Deiner Variable) angeben. Ich beschäftige mich z.Zt. auch mit dem Erstellen einer Datei, in die verschiedene Variablen mit unterschiedlichen Längen und unterschiedlichen Datentypen rein kommen. Klappt mit Filestreams ganz easy. |
Re: Pointer :\
*g
mh ich hab nu soweit alles mit assign ..reset .. rewrite usw. gemacht gibts denn einen direkten vorteil gegenüber filestream ? |
Re: Pointer :\
Liste der Anhänge anzeigen (Anzahl: 1)
Dieses ganze AssignFile-reset-rewrite-closeFile-Zeugs stammt
noch aus der Pascal-Zeit. Ich hab's damals auch so gelernt und hatte kein Bock umzusteigen, aber das mit den Filestreams ist wirklich (!) ganz einfach und bietet viele Vorteile der Einfachheit und vor allem in der Geschwindigkeit. Wenn Du z.B. einen Dateisplitter für beliebige Dateien schreiben möchtest (siehe Anhang) dann kennst Du die Struktur der Dateien meistens gar nicht. FileStreams sehen Strukturen einfach als eine Menge von einzelnen Bytes an. Möchtest Du z.B einen Record speichern, dann machst Du das so:
Delphi-Quellcode:
Vorteile von der Pascal-Variante sind mir nicht bekannt. Hab' das aus dem
type TMeinRecord = record
buchstabe : Char; alter : byte; groesse : real; Daten : array[0..7] of byte; end; //... var MeinRecord : TMeinRecord; //... procedure schreibeMeinRecordInDatei; var Filestream: TFileStream; begin // FileStream:= TFileStream.create(<Dateiname>, <Zugriff auf Datei>); FileStream:= TFileStream.create('C:\test.dat', fmCreate OR fmShareExclusive); // FileStream.write(<dantenquelle>, <anzahl der bytes>) FilStream.write(MeinRecord, SizeOf(TMeinRecord); // Dateizugriff freigeben FileStream.free; end; Kopf geschrieben, ergo ungetestet. Nachtrag: Musst natürlich noch eventuelle Exceptions abfangen. |
Re: Pointer :\
Zitat:
Nur, was hat das ganze mit Dateien zu tun ? Wahrscheinlich weißt du nicht, wieviel Platz irgendwas zur Laufzeit braucht. Und das soll in eine Datei. Wenn dem so ist, dann willst du das wohl in einer typisierten Datei speichern und das ist auch richtig. Wer weiß beim Programmieren schon, ob eine Rechnung jetzt 1 oder 1000 Positionen hat. Was du wohl mit "Pointer" meinst, das sind dynamische Datenstrukturen (Listen, Bäume usw.). Da spielt sich aber alles im Hauptspeicher ab. Soll es längere Zeit gespeichert bleiben, so gehört es in eine Datei / Datenbank. Das alles ist aber auch dynamisch. So, jetzt bin ich mit meinem Latein am Ende, was das ganze soll. :gruebel: |
Re: Pointer :\
Zitat:
ich wollte einfach statt der variablen File einen pointer übergeben aber so langsam glaub ich, dass das etwas blöd war :gruebel: @Dannyboy könnte ich damit auch listen ( arrays ) speichern, sieht bei deinem bsp so aus, wenn dem das so wäre würde ich sofort darauf umsteigen; gleich mal testen :mrgreen: |
Re: Pointer :\
mh, damit kann man leider keine dynamischen listen speichern,
schade .. naja hätte ich mir auch denken können .. egal dennoch danke euch :) |
Re: Pointer :\
Zitat:
Delphi-Quellcode:
type TArray = array[0..1000, 3..99999] of integer;
Var meinArray : TArray; //... Filestream.write(meinArray, SizeOf(meinArray)); //... Zitat:
Du muss nur an den Eintrag der Liste rankommen und dann wie gehabt:
Delphi-Quellcode:
Check this out.
VAR Eintrag : TListEintrag;
//... FileStream.write(Eintag, SizeOf(Eintrag)); //... DANNYBOY |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:02 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