/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Skrive til utypede filer
Fra : Thomas P


Dato : 19-06-01 13:22

Hej,

Jeg skal skrive to arrays af to records, der hver er af variabel længde
(altså arrays'ene). Recordsene indeholder typer som shortstring, integer og
boolean. Hvilket filformat skal jeg bruge, og hvordan gør jeg det i hele
taget ? Indtil nu, har jeg kun været i stand til at skrive til filer hvor
typen er den samme (så kunne jeg jo bruge minfil : file of mintype).
Anything ?

--
- Thomas
~~~~~~~~
.... http://www.FlowCode.f2s.com - where code flows
.... mailto:blomme@post.com - where email goes



 
 
Christian Iversen (19-06-2001)
Kommentar
Fra : Christian Iversen


Dato : 19-06-01 15:48

"Thomas P" <blomme@post.com> wrote in message
news:9gng0m$d77$1@news.inet.tele.dk...
> Hej,
>
> Jeg skal skrive to arrays af to records, der hver er af variabel længde
> (altså arrays'ene). Recordsene indeholder typer som shortstring, integer
og
> boolean. Hvilket filformat skal jeg bruge, og hvordan gør jeg det i hele
> taget ? Indtil nu, har jeg kun været i stand til at skrive til filer hvor
> typen er den samme (så kunne jeg jo bruge minfil : file of mintype).
> Anything ?


Ja, lad være med at bruge File!

Brug i stedet det abstrakte storage-interface TStream.

En defineret descendant af TStream er TFileStream, som du kan
instacsi...instensi.... lave instancer af

Gør således:

Procedure Quux;
Var
S : TFileStream;
Begin
S := TFileStream.Create('c:\config.sys',fmShareDenyWrite Or fmOpenReadWrite)
// Se hjælpen, den er meget udførlig på dette punkt [1]
S.Write(MyArray1^,MyArraySize1);
S.Position := 1234;
S.Write(MyArray2^,MyArraySize2);
S.Free;
End;

P.S: Husk at bruge en fixed-pitch font når du læser dette...

Hvis du vil høre mere, så bare skriv igen

[1]
Value Meaning

fmCreate = Create a file with the given name. If a file with the
given name exists, open the file in write mode.

If the file can not be opened, Create will raise an exception.
fmOpenRead = Open the file for reading only.
fmOpenWrite = Open the file for writing only. Writing to the file
completely replaces the current contents.
fmOpenReadWrite = Open the file to modify the current contents rather than
replace them.

The share mode must be one of the following values:

fmShareCompat = Sharing is compatible with the way FCBs are opened.
fmShareExclusive = Other applications can not open the file for any reason.
fmShareDenyWrite = Other applications can open the file for reading but not
for writing.
fmShareDenyRead = Other applications can open the file for writing but not
for reading.
fmShareDenyNone = No attempt is made to prevent other applications from rea
ding from or writing to the file.

--
Regards, Christian Iversen [FIDUSO]
Flawless.Dk: [http://domains.flawless.dk]
Do you have a (broken?) IBM75GXP Drive?
Please go to [http://ibm.flawless.dk]



Thomas P (20-06-2001)
Kommentar
Fra : Thomas P


Dato : 20-06-01 18:14

> Brug i stedet det abstrakte storage-interface TStream.

[snip]

> S.Write(MyArray1^,MyArraySize1);

Hey ! Det ser jo rigtigt spændende ud, dette TFileStream format. Jeg har
imidlertid bare lidt problemer med at få denne write-metode til at fungere,
hvor mit array er defineret således: mitaray1 : array of minrecord1. Meget
gerne et illustrativt eksempel som sidste gang

--
- Thomas
~~~~~~~~
.... http://www.FlowCode.f2s.com - where code flows
.... mailto:blomme@post.com - where email goes



Christian Iversen (21-06-2001)
Kommentar
Fra : Christian Iversen


Dato : 21-06-01 08:14

> > Brug i stedet det abstrakte storage-interface TStream.
>
> [snip]
>
> > S.Write(MyArray1^,MyArraySize1);
>
> Hey ! Det ser jo rigtigt spændende ud, dette TFileStream format. Jeg har
> imidlertid bare lidt problemer med at få denne write-metode til at
fungere,
> hvor mit array er defineret således: mitaray1 : array of minrecord1. Meget
> gerne et illustrativt eksempel som sidste gang


TStream er "måden" at gøre den slags på

Jeg har desværre hverken Delphi 4, 5 eller 6 (kun 3), så jeg må forsøge at
gætte mig frem

Procedure SaveFoo;
Type
TMyRecord =
Record
// Foo
End;
Var
MyArray : Array Of TMyRecord;
S : TStream; // Du kan også bare bruge TFileStream. Her er det lige meget
Begin
S := TFileStream.Create(MyFileName,MyShareMode);
S.Write(MyArray,Length(MyArray)*SizeOf(TMyRecord));
S.Free;
End;

Se, det er enten

S.Write(MyArray,Length(MyArray)*SizeOf(TMyRecord));

eller

S.Write(MyArray^,Length(MyArray)*SizeOf(TMyRecord));

Hvilken en det er ved jeg ikke (jeg har ikke så nye versioner af Delphi). Du
må bare prøve dem begge!

--
Regards, Christian Iversen [FIDUSO]
Flawless.Dk: [http://domains.flawless.dk]
Do you have a (broken?) IBM75GXP Drive?
Please go to [http://ibm.flawless.dk]



Søg
Reklame
Statistik
Spørgsmål : 177501
Tips : 31968
Nyheder : 719565
Indlæg : 6408522
Brugere : 218887

Månedens bedste
Årets bedste
Sidste års bedste