2016-03-01 96 views
0

我有這個文本文件,我想解析器,並把它放到mysql數據庫:Java解析器文件文本

A:PE9301_P# show port 1/1/1 
=============================================================================== 
Ethernet Interface 
=============================================================================== 
Description  : PE9301_P:PE9148_P:01:10G 
Interface   : 1/1/1      Oper Speed  : 10 Gbps 
Link-level   : Ethernet     Config Speed  : N/A 
Admin State  : up       Oper Duplex  : full 
Oper State   : up - Active in LAG 1  Config Duplex : N/A 
Physical Link  : Yes      MTU    : 9212 
Single Fiber Mode : No       Min Frame Length : 64 Bytes 

,我想不僅僅是那些信息: PE9301,達 - 在LAG 1 我可以主動」找不到一個解決方案的幫助MZ PLZ

+2

你能不能至少告訴我們你想要的表結構?我認爲你的問題的完整答案有點太寬泛。 –

+1

看起來像廣泛使用'String.split',也許是一些正則表達式。 – ctst

+0

我沒有創建我的表,但我正在尋找我如何可以解析器沒有separtor –

回答

0

使用以下正則表達式:

/Description\s+:\s([\w\s]+)/g 

/Oper State\s+:\s(.{26,26})/g 

如果你想解析整個結構,使用字符長度而不是正則表達式將結構拆分爲鍵值數組,並將鍵與常量(「Description」,「Oper State」等等)進行比較。

的工作爲例,作爲一個Java測試單元:

private static final String NIFSOURCE = "A:PE9301_P# show port 1/1/1\r\n"+ 
     "===============================================================================\r\n"+ 
     "Ethernet Interface\r\n"+ 
     "===============================================================================\r\n"+ 
     "Description  : PE9301_P:PE9148_P:01:10G\r\n"+ 
     "Interface   : 1/1/1      Oper Speed  : 10 Gbps\r\n"+ 
     "Link-level   : Ethernet     Config Speed  : N/A\r\n"+ 
     "Admin State  : up       Oper Duplex  : full\r\n"+ 
     "Oper State   : up - Active in LAG 1  Config Duplex : N/A\r\n"+ 
     "Physical Link  : Yes      MTU    : 9212\r\n"+ 
     "Single Fiber Mode : No       Min Frame Length : 64 Bytes"; 

/** 
* Ceci est un test que l'ont peut remplacer par une méthode Main ou une function 
*                - Uncle Bob Martin 
*/ 
@Test 
public void NIFParseTest() { 
    String NIFdescription = null, NIFstate = null; 

    Pattern motifRE = Pattern.compile("^Description\\s+:\\s(\\w+)", Pattern.MULTILINE); 
    Pattern stateRE = Pattern.compile("^Oper State\\s+:\\s(.{26,26})", Pattern.MULTILINE | Pattern.UNIX_LINES); 

    Matcher foundMatch = motifRE.matcher(NIFSOURCE); 
    if (foundMatch.find()) { 
     NIFdescription = foundMatch.group(1); //0 est la chaine complète, les motifs entre parenthèse sont disponibles à l'index 1 
    } 

    foundMatch = stateRE.matcher(NIFSOURCE); 
    if (foundMatch.find()) { 
     NIFstate = foundMatch.group(1); 
    } 
    assertNotNull(NIFdescription); 
    assertNotNull(NIFstate); 
} 
+0

我不明白你的答案你可以爲我做一個例子plz –

+0

我只是爲你做了它 –