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