【发布时间】:2020-06-02 06:37:42
【问题描述】:
大家好,提前感谢您的帮助。
我已经搜索了网络,并没有真正找到关于我最初的问题的任何具体内容。
我有一个我正在用 JAVA 开发的程序,其主要目的是读取 .DAT 文件并从中提取某些值,然后根据提取的值计算输出,然后将其写回文件。
该文件由长度和格式相同的记录组成,因此访问起来应该相当简单,目前我正在使用循环和 if 语句来查找记录的第一次出现,然后通过用户输入确定每条记录的长度,然后循环遍历每条记录。
但是!该文件的第一条记录是空白的(或者我认为)。事实证明,第一个记录是文件其余部分的关键,因为前几个字符是 ascii,分别引用记录长度和文件中包含的记录数。
下面是在文件中找到的 ascii 值本身的列表(忽略 " " ascii 包含在其中)
"#¼ ä"
"#g →"
“ÇG@”
“lj‰”
“ÇòÈ”
"=¼"
我的一个朋友在多年前使用 Basic 编码时发现前 3 个字符指的是记录长度,后面的 9 个字符指的是记录数。
基本上我需要做的就是将这个 ascii 字符的初始字符串转换为两位小数,以便计算出每条记录的长度和记录数。
我们将不胜感激。
编辑...
请在下面找到过去用于访问文件的基本代码,也许这会有所帮助?
CLS
INPUT "Survey System Data File? : ", survey$
survey$ = "f:\apps\survey\" + survey$
reclen = 3004
OPEN survey$ + ".dat" FOR RANDOM AS 1 LEN = reclen
FIELD #1, 3 AS RL$, 9 AS n$
GET #1, 1
RL = CVI(RL$): n = CVI(n$)
PRINT "Record Length = "; RL
reclen = RL
PRINT "Number of Records = "; n
CLOSE #1
基本上我正在寻找的是类似的东西,但在 java 中。
【问题讨论】:
-
正方形只是一个不可打印的字符——它可以是任何值。如果您以十六进制形式转储值会更有意义。尝试类似 od -t x1 文件名
-
更多关于使用的 BASIC 方言的信息可能会有所帮助……
-
据我了解,前 5 行代码是打开指定的文件,魔术发生在第 6 行和第 8 行。 FIELD #1, 3 AS RL$, 9 AS n$,这里它引用文件中的第一个字段为 3 个字符,它设置为变量 RL(记录长度),然后它引用下一个变量如下它设置为 n(记录总数)的 9 个字符。第 8 行是从 ascii 到 integer 的转换。这两个输入是我所追求的。特别是如何将它们从 ascii 文本字符转换为可用的十进制数字。
-
这里是基本的CVI功能的描述。 “CVI 函数将包含整数的 2 字节字符串转换为实际整数值。”