26. februar 2002 - 15:08Der er
7 kommentarer og 3 løsninger
Gem array of record der indeholder strings
Hej eksperter
Jeg står for at skulle gemme et array of record... Altså:
type TFile = record FileName: String; RemoteDir: String; LocalDir: String; FileSize: Integer; end;
var Files: array of TFile;
procedure SaveArrayToFile(FileName: String); var F: File of MyRecord; begin ... end
Som den opmærksomme programmør nok har set, er der strings i denne record. Det er netop der mit problem er! Jeg vil helst undgå TStringList og array of Char, hvis det er muligt!
Jeg har lige kigget på det, og et normalt filnavn (i Win98) kan indeholde LANGT mere end 128 karakterer... Men hvad så med mapper og undermapper osv... Det bliver noget langt noget!!!
Hmmm... Neeej, det har du sådan set ret i, men kunne man ikke lave det sådan at man først lavede en word, foran strengen, så ville man kunne få difineret hvor lang den var... Tror bare det ville blive for besværligt! Hvad er hurtigst?
Det eneste jeg egentlig har gjort er at udvikle en procedure der først skriver hvor lang strengen er, og derefter strengen:
Proceduren for neden er en under-procedure til en SaveToFile-procedure, hvor jeg har en variabel "F: File"... Det er den der skrives til i BlockWrite... Her har jeg sat den maksimale længde for strengen til at være 65535 tegn (maks-værdien for en Word), hvilket var fint for mig... Har du brug for længere eller kortere strenge kan du bare bruge en anden ordinal... ;)
Så skal der selvfølgelig også læses fra filen igen... Det gør jeg med følgende funktion...
function ReadString: String; var Count: Word; Buf: array [1..300] of Char; begin BlockRead(F, Count, 2); BlockRead(F, Buf, Count); Result := Copy(Buf, 0, Count); end;
Her er der igen tale om file-variablen F og jeg satte en maksgrænse på strenglængden til 300 tegn, da jeg ikke havde brug for mere... De strenge jeg havde med at gøre kunne nemlig blive længere end det... Grunden til at jeg ikke brugte en byte i stedet for en word var så at strengene godt kunne blive over de 255 tegn... :)
Nå, men jeg håber da det hjalp dig videre til dit projekt! Glæder mig til din næste OpenGL-tutorial! ;)
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.