![]() |
variabler Datentyp
hallo leute,
ich habe wieder das gleiche Problem wie neulich, mit dem Unterschied, dass das nun wirklich lösbar sein muss. Ich hab hier eine Routine, die eine Integer Zahl an eine Datei ranhängt, und nun möchte ich das so umschreiben, dass ich das für einen beliebigen Typ nutzen kann! (also auch für extended o.ä.)
Delphi-Quellcode:
so würde ich das jetzt für extended machen, aber da das bis auf den typ das gleiche ist, würde ich das gerne generalisieren:
procedure appandinteger(zahl: integer; path: string; Dateiname: string);
var datei: file of integer; begin AssignFile(datei, path+'\'+Dateiname+'.dat'); if FileExists(path+'\'+Dateiname+'.dat') then ReSet(datei) else ReWrite(datei); Seek(datei, FileSize(datei)); write(datei, zahl); CloseFile(datei); end;
Delphi-Quellcode:
procedure appandextended(zahl: extended; path: string; Dateiname: string);
var datei: file of extended; begin AssignFile(datei, path+'\'+Dateiname+'.dat'); if FileExists(path+'\'+Dateiname+'.dat') then ReSet(datei) else ReWrite(datei); Seek(datei, FileSize(datei)); write(datei, zahl); CloseFile(datei); end; |
Re: variabler Datentyp
variant
|
Re: variabler Datentyp
Oder überladene Prozeduren.
|
Re: variabler Datentyp
Hatte gerade an etwas wie generische Prozeduren gedacht, aber scheinbar gibt es soetwas nicht:
Delphi-Quellcode:
Warum eigentlich nicht? Wäre doch ganz praktisch in manchen Fällen..
procedure AppendTo<T>(ADatei: String; AValue: <T>);
var datei: file of <T>; begin AssignFile(datei, ADatei); if FileExists(ADatei) then ReSet(datei) else ReWrite(datei); Seek(datei, FileSize(datei)); write(datei, zahl); CloseFile(datei); end; // Aufruf AppendTo<Integer>('Test.txt',10); AppendTo<String>('Test.txt','Hallo Welt!'); |
Re: variabler Datentyp
Es geht schon, nur etwas anders:
Delphi-Quellcode:
type
TFile<T> = class public class procedure Append(zahl: T; const path: string; const Dateiname: string); end; class procedure TFile<T>.Append(zahl: T; const path: string; const Dateiname: string); var datei: file; fullName: string; begin fullName := path+'\'+Dateiname+'.dat'; AssignFile(datei, fullName); if FileExists(fullName) then begin Reset(datei, Sizeof(T)); Seek(datei, FileSize(datei)); end else begin Rewrite(datei, Sizeof(T)); end; BlockWrite(datei, zahl, 1); CloseFile(datei); end; TFile<Integer>.Append(5, 'C:\temp', 'integer'); TFile<Extended>.Append(0.5, 'C:\temp', 'extended'); |
Re: variabler Datentyp
Oder einfach einen Pointer verwenden und die Größe mitgeben.
|
Re: variabler Datentyp
Zitat:
Delphi-Quellcode:
Also quasi sowas wie Stream.Write.
procedure AppendData(var Data; Size: Cardinal);
|
Re: variabler Datentyp
Zitat:
|
Re: variabler Datentyp
Geht beides auch mit
Delphi-Quellcode:
nicht.
procedure AppendData(Data: Pointer; Size: Cardinal);
|
Re: variabler Datentyp
Zitat:
Und notfalls kann man auch nachträglich typisieren sowas müßte also gehn:
Delphi-Quellcode:
und hier würde man wohl das Resut kopieren und nicht einen Pointer ala @test:
const s = '123';
ts: String = '456'; function WriteS(var s); ... function x: String; ... WriteS(ts); WriteS(String(s)); WriteS(String(x));
Delphi-Quellcode:
function test: Integer;
MoveMemory(@i, @Integer(test), SizeOf(Integer)); |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:23 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