2014-10-09 17 views
0

文件我嘗試解決以下解析問題,但我失敗:解析CSV與動態分離

我有一個CSV文件,該文件與文件內部的某一命令可以改變分隔符,以及當前分隔符可以逃脫用斜線。看看這個例子:

a,b,c,list;with;values 
a,b,c,list\,with\,values 
@separator,; 
a;b;c;list,with,values 
a;b;c;list\;with\;values 

這可能嗎?如何?

回答

1

看起來你想要有語境的語法。 Rascal只支持上下文無關語法。

該格式看起來很簡單,不能用一些上下文變量循環解決這個問題嗎? (在任何語言,有基本的字符串操作)

+1

太糟糕了我沒有免費獲得IDE的方式。 – Jasper 2014-10-10 08:49:30

+1

當然可以。你所要做的就是有一個產生「樹」的函數。它不一定是生成的解析器。它可以是生成解析器的組合或以不同方式生成「樹」的東西。 – jurgenv 2014-10-10 14:26:00

0

我會使用CSV閱讀器lang::csv::IO處理這些例外,如果我沒有弄錯。

如果您想爲此編寫語法,可以使用參數化非終端(我猜)爲您使用的每個新分隔符實例化新語法,或爲每個分隔符使用不同的語法。然後,您首先將文件拆分爲@separator,然後使用每種不同的語法分析不同的部分。

+1

「標準」不允許以這種方式轉義字符,它指出引號應該用於轉義換行符和分隔符。 我們的csv庫遵循這個標準。 – 2014-10-10 14:48:26