2013-06-22 31 views
0

我試圖用C語言,像這樣的格式來解析文件:解析多串用C

FILE, "CONTENT", PATH 

所以,比如我有一個這樣的輸入:

file.txt, "This is a simple file", /home/user 
config.txt, "#Used to do any configurations 
      #ID = 'PC1' 
      VERSION = 1.25", /etc 

首先,我讀了行的文件的放入緩衝區,接下來我做的:

sscanf(buffer, "%[^,], \"%[^\"]\", %s", name, content, path) 

然而,不管怎麼樣,我只得到正確的單行輸入。有沒有辦法強制sscanf接受CONTENT字符串上的新行?

+2

「首先,我讀了線的文件中放入緩衝區,接下來我做的:」'sscanf'沒有看到任何東西后換行符,緩衝區不包含項目的後面的行。 –

+0

我實際上'printf'緩衝區,它包含每一行... –

+0

啊,所以你的口頭描述是不準確的。但是掃描集格式'%[^ \「]''應該接受換行符。'config.txt'條目存儲在'content'中嗎?我們能看到更多的代碼嗎? –

回答

0

對於非平凡的分析,我會tecommend使用Flex和Bison

+2

Flex自己在這裏,手寫的解析器會很好。它非常* flex * ible。 (無法抗拒)。在這種情況下,所有你需要的東西都是在''''''上分割記號,並且是字符串感知的。 – Will

+0

真的嗎? flex /野牛爲此?即使是ini文件格式也沒有必要。 –

+0

甚至對於真正的編程語言也沒有必要。我發現很難得到lex/bison規範,而不是親手編寫我自己的詞法分析器和解析器。 – 2013-06-23 04:33:03