2016-04-19 3 views
0

Ich mache gerade eine Einheits-Bibliothek in Pascal. Ich würde gerne wissen, ob ich eine sehr lange Zeichenfolge zuweisen könnte, ohne Ansistring oder {$ H +} zu verwenden, da ich typisierte Dateien nicht mit Referenzzählertypen zuordnen konnte. Danke schonmal.
EDIT: Code hinzugefügtPascal: schreibe eine sehr lange Zeichenkette ohne Referenzzählertypen (zB: anisstring)

type 
dataFilm = record 
    title : array [1..255] of char; 
    genre : array [1..255] of char; 
    viewerRating : array [1..255] of char; 
    duration : integer; 
    synopsis : array [1..2000] of char; 
    priceWeekdays : longint; 
    priceWeekend : longint; 
end; 
theatreUDT = record 
    mainDataFilm : array [0..100] of dataFilm; 
    end; 
ftheatreUDT = record 
    fmainDataFilm : file of dataFilm; //It fails here when i use ansistring 
end; 
procedure loadMain(var main : theatreUDT; var fmain:ftheatreUDT); 
begin 
    assign(fmain.fmainDataFilm,'Data/dataFilm.dat'); 
    reset(fmain.fmainDataFilm); 
end; 

Das Programm hat kein Problem, nur, es eine sehr lange Zeichenfolge für Synopse nicht halten kann.

+0

Ich glaube nicht, dass SetLength für mich funktioniert, denn wenn ich versuche, die Datei auszudrucken, wurde sie irgendwo ausgeschnitten. –

+1

Ich denke, Sie möchten möglicherweise vermeiden, Legacy I/O zu verwenden und feststellen, dass sich Ihre Probleme auflösen. Es ist Zeit, die 80er Jahre hinter sich zu lassen. –

+0

@DavidHeffernan Sorry, aber ich weiß nicht viel über Pascal. Ich bekam eine Zuweisung, um .dat I/O in Pascal zu machen, aber eine Datei hat eine sehr lange Zeichenkette. Ich hatte überhaupt keine Ahnung, wie ich das ohne Anisstring machen könnte, weil typisierte Dateien nicht mit Referenzzählern wie Ansistring zugewiesen werden konnten. –

Antwort

1

Sie können array of char verwenden, um längere Strings zu haben.

dataFilm = record 
    title : string; 
    genre : string; 
    viewerRating : string; 
    duration : integer; 
    synopsis : array[0..1999] of char; 
    priceWeekdays : longint; 
    priceWeekend : longint; 
end; 

Beachten Sie jedoch, dass dies nicht eine sehr gute Lösung, weil

a) bedeutet dies, dass Sie eine maximale Länge für die Zeichenfolge wählen. Wenn Sie die Länge zu klein wählen, werden einige Texte nicht passen. Wenn Sie die Länge zu groß wählen, verschwenden Sie viel Speicherplatz, weil der Speicherplatz, den ein Datensatz in der Datei benötigt, immer derselbe ist, der auf der Definition des Datensatzes basiert.

b) Sie können nicht einfach die Struktur der Daten ändern. Wenn Sie beispielsweise den Informationen zum Film ein "Regisseur" -Feld hinzufügen möchten, können Sie dies nicht tun, ohne Code zu schreiben, um das alte Dateiformat in das neue Dateiformat zu konvertieren. Grundsätzlich können Sie die Definition des dataFilm-Typs nicht ändern, nachdem Sie Dateien mit diesem Code erstellt haben.

c) Sie können die Dateien nicht auf andere Weise leicht durchsuchen. Wenn Sie einen Standard wie JSON oder XML oder sogar eine Datenbank verwenden, können Sie den Inhalt einfach mit anderen Tools betrachten.

d) Sie können nicht so einfach auf die Dateien mit anderen Programmierumgebungen zugreifen. Möglicherweise möchten Sie in Zukunft von Pascal zu einer anderen Umgebung migrieren oder anderen Tools den Zugriff auf die Dateien erlauben. Dies ist einfacher bei Verwendung eines Standardformats oder einer Datenbank als bei der Pascal-Methode.

Verwandte Themen