Avatar billede Olescholesch Nybegynder
16. december 2014 - 13:14 Der er 9 kommentarer og
1 løsning

Opbygning af File of Record

Når jeg prøver at anvende filetypen "File of Record" får jeg en fejl, der oplyser at at der mangler en FINALIZE ? Jeg kan ikke finde hjælp (som jeg forstår) i Delphis hjælpesystem. Er er en der kan hjælpe mig?
16. december 2014 - 16:21 #1
Hej,

I min gamle Pascal bog ((fra 1972 eller deromkring )+/-) er der et  eksempel på brug af FILE OF RECORD.

Hvis ikke en af "vore" andre bruger / eksperter finder et mere opdateret eksempel skal jeg finde bogen frem og skrive kode-eksemplet af (bogstav for bogstav/ bogstaveligt !)

Jeg går i igang med at finde bogen nu !.

Kristian  (tirsdag 16:23)
16. december 2014 - 17:23 #2
HEJ IGEN,  (17:18)

Fandt den.

//
//  VÆR OPMÆRKSOMOM PÅ AT DETTE ER PASCAL (CP/M 2.2 // DOS 3.0) //  KODE, DET SKAL NOK "OVERSÆTTES" TIL "RIGTIG" DELPHI....
//

Program Medlemspost;

Type
  Medlemspost = Record
                  Loebenr : Integer;
                  navn    : String[50];
                  gade    : String[50];
                  postnrby : string[50];
                  info    : string[100];
                END;

  RegFile = File OF MedlemsPost;

// den oprindelige tekst er her REGISTER, men det er reser-
// veret, så det døbes om til REGfile
//

VAR

  Medlem : MedlemsPost;
  Registerfil : Regfile ;  // se REGISTER ovenfor
  CPMnavn    : String[14]; // FIL-NAVNET
  nr          : Integer;


begin
//
//  VÆR OPMÆRKSOMOM PÅ AT DETTE ER PASCAL (DOS) KODE,
//  DET SKAL NOK "OVERSÆTTES" TIL "RIGTIG" DELPHI....
//
//
  Write(ClrHOM);          // Sletter skærm
  Write('Hvad skal kartoteket hedde (diskfilnavn) ? ');
  ReadLN(CPMNavn);        // hent FILNAVN
  Assign(Registerfil,CpmNavn);
  Rewrite(RegisterFil);
  Writeln('Indtast oplysninger til katrtoteket:');
  Writeln('Negativt løbenummer afbryder ');
  Writeln();
  Write('Løbenummer: ');
  ReadLN(nr);
  While not nr < 0 do
      BEGIN
        with medlem do
            BEGIN
              Loebenr := nr;
              write('navn '); Readln(navn);
              write('gade '); Readln(gade);
              write('postnr og by: '), readln(postnrby);
              write('Oplysninger: '); Readln(Info);
            END;  (* with *)
        Write(Registerfil,medlem);
        writeln();
        write('Medlemsnummer:');Readln(nr);
      END;  (* while *)
  Close(registerfil);
  Writeln('I diskfilen ', cpmnavn , ' er der nu gemt ' ,
          Length(Registerfil), ' medlemsposter ');
END.


Vær opmærksom på, at der kan være manglende '-er . Jeg har ikke prøvet at lave koden om til nutids-Delphi, men det skulle være en (forhåbentlig) nem sag.

(Og så er bogen fra 1986 og ikke 1972 som jeg troede - undskyld til forfatterne mv.. )

Ps: I stedet for at bruge den antikverede ASSSIGN / REWRITE / medtodik burde du kigge lidt på STREAMS ... (hurtigere og nemmere !)






Kristian
Avatar billede Olescholesch Nybegynder
16. december 2014 - 18:44 #3
Tak sal du have for ulejligheden. Men det var nu ikke det jeg var ude efter!. Min hensigt var at oprette en filtype af "FILE OF RECORD". Jeg mener jeg tidligere har anvendt en sådan filtype, uden dog nu at kunne finde koden. Editoren accepterer typebetegnelsen, men fejlen opstår i compileren.

Jeg har også anvendt Filestreams (som der iøvrigt tidligere er spurgt om), men den er lige så klumpset som den kode du har haft ulejligheden med at finde og skrive!

Jeg vil ikke afvise, at det var i de "gode, gamle DOS dage" man kunne anvende filtypen.
16. december 2014 - 20:21 #4
Hej,

Tak for tilbagemeldingen.

En anden ide, som strejfer mig er DATABASER. De er jo i den grad opbygget som RECORDS. Og det er jo i princippet "bare" (I meget store pinger) fastlængde strenge, integers, booleans, reals mere eller mindre "stablet" oven på hinanden i en kendt orden.

En af tankerne med CPM progammet (DOS ?) var nu også at på et senere tidspunkt at prøve at få det til at køre // dvs. den mekaniske transformation til Delphi. Både som en øvelse/repetition for mig men også for evt. andre.

Jeg har kørt Records før (osse i Delphi - men det var i harddisk version 3 , nu er jeg oppe i version 10-15 stykker) eller på en forlængt hedengang maskine. Så det kan lade sig gøre. hvilket får mig til at tænke på om der kan være en fejl i opsætning eller måske compileren (omend det sidste er meget lidt sandsynligt).

Jeg kører (stadig D7 enterpr. 2. ed) og den kan næsten alt.  Men er dog utrolig sløv i MS-net-løsninger. (det var den heller ikke bygget til !) 

Men held og lykke med opgaven / projektet.

(OG PS: Ja - den gamle kode er uintelligent- men der er fra før 1986 - husk det... !)

Kristian


OG PPS:  GOd jul.
Avatar billede kroning Nybegynder
18. december 2014 - 22:49 #5
Hvordan ser din RECORD ud som du vil lave en FILE OF af?
Avatar billede Olescholesch Nybegynder
19. december 2014 - 09:48 #6
Det er OSsys, der svarer! Jeg har været nødt til ar udskifte mit brugernavn.

Problemet opstår allerede ved typedefinitionen

feks.

Type
      f = File of record
        felt1:string;
        felt2:string;
      end;

Compileren nægter at compilere en sådan typebestemmelse?

olescholesch tidligere

OSsys
Avatar billede kroning Nybegynder
19. december 2014 - 10:05 #7
type
      TMinRec = record
        felt1:string[100];
        felt2:string[100];
      end;

var
  f : file of TMinRec;
Avatar billede Olescholesch Nybegynder
19. december 2014 - 10:29 #8
@Kroning

Den virker !!!!!

Det havde jeg ALDRIG gættet!

Hvorfor er det nødvendigt at begrænse strengens længde
Avatar billede kroning Nybegynder
19. december 2014 - 10:37 #9
Recorden skal have en fast længde så derfor skal strenge angives med en fast længde. Ellers skal du bruge streams.

Men min post #7 var jo egentlig bare det samme som snestrup2000 skrev i #2 :-)
Avatar billede Olescholesch Nybegynder
19. december 2014 - 10:46 #10
Det har ret! Men jeg kunne ikke se koblingen til mit problem med typebestemmelsen. Dit svar forstod jeg straks.

Tak for det!
Avatar billede Ny bruger Nybegynder

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester