これはDelphi Prism向けです。BinaryWriterを使ってファイルに "SET OF"型を読み書きするには?
私はバイナリファイルに保存したい次の列挙型を持っています。
Fruit = (Apple, Banana, Mango, Cherry, Grapes, BlueBerry);
Fruits = set of Fruit;
FruitBasket:Fruits;
with Fruit do
FruitBasket := [Apple, Mango];
BinaryWriter thefile := new BinaryWriter(File.Create("test.dat"));
thefile.write(FruitBasket); //<<< raises Error - There is no overloaded method "Write" with these parameters
thefile.Close;
どのようにBinaryWriterを使用してバイナリファイルに列挙セットタイプ(果物)を読み、書くのですか?私は別のStackoverflowの質問で私の質問への答えを見つけたが、しなかったと思った。
私は主にその要素をループする必要があると思いますが、それを実行する簡単な方法があるかどうかを知る必要がありました。
更新:最初の回答の後、私は試してみると、早急に結論に至りました。これは私の間違いでした。いったん私のプログラムで他の問題やエラーが見つかったら、私のコンパイラは最初に提案された変更とCKによる唯一の答えに誤りを出しました。私は書くことができますが、それを読むことはできません。コンパイラは「タイプミスマッチ、グループ.TFeatureのセットにSystem.SByteを割り当てることはできません」と発言し続けています。
コードは一例です。以下、実際のコードである:ここ
は、列挙型である:ここ
TFeature = (tfUnit,tfSignal,tfAlarm,tfControl,tfMaker,tfViewer,tfTrend,
tfComm,tfSystem,tfScan,tfShutdown,tfPID,tfMagiKal);
タイプのセットである:ここ
TFeatures = set of TFeature;
はクラスである:
ここTGroup = class
name:string;
rwFeatures:TFeatures;
roFeatures:TFeatures;
levels:TLevels;
private
public
constructor;
Method ReadAGrp(bgreader:BinaryReader);
Method ReadOld(bgreader:BinaryReader);
Method WriteAGrp(bgwriter:BinaryWriter);
end;
TGroupList = class(ArrayList)
private
public
Method ReadGroups(fname:string);
Method WriteGroups(fname:string);
Method AddGroup(group1:TGroup);
Method DeleteGroup(group1:TGroup);
Method FindGroup(gname:string):TGroup;
end;
私はバイナリファイルを使用してバイナリファイルにSET OF型を読み書きしようとしています:
procedure TGroup.ReadAGrp(bgreader:BinaryReader);
begin
name:=bgreader.ReadString;
rwFeatures := TFeature(bgreader.ReadSByte);
roFeatures := TFeature(bgreader.ReadSByte);
levels := TLevels(bgreader.readsbyte);
end;
procedure TGroup.ReadOld(bgreader:BinaryReader);
begin
name:=bgreader.ReadString;
rwfeatures := TFeature(bgreader.ReadSByte);
roFeatures := TFeature(bgreader.ReadSByte);
levels :=TLevels(bgreader.readsbyte);
end;
procedure TGroup.WriteAGrp(bgwriter:BinaryWriter);
begin
bgwriter.Write(name);
bgwriter.Write(rwFeatures.toarray);
bgwriter.Write(roFeatures.ToArray);
bgWriter.Write(levels.toarray);
end;
サンプルコードまたは実際のコードで回答できる場合は、私は感謝します。
あなたが気付かなかった場合、私はこの質問の賞金を始めました。私は本当に実用的な答えが必要です。ありがとう、
ありがとう、
@Ck、あなたの答えに感謝します。私は書き込むことはできますが、それを読むことはできません。バイトからデータ型(Fruits)を設定することはできません。 – ThN
@ CK、私はそれが働いていると思ったが、私はあまりに早く結論に飛び込んだ。他のエラーを処理した後、私は最終的に私のプログラムをコンパイルしました。そして今、ファイルから読み返すためにエラーが出ます。ToArrayを使用してファイルに書き込むことができますが、readSbyteメソッドを使用すると失敗します。最初はコンパイルされましたが、他のエラーがありました。だから、これまではこのエラーに遭遇していなかったと思います。だから私はあなたの答えをまだ受け入れていない。 – ThN
にサンプルが追加されました。 –