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/m.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燈, 水草

請輸入看板名稱,例如:e-shopping站內搜尋

TOP