Fw: [问题] 档案中的字串读取

楼主: RealJustice (Nice to Meet You~)   2016-12-09 17:45:06
※ [本文转录自 Programming 看板 #1OIdmi1H ]
作者: RealJustice (Nice to Meet You~) 看板: Programming
标题: [问题] 档案中的字串读取
时间: Fri Dec 9 17:40:57 2016
档案中有一行:
key = "????????????????????"
??????? 是一串无规律的binary资料, 只知道最长长度限制.
现在问题是, C code 中要用什么函式, 才能正确地把 "???????????" 读到array中?
目前遇到的难处是, 里面可能有换行控制码, 甚至后退控制码, 还可能有 ", 等等/.
反正每个byte从0x00 ~ 0xff 都有可能,
所以各种字串处理的函式都有问题.
作者: Schottky (顺风相送)   2016-12-09 17:47:00
binary资料就不要用字串处理函式去玩它了无规律的话是不是连 " 都有,这样你要怎么判断开头结尾
作者: asd456fgh778 ( )   2016-12-09 17:57:00
fgets 有用吗
作者: Schottky (顺风相送)   2016-12-09 17:58:00
其实我不明白你的档案到底是什么格式照你的描述,该行格式完全是搬石头砸自己脚你至少要讲出一个人类能听懂的parse方法才有办法写程式否则我直接告诉你用 fread 去读你还是 parse 不出来那我只能说放弃吧~一般要把金钥放进文字档都会先转成字串(比如十六进制)想要由后往前找,自己写个 for loop 就好啦~问题是你确定 binary 的部分只有这一处吗?应该说,你确定用到 " 的只有这一处吗?如果不只一对 " 出现,要如何配对
作者: bibo9901 (function(){})()   2016-12-09 18:17:00
就无法做啊 结案
作者: Schottky (顺风相送)   2016-12-09 18:25:00
对啊,就算你从档案后方往前找,还是一样没办法parse我建议是把那个乱塞binary不编码的白痴抓出来揍一顿
作者: LPH66 (-6.2598534e+18f)   2016-12-09 19:24:00
这个档案现在这个样子可以做为原来的目的使用吗?不行的话就照楼上说的把塞进去的那个家伙抓出来要他负责所以这就只有最一开始塞这些 binary 进去的人知道怎么回事抓他出来要他改好基本上你们整个程式/系统因为这个 binary 的关系已经崩溃
作者: firejox (Tangent)   2016-12-10 00:14:00
人眼能parse吗?
作者: CP64 (( ̄▽ ̄#)﹏﹏)   2016-12-10 00:19:00
这应该就只能用 fgetc 之类的一个个慢慢读?还是下一行有啥特定的东西吗? 好比说读到 "\n 就算结束?
作者: longlongint (华哥尔)   2016-12-10 09:44:00
加个跳脱字符啊或是字串长度写在前面
作者: LPH66 (-6.2598534e+18f)   2016-12-10 10:04:00
原 PO 现在想问的是这已经是既成事实了要怎么补救个人觉得, 原 PO 你不要去想有没有哪个 general 做法能用既然你的目的是解决你眼前这份烂掉的文字档那就只要找一个你这份文字档适用的解法就好上面 CP64 讲的是 " 跟着 \n 两个 byte如果你扫了一下这几千份烂掉的档案里真的都没有这 pattern那它就是一个解法了少数有的或许找一个长一点的 pattern 例如 "\n 加下行开头例如如果下一行一定是哪个属性那就能用了简单说就是, 你要找的不是万灵丹, 而是要把死马当活马医
作者: firejox (Tangent)   2016-12-10 10:44:00
找key = ".*"\nxxx这样的pattern?
作者: iFEELing (ing)   2016-12-10 19:13:00
人眼可以判断? 可以描述一下人眼怎么判断吗?如果你用人眼可以判断 那代表已经可以找出规则了?
作者: firejox (Tangent)   2016-12-11 00:13:00
用regex的方式去找出来, xxx指的是下一个field名称,.*是任意字符如果一般的regex lib做不太出来的话,就自己推DFA来切出来
作者: dou0228 (7777)   2016-12-12 12:16:00
看起来是要做 name = "valuesxx.." 的判断,如果看到key 的这个 name parse,就去启用特殊判断,不使用 fgets直到你遇到下一个 name = "valuesxxxx" 做结束
作者: annies5 (念渝)   2016-12-22 16:58:00
如果资料含换行符号,为何看起来只有一行?

Links booklink

Contact Us: admin [ a t ] ucptt.com