C_and_CPP 板


LINE

※ [本文转录自 Programming 看板 #1OIdmi1H ] 作者: RealJustice (Nice to Meet You~) 看板: Programming 标题: [问题] 档案中的字串读取 时间: Fri Dec 9 17:40:57 2016 档案中有一行: key = "????????????????????" ??????? 是一串无规律的binary资料, 只知道最长长度限制. 现在问题是, C code 中要用甚麽函式, 才能正确地把 "???????????" 读到array中? 目前遇到的难处是, 里面可能有换行控制码, 甚至後退控制码, 还可能有 ", 等等/. 反正每个byte从0x00 ~ 0xff 都有可能, 所以各种字串处理的函式都有问题. --



※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 61.220.35.86
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Programming/M.1481276460.A.051.html



※ 发信站: 批踢踢实业坊(ptt.cc)
※ 转录者: RealJustice (61.220.35.86), 12/09/2016 17:45:06
1F:→ Schottky: binary资料就不要用字串处理函式去玩它了 12/09 17:47
2F:→ Schottky: 无规律的话是不是连 " 都有,这样你要怎麽判断开头结尾 12/09 17:48
请问具体要怎麽做呢? 从开档案的参数就有差别吗? ※ 编辑: RealJustice (61.220.35.86), 12/09/2016 17:53:34
3F:推 asd456fgh778: fgets 有用吗 12/09 17:57
4F:→ Schottky: 其实我不明白你的档案到底是什麽格式 12/09 17:58
5F:→ Schottky: 照你的描述,该行格式完全是搬石头砸自己脚 12/09 17:59
来不及了. 本来是能用 .txt 打开的档案, 偏偏有人在里面写了这奇妙的一行. 现在想要另外存档也行不通. ※ 编辑: RealJustice (61.220.35.86), 12/09/2016 18:02:26
6F:→ Schottky: 你至少要讲出一个人类能听懂的parse方法才有办法写程式 12/09 18:01
有 "从档案结尾往前找" 的函式吗? ※ 编辑: RealJustice (61.220.35.86), 12/09/2016 18:03:19
7F:→ Schottky: 否则我直接告诉你用 fread 去读你还是 parse 不出来 12/09 18:03
8F:→ Schottky: 那我只能说放弃吧~ 12/09 18:04
9F:→ Schottky: 一般要把金钥放进文字档都会先转成字串(比如十六进位) 12/09 18:05
10F:→ Schottky: 想要由後往前找,自己写个 for loop 就好啦~ 12/09 18:06
11F:→ Schottky: 问题是你确定 binary 的部分只有这一处吗? 12/09 18:07
对. 就是这一处. ※ 编辑: RealJustice (61.220.35.86), 12/09/2016 18:07:47
12F:→ Schottky: 应该说,你确定用到 " 的只有这一处吗? 12/09 18:08
13F:→ Schottky: 如果不只一对 " 出现,要如何配对 12/09 18:09
binary data 里面也有可能含有 " , 所以真的很难做, 才po版问的.... ※ 编辑: RealJustice (61.220.35.86), 12/09/2016 18:15:43
14F:推 bibo9901: 就无法做啊 结案 12/09 18:17
15F:→ Schottky: 对啊,就算你从档案後方往前找,还是一样没办法parse 12/09 18:25
16F:→ Schottky: 我建议是把那个乱塞binary不编码的白痴抓出来揍一顿 12/09 18:25
17F:推 LPH66: 这个档案现在这个样子可以做为原来的目的使用吗? 12/09 19:24
18F:→ LPH66: 不行的话就照楼上说的把塞进去的那个家伙抓出来要他负责 12/09 19:25
现在就是不太能使用啊....那串资料拿出来会有漏. ※ 编辑: RealJustice (118.165.28.31), 12/09/2016 21:23:32
19F:推 LPH66: 所以这就只有最一开始塞这些 binary 进去的人知道怎麽回事 12/09 21:26
20F:→ LPH66: 抓他出来要他改好 12/09 21:26
21F:→ LPH66: 基本上你们整个程式/系统因为这个 binary 的关系已经崩溃 12/09 21:29
现况是有些客户的资料已经这样存了. 我们不能把这些资料扔了, 必须捞出来. ※ 编辑: RealJustice (118.165.28.31), 12/09/2016 21:44:05
22F:推 firejox: 人眼能parse吗? 12/10 00:14
可以. 但是有几千份, 不能交给人眼做.
23F:→ CP64: 这应该就只能用 fgetc 之类的一个个慢慢读? 12/10 00:19
24F:→ CP64: 还是下一行有啥特定的东西吗? 好比说读到 "\n 就算结束? 12/10 00:20
binary data里面可能会有 \n. 所以这招也没法直接套用. ※ 编辑: RealJustice (118.165.28.31), 12/10/2016 08:21:26
25F:推 longlongint: 加个跳脱字元啊 12/10 09:44
26F:→ longlongint: 或是字串长度写在前面 12/10 09:44
27F:推 LPH66: 原 PO 现在想问的是这已经是既成事实了要怎麽补救 12/10 10:04
28F:→ LPH66: 个人觉得, 原 PO 你不要去想有没有哪个 general 做法能用 12/10 10:05
29F:→ LPH66: 既然你的目的是解决你眼前这份烂掉的文字档 12/10 10:05
30F:→ LPH66: 那就只要找一个你这份文字档适用的解法就好 12/10 10:06
31F:→ LPH66: 上面 CP64 讲的是 " 跟着 \n 两个 byte 12/10 10:06
32F:→ LPH66: 如果你扫了一下这几千份烂掉的档案里真的都没有这 pattern 12/10 10:07
33F:→ LPH66: 那它就是一个解法了 12/10 10:07
34F:→ LPH66: 少数有的或许找一个长一点的 pattern 例如 "\n 加下行开头 12/10 10:07
35F:→ LPH66: 例如如果下一行一定是哪个属性那就能用了 12/10 10:08
36F:→ LPH66: 简单说就是, 你要找的不是万灵丹, 而是要把死马当活马医 12/10 10:10
37F:推 firejox: 找key = ".*"\nxxx这样的pattern? 12/10 10:44
请问可以讲得更详细点吗? ※ 编辑: RealJustice (118.165.28.31), 12/10/2016 18:58:36 ※ 编辑: RealJustice (118.165.28.31), 12/10/2016 19:00:38
38F:→ iFEELing: 人眼可以判断? 可以描述一下人眼怎麽判断吗? 12/10 19:13
39F:→ iFEELing: 如果你用人眼可以判断 那代表已经可以找出规则了? 12/10 19:14
40F:推 firejox: 用regex的方式去找出来, xxx指的是下一个field名称,.* 12/11 00:13
41F:→ firejox: 是任意字元 12/11 00:13
42F:→ firejox: 如果一般的regex lib做不太出来的话,就自己推DFA来切 12/11 00:16
43F:→ firejox: 出来 12/11 00:16
44F:→ dou0228: 看起来是要做 name = "valuesxx.." 的判断,如果看到 12/12 12:16
45F:→ dou0228: key 的这个 name parse,就去启用特殊判断,不使用 fgets 12/12 12:17
46F:→ dou0228: 直到你遇到下一个 name = "valuesxxxx" 做结束 12/12 12:19
47F:→ annies5: 如果资料含换行符号,为何看起来只有一行? 12/22 16:58







like.gif 您可能会有兴趣的文章
icon.png[问题/行为] 猫晚上进房间会不会有憋尿问题
icon.pngRe: [闲聊] 选了错误的女孩成为魔法少女 XDDDDDDDDDD
icon.png[正妹] 瑞典 一张
icon.png[心得] EMS高领长版毛衣.墨小楼MC1002
icon.png[分享] 丹龙隔热纸GE55+33+22
icon.png[问题] 清洗洗衣机
icon.png[寻物] 窗台下的空间
icon.png[闲聊] 双极の女神1 木魔爵
icon.png[售车] 新竹 1997 march 1297cc 白色 四门
icon.png[讨论] 能从照片感受到摄影者心情吗
icon.png[狂贺] 贺贺贺贺 贺!岛村卯月!总选举NO.1
icon.png[难过] 羡慕白皮肤的女生
icon.png阅读文章
icon.png[黑特]
icon.png[问题] SBK S1安装於安全帽位置
icon.png[分享] 旧woo100绝版开箱!!
icon.pngRe: [无言] 关於小包卫生纸
icon.png[开箱] E5-2683V3 RX480Strix 快睿C1 简单测试
icon.png[心得] 苍の海贼龙 地狱 执行者16PT
icon.png[售车] 1999年Virage iO 1.8EXi
icon.png[心得] 挑战33 LV10 狮子座pt solo
icon.png[闲聊] 手把手教你不被桶之新手主购教学
icon.png[分享] Civic Type R 量产版官方照无预警流出
icon.png[售车] Golf 4 2.0 银色 自排
icon.png[出售] Graco提篮汽座(有底座)2000元诚可议
icon.png[问题] 请问补牙材质掉了还能再补吗?(台中半年内
icon.png[问题] 44th 单曲 生写竟然都给重复的啊啊!
icon.png[心得] 华南红卡/icash 核卡
icon.png[问题] 拔牙矫正这样正常吗
icon.png[赠送] 老莫高业 初业 102年版
icon.png[情报] 三大行动支付 本季掀战火
icon.png[宝宝] 博客来Amos水蜡笔5/1特价五折
icon.pngRe: [心得] 新鲜人一些面试分享
icon.png[心得] 苍の海贼龙 地狱 麒麟25PT
icon.pngRe: [闲聊] (君の名は。雷慎入) 君名二创漫画翻译
icon.pngRe: [闲聊] OGN中场影片:失踪人口局 (英文字幕)
icon.png[问题] 台湾大哥大4G讯号差
icon.png[出售] [全国]全新千寻侘草LED灯, 水草

请输入看板名称,例如:WOW站内搜寻

TOP