【发布时间】:2012-07-07 21:15:32
【问题描述】:
我正在从事一个从文件中读取数据的项目,我需要处理其中的一些数据。
数据是二进制的,其中包含一些 ASCII 编码的文本。 如果这很重要,数据也会保存在 Big Endian 中。
我想要完成的是在这些数据中找到一个模式并操作该模式的一部分。
示例:(09 49 6E 76 65 6E 74 6F 72 79 0A 00 00 00 02 01 00)
这表示 Inventory 中有多少个字母的数字 9,后跟不带引号的 ASCII“Inventory”。 “0A”标记该 ASCII 文本的结尾,后跟 00 00 00 02 标记我们库存的大小“2”。 “01 00”标志着整个库存区域的结束。
示例 2:(04 53 6C 6F 74 00 02 00)
这表示 Slot 中有多少个字母的数字 4,后跟不带引号的 ASCII“Slot”。 “00”是 ASCII 文本和插槽号“02”之间的空格,后跟区域“00”的结尾。
我需要在文件中找到这些模式和其他几个模式。 然后我需要修改部分模式并写入磁盘。
ExampleModify: (04 53 6C 6F 74 00 02 00) "From above" to (04 53 6C 6F 74 00 07 00) 改变 "slot number '02' to '07'.
另一个需要注意的是,虽然我需要在文件中搜索不同大小、长度和包含的数据的多个模式,但这些模式的多个部分可能包含需要单独修改的不同数据一个整体。
澄清:(Inventory, Slot, id, Count) - 被视为一个人的信息。
记录的每个人都可以有多个 (Inventory, Slot, id, Count) 副本。
我想向用户显示此信息,并让他们选择修改组中的每个元素。
我不是一个优秀的程序员,想学习,如果你有例子我很感激,如果你有建议,请给它。如果你能把它调低就更好了,谢谢。 我现在有一个正在进行的工作,但我现在卡住了。如果你想看看我有什么,请告诉我。
我所拥有的总结:将文件读入 byte[] 然后将整个数组显示到控制台。就是这样。带有一点格式和一些调试信息,用于定位我读入数组的那个块。
这是我在 pastebin 上的代码的链接。 LINK
我意识到我没有得到所有出现的 (Inventory, Slot, id, Count) 我也需要解决这个问题。
编辑:示例 (09 49 6E 76 65 6E 74 6F 72 79 0A 00 00 00 02 01 00) 这是我正在读取的文件中固定长度的二进制数据块。如前所述,09 表示字符串的长度。字符串后面是 (0A 00 00 00 02 01 00) 的重要部分是 (02) 这是因为这是二进制数据片中唯一改变的字节。 “02”表示“2”,表示该特定人员记录有 2 个 (Slot, id, Count) 实例。
(File)
(09 Inventory 0A 00 00 00 02 01 00) // Start of person 1's record with 2 instances.
(Slot)
(id)
(Count)
(Slot)
(id)
(Count)
(Rotation) // End of person 1's record
(09 Inventory 0A 00 00 00 04 01 00) // Start of person 2's record with 4 instances.
(Slot)
(id)
(Count)
(Slot)
(id)
(Count)
(Slot)
(id)
(Count)
(Slot)
(id)
(Count)
(Rotation) // End of person 2's record
(File End)
我的想法是我想编辑“id”或通过添加到库存中来增加插槽数量并添加更多 (Slot, id, Count) 实例。
"id" - 包含项目 ID
“Slot” - 包含库存槽号
“计数” - 包含该插槽中有多少项目。 编辑说明:如果我不清楚,请告诉我,再次感谢。
【问题讨论】:
-
我不太确定该尝试什么。但是,我将发布我拥有的代码,希望有人能指出我不知道更好的做法是多么愚蠢。我将在帖子的更新中添加代码链接。