我正在通过一个Java程序提取unidata表的字典信息和数据(平面文件),在Java程序中我使用“表名”来获取这两个东西,现在我们有另一个项目将Unidata db分为多个模块(目录)每个目录包含文件和更多目录,现在我的问题是
1)如何说一个特定的文件是Unidata表?
2)对于某些文件,我们能够获取字典信息,但不能获取数据,这两件事在同一位置不可用吗?如果没有,我们如何将两者联系起来?
我是Unidata的新手,请忽略我对此主题的幼稚并阐明一下。谢谢
最佳答案
如果您登录到Unidata并从内部进行查看,可能会更加清楚。 unidata“帐户”(数据库)包含文件和词典。文件就像数据库表,但没有有关内容或列的元数据。字典是一种特殊的表,它确实包含有关相应文件的元数据。所以,如果我这样做:
:CREATE.FILE MY.FILE 37,1
Create file D_MY.FILE, modulo/1,blocksize/1024
Hash type = 0
Create file MY.FILE, modulo/37,blocksize/1024
Hash type = 0
Added "@ID", the default record for UniData to DICT MY.FILE.
我得到了在当前帐户中创建的两个unix级文件。两者都是空的。因为未指定,所以系统创建了一个哈希文件以及“主字典”或VOC中的指针。
:ED VOC MY.FILE
Top of "MY.FILE" in "VOC", 3 lines, 19 characters.
*--: P
001: F
002: MY.FILE
003: D_MY.FILE
Bottom.
第一个属性告诉我们文件的类型。第2和第3个是指向数据和字典文件所在位置的指针(它们不必位于当前帐户中)。其他类型包括DIR类型,LD(多级文件,其中有带有共享字典的子文件)和一些较不常用的组合。来自的更多信息:
:HELP CREATE.FILE
CREATE.FILE
Syntax
CREATE.FILE [DICT | DATA] [DIR | MULTIFILE | MULTIDIR] filename [,subfile]
[modulo [,block.size.multiplier]] [TYPE hashtype] [DYNAMIC [KEYONLY
| KEYDATA] [PARTTBL part_tbl]] [RECOVERABLE] [OVERFLOW]
Note: The PARTTBL option is available on UniData for UNIX only.
Synonym
CREATE-FILE
Description
The ECL CREATE.FILE command creates a UniData file. If you do not
indicate the kind of file to create (such as dictionary, data, or
directory), UniData creates filename (both the data and dictionary
files) as a static hashed file. If an operating system-level file
of the same name already exists in the target account, CREATE.FILE
fails.
因此,如果您已经成功提取了数据,但是想了解新表的类型以及它们的字典在哪里,答案就是在VOC表中查找。