Использование JRccord для доступа к схеме COBOL
Я пытаюсь использовать JRecord версии 0.93 для анализа тетради COBOL, чтобы понять отдельные поля, присутствующие в записи. Я новичок в JRecord и изо всех сил пытаюсь выполнить то, что кажется простой задачей.
В файле test.cbl у меня есть это:
01 RECORD-DATA.
05 KEY-FIELD PIC X(8).
05 DATA-FIELD PIC X(72).
Я надеюсь получить список имен полей, их типов данных и длин.
Я нашел начало примера (здесь https://sourceforge.net/p/jrecord/discussion/678634/thread/176dcea6):
ICobolSchemaReader reader = CobolSchemaReader.newCobolSchemaReader("test.cbl");
CobolSchemaDetails schemaDetails = reader.getCobolSchemaDetails();
К сожалению, хотя приведенное выше компилируется чисто, похоже, оно не работает:
java.lang.ClassCastException: net.sf.JRecord.schema.CobolSchemaReader incompatible with net.sf.JRecord.schema.ICobolSchemaReader
at net.sf.JRecord.schema.CobolSchemaReader.newCobolSchemaReader(CobolSchemaReader.java:272)
at TestXform.main(TestJReader.java:56)
Кто-нибудь делал подобные вещи раньше? Есть ли лучший подход или примеры в Интернете, на которых я мог бы поучиться?
2 ответа
Попробовав несколько разных вещей, я нашел подход, который, кажется, работает:
IIOBuilder iob = JRecordInterface1.COBOL
.newIOBuilder("test.cbl")
.setFileOrganization(Constants.IO_FIXED_LENGTH_RECORDS)
.setFont("cp037")
.setDialect(ICopybookDialects.FMT_MAINFRAME);
LayoutDetail ld = iob.getLayout();
String [] fields = ld.getFieldDescriptions(0, 0);
for (int i = 0; i < fields.length; i++)
{
IFieldDetail fd = ld.getField(0, i);
System.out.println("Field #" + i + " = " + fd.getGroupName() + fields[i] +
", Len = " + fd.getLen() +
", Type = " + fd.getType() +
", Decimal " + fd.getDecimal());
}
Еще многое предстоит сделать: я замечаю, что если я определяю поле в тетради как массив, то в IFieldDetail, похоже, нет индикатора, сообщающего мне об этом. Но, по крайней мере, я чувствую, что сейчас нахожусь на правильном пути.
Глядя на код https://github.com/bmTas/JRecord/blob/a4b9d40ca525cc809588cf80fa592809fa2799f3/Source/JRecord_Project/JRecord/src/main/java/net/sf/JRecord/schema/CobolSchemaReader.java#L138-L141 - просто использовать
CobolSchemaReader reader = CobolSchemaReader.newCobolSchemaReader("test.cbl");
CobolSchemaDetails schemaDetails = reader.getCobolSchemaDetails();
который также используется таким же образом в своих тестовых программах .
Пояснение: только читалкаimplements implements ISchemaIOBuilder
, неICobolSchemaReader
- для любой причины; но у этого объекта естьgetCobolSchemaDetails()
метод.
Примечание. Если у вас есть вопросы по этой библиотеке, вы можете проверить ее систему отслеживания проблем .