コレクションをループするにはどうすればよいですか?
Fujitsu/Alchemy コンパイラの試用版を使用していますが、ベンダーからのサポートが遅く、貧弱です。
私は基本的に、リストを C# から COBOL に渡し、COBOL にそれを使用させ、場合によっては更新させたいと考えています。
C# では、コレクションを反復処理する通常の方法は、"foreach" コンストラクトを使用することです。
ただし、C# の "foreach" コンストラクトは、次のショートカットです。
private static void test1()
{
List<IDMSMapField> list1 = new List<IDMSMapField>();
int listSize = list1.Count;
// was just checking exact variablename and case here to copy into COBOL code.
int itemNumber = 0;
System.Collections.Generic.List<IDMSMapField>.Enumerator enumerator1 = list1.GetEnumerator();
while (enumerator1.MoveNext())
{
Console.Write("Okay" + enumerator1.Current);
}
}
このクラスを宣言する方法を理解するのを手伝ってくれれば、これを COBOL で書くことができます。
System.Collections.Generic.List<IDMSMapField>.Enumerator
「列挙子」の構造は、Microsoft の MSDN サイトに記載されています。
「列挙子」がクラスではなく構造体であることを示しています。
マニュアル「CreatingCOBOLfromDotnetFrameworkDox.pdf」でわかることから、構造はCOBOL REPOSITORYのクラスとして定義されています。
マニュアルの例:
Define specifiers for structure in REPOSITORY, and any struct members:
CLASS STRUCT-name AS "struct-namespace"
PROPERTY PROP-struct-member AS "external-property-name"
Handle structures like classes. E.g. object to store a struct instance:
01 struct-object OBJECT REFERENCE STRUCT-name.
以下では、「解決できません」というエラーのために、すべてコンパイルに失敗したいくつかのバリエーションを繰り返しています。これを適切に宣言する方法を教えていただければ、先に進むことができると思います。
1.
REPOSITORY.
CLASS CLASS-LIST AS "System.Collections.Generic.List<>"
CLASS STRUCT-Enumerator AS "System.Collections.Generic.List<>.Enumerator"
.
2 行目のエラー:
error JMN1795I-S: 名前付き参照 'System.Collections.Generic.List<>.Enumerator' を解決できません.
これとまったく同じエラー:
REPOSITORY. CLASS CLASS-LIST AS "System.Collections.Generic.List<>" CLASS STRUCT-Enumerator AS "System.Collections.Generic.List<T>.Enumerator" .
error JMN1795I-S: 名前付き参照 'System.Collections.Generic.List.Enumerator' を解決できません.
これに対する同じエラー:
リポジトリ。CLASS CLASS-LIST AS "System.Collections.Generic.List<>" CLASS STRUCT-Enumerator as "System.Collections.Generic.List.Enumerator" .
error JMN1795I-S: 名前付き参照 'System.Collections.Generic.List.Enumerator' を解決できません.
もう1つの選択肢は、それを配列として扱うことですが、私もそれに固執しています。
REPOSITORY.
CLASS LIST-IDMSMapField AS "System.Collections.Generic.List<>[]"
CLASS CLASS-IDMSMapField AS "Lightyear.ERCB.IDMSDC.IDMSMapField"
CLASS CLASS-LIST-IDMSMapField EXPANDS LIST-IDMSMapField USING CLASS-IDMSMapField.
METHOD-ID. TW1DR4000-PF06 AS "TW1DR4000_PF06".
DATA DIVISION.
WORKING-STORAGE SECTION.
01 MapFieldItem USAGE OBJECT REFERENCE CLASS-IDMSMapField.
LINKAGE SECTION.
01 MapFieldList USAGE OBJECT REFERENCE CLASS-LIST-IDMSMapField.
PROCEDURE DIVISION...
...
SET MapFieldItem TO MapFieldList(1).
error JMN2671I-S: 参照修飾子には':'を指定する必要があります. ':' が想定されます。
おそらく、コンパイラは (1) を部分文字列操作と見なしていると思います。