【发布时间】:2017-09-11 15:38:01
【问题描述】:
我有数百万个字符串,大约 8GB 的 HEX;每个字符串的长度为 3.2kb。
这些字符串中的每一个都包含我需要提取的多个数据部分。
这是一个这样的字符串的示例:
GPGGA,104644.091,,,,,0,0,,,M,,M,,*43$GPVTG,0.00,T,,M,0.00,N,0.00,K,N*32 标头测试。ÿÿ。 ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ$GPGGA, 104645.091,,,,,0,0,,,M,,M,,*42$GPVTG,0.00,T,,M,0.00,N,0.00,K,N*32标头测试.ÿÿ.ÿÿ.ÿÿ.ÿÿ 。 m ,, m ,,*41 $ gpvtg,0.00,t,m,0.00,n,0.00,k,n*32header test2 headertest2ÿ ,, 0,0 ,, M ,,*40 $ gpvtg,0.00,t ,, m,0.00,n,0.00,k,k,n*32header testk teskk。 GPGGA,104648.091 ,,, 0,0,,,, M ,, M ,,*4f $ gpvtg,0.00,0.00,t ,, m,m,0.00,n,0.00,n,0.00,k,n*32header testdumtestdÿ ,104649.091,,,,,0,0,,,M,,M,,*4E$GPVTG,0.00,T,,M,0.00,N,0.00,K,N*32标头测试}ÿÿ~ÿÿ.ÿÿ€ ÿÿ.ÿÿ,ÿÿƒÿÿ„ÿÿ...ÿÿ†ÿÿ‡ÿÿˆÿÿ‰ÿÿŠÿÿ‹ÿÿŒÿÿ.ÿÿŽÿÿ.ÿÿŽÿ.ÿÿ.ÿÿ'ÿÿ'ÿÿ“ÿÿ”ÿÿ•ÿÿ$GPGGA,104650,,,091,,,,0,50.09,,,, ,M,,*46$GPVTG,0.00,T ,,M,0.00,N,0.00,K,N*32头
正如你所看到的,它几乎是重复的:
GPGGA,104644.091,,,,,0,0,,,M,,M,,*43$GPVTG,0.00,T,,M,0.00,N,0.00,K,N*32 标头测试。ÿÿ。 ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ$GPGGA, 104645.091,,,,,0,0,,,M,,M,,*42$GPVTG,0.00,T,,M,0.00,N,0.00,K,N*32标头测试.ÿÿ.ÿÿ.ÿÿ.ÿÿ 。
我想把这个字符串分成两个这样的列表:
_GPS列表
$GPGGA,104644.091,,,,,0,0,,,M,,M,,*43
$GPVTG,0.00,T,,M,0.00,N,0.00,K,N*
$GPVTG,0.00,T,,M,0.00,N,0.00,K,N
_WavList
32HeaderTest.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ
32HeaderTest.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ.ÿÿ ÿÿ!ÿÿ"ÿÿ#ÿÿ$ÿÿ%ÿÿ&ÿÿ'ÿÿ(ÿÿ)ÿÿ*ÿÿ+ÿÿ,ÿÿ-ÿÿ.ÿÿ/ÿÿ0ÿÿ1ÿÿ
问题 1: 此重复不包含在单个字符串中,它会溢出到下一个字符串中。因此,如果某些数据跨越两个字符串的结尾和开头,我该如何处理?
问题 2:如何分析字符串并仅提取我需要的部分?
【问题讨论】:
-
无论您从何处获取此数据,似乎都认为应该将一堆二进制数据解码为 Windows-1252 字符。如果那里有任何控制字符,这将给您带来困难。如果可能,请返回源并要求他们正确以实际十六进制字符串的形式传递数据。或者,您可能是因为将文件视为文本而出错的人——实际上并非如此,而是经常包含可打印的文本。
-
8GB 外星语言,但肯定不是纯十六进制!
-
它是 GPS 和原始 WAV 数据的混合体。这是我制作的数据。我有实际的 HEX,但我认为人们可能更容易看到我需要的 ASCII 表示形式
-
你试过在“$”上分割字符串
-
我没有,但只是因为那不会给我想要的东西。如果我这样做,我会将 GPS 和 WAV 数据混合在一起。谢谢:)