gpt4 book ai didi

go - 使用两个字节字符查找文件

转载 作者:IT王子 更新时间:2023-10-29 02:37:13 25 4
gpt4 key购买 nike

我正在编写小型日志解析器,它应该可以在文件中找到一些标签。文件很大 (512mb) 并具有以下结构:

[2018.07.10 00:30:03:125] VersionInfo\886
...some data...
[2018.07.10 00:30:03:109][TraceID: 8HRWSI105YVO91]->IncomingTime\16
...some data...
[2018.07.10 00:30:03:109][TraceID: 8HRWSI105YVO91]->IncomingData\397
...some data...
[2018.07.10 00:30:03:749][TraceID: 8HRWSI105YVO91]->OutgoingData\26651
...somedata...

每个 block IncomingTime、IncomingData、OutgoingData 等 末尾的 block 大小(字符计数,而不是字节数)886、16、397、26651。有些 block 非常大,没有大缓冲区就无法读取(如果我使用 bufio)。我想使用 file.Seek 跳过不必要的 block 。

问题是 file.Seek 需要字节长度,而我只有字符计数( block 可能包含带有两个字节字符的 unicode 数据)。有没有机会使用字符数来跳过 block ?

最佳答案

The problem is that file.Seek needs bytes length and i've only characters count (block may have unicode data with two-byte charcters). Is there any chance to skip blocks using characters count?

这实际上是不可能的。正如您所描述的文件格式,以下两种情况都是可能的:

...VersionInfo\1
[ 20 ]
...VersionInfo\1
[ C2 A0 ]

如果你刚刚读过换行符并且你知道你需要读一个字符,你知道它在 1 到 2 个字节之间(UTF-8 字符甚至可以达到 4 个字节)但不知道哪个,并且盲目启动在不检查中间数据的情况下转发一定数量的字节是行不通的。病理情况是一个更大的 block ,其中前半部分有许多多字节字符,后半部分的文本恰好看起来像您的条目标题之一。

使用这种文件格式,您必须一次读取一个字符。

关于go - 使用两个字节字符查找文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51570204/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com