Toon posts:

[Delphi] Blockwrite schrijft vage tekens???

Pagina: 1
Acties:

Verwijderd

Topicstarter
Hee hallo, Ik heb weer eens een probleem:

Ik heb een bestand met een recordsize van 16.
Eerste paar records heb ik er zelf in getypt handmatig.
Ik kan ze prima lezen zonder probleem.

maar als ik iets schrijf naar hetzelfde bestand (met rewrite, ik wil em leeg hebben eerst) zoals hieronder:

VAR
blaat: string;
be: file;
BEGIN
assignfile(be, 'hetbestand.nogwat');
rewrite(be, 16);
blaat := 'eenstring '; //met spaties zodat het totaal 16 tekens heeft
blockwrite(be,blaat,1);

en ik open het bestand, staan er alleen maar vage tekens willikeurig (wel van de correcte recordgrootte)..
Terwijl als ik op EXACT dezelfde manier, of tussendoor zelfs, een constant schrijf van 16 tekens die ik ergens eerder gedefinieert heb ( CONST bla = 'nogwat '), wordt die wel correct in het bestand gezet.

HELP! (ps, als ik de records inlees met blockread zijn ze net zo verneukt als als ik het bestand gewoon open).

  • LordLarry
  • Registratie: Juli 2001
  • Niet online

LordLarry

Aut disce aut discede

De String die je gebruikt is een Long of AnsiString in tegenstelling tot een ShortString die vroeger onder pascal gebruikt werd. Zo'n AnsiString bevat meer dan alleen de inhoud van de string. In feite is het een pointer, maar de compiler verbergt dat voor je. Wat je nu wegschrijft met BlockWrite en ook met je records is de waarde van de pointer en niet de inhoud van de string. Totaal nutteloos dus. Bovendien beginnen strings bij 1 te tellen en niet bij 0. Als je 0 had weggeschreven bij ShortStrings had je de lengte van de string weggeschreven.

Bij Gebruik in je records ShortStrings en voor het direct schrijven van AnsiStrings de volgende code.
Delphi:
1
2
3
4
5
6
7
8
type
  MyRecord = record
    Str1: String; // Ansi of LongString. Niet gebruiken in records die je weggeschrijft met BlockWrite
    Str2: ShortString; // Wel ok, maar wel altijd 255 chars, niet meer niet minder
    Str3: String[10]; // Ook een short string en dus ook. 10 lang.
  end;

BlockWrite(be, blaat[1], Length(blaat));  // Strings beginnen bij 1

We adore chaos because we like to restore order - M.C. Escher


Verwijderd

Topicstarter
Het werkt nu, hartstikke bedankt. Nuttige info!