2016-04-19 9 views
0

私は現在、単位ライブラリをパスカルで作っています。型付きファイルに参照カウント型を割り当てることができなかったので、Ansistringまたは{$ H +}を使わずに非常に長い文字列を割り当てることができるかどうかを知りたいと思います。前にありがとう。
編集:コードはパスカル:参照カウントなしの非常に長い文字列を書く(例:ansistring)

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; 

を追加したプログラムは全く問題がなく、唯一、それは概要のために非常に長い文字列を保持することはできません。

+0

私はSetLengthが私のために働いているとは思わない、ファイルをプリントアウトしようとするとどこかで切り取られたからだ。 –

+1

レガシーI/Oを使用しないようにして、問題が解消されることがあると思います。 1980年代を後にしておくべき時です。 –

+0

@DavidHeffernan申し訳ありませんが、私はパスカルについてはあまりよく分かりません。 .dat I/Oをパスカルで作成する割り当てが与えられましたが、ファイルの1つに非常に長い文字列があります。型付けされたファイルには、Ansistringのような参照カウント型を割り当てることができなかったので、私はそれをやりなおすことができませんでした。 –

答えて

1

array of charを使用すると、長い文字列を使用できます。

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

しかし、

a)は、それはあなたが文字列の最大長を選択する必要があることを意味するので、これは非常に良い解決策ではないことに注意してください。長さを小さすぎると選択すると、一部のテキストが収まりません。長さを長くしすぎると、ファイル内のレコードの領域がレコードの定義に基づいて常に同じになるため、多くのディスク領域が浪費されます。

b)データの構造を簡単に変更することはできません。たとえば、ムービーに関する情報に「ディレクター」フィールドを追加する場合は、古いファイル形式を新しいファイル形式に変換するためのコードを記述しないではできません。基本的に、このコードでファイルを作成した後は、dataFilmタイプの定義を変更することはできません。

c)ファイルを他の方法で簡単に調べることはできません。 JSONやXML、さらにはデータベースのような標準を使用する場合は、他のツールを使用してコンテンツを簡単に見ることができます。

d)他のプログラミング環境のファイルに簡単にアクセスすることはできません。将来、パスカルから他の環境に移行したり、他のツールがファイルにアクセスできるようにすることもできます。これは、パスカル方式を使用する場合よりも、標準形式またはデータベースを使用する方が簡単です。

関連する問題